@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix revaise: <https://open-and-sustainable.github.io/revaise-model/schema/> .
@prefix sh: <http://www.w3.org/ns/shacl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

revaise:BatchProcessing a sh:NodeShape ;
    rdfs:comment "Batch processing within a session" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:description "When batch processing started" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:batch_started_at ],
        [ sh:datatype xsd:string ;
            sh:description "Session this batch belongs to" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:session_id ],
        [ sh:datatype xsd:float ;
            sh:description "Proportion of batch completed" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:batch_completion_rate ],
        [ sh:datatype xsd:dateTime ;
            sh:description "When batch processing completed" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:completed_at ],
        [ sh:datatype xsd:string ;
            sh:description "IDs of items in this batch" ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:items_in_batch ],
        [ sh:datatype xsd:integer ;
            sh:description "Sequential number of this batch" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:batch_number ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for this batch" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:batch_id ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of items in the batch" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:batch_size ] ;
    sh:targetClass revaise:BatchProcessing .

revaise:ConflictPattern a sh:NodeShape ;
    rdfs:comment "Pattern analysis of conflicts" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "Unique identifier for this pattern" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:pattern_id ],
        [ sh:datatype xsd:string ;
            sh:description "Type of conflict pattern" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:pattern_type ],
        [ sh:datatype xsd:string ;
            sh:description "Participants commonly involved" ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:involved_participants ],
        [ sh:datatype xsd:float ;
            sh:description "Success rate of resolutions" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:resolution_success_rate ],
        [ sh:datatype xsd:string ;
            sh:description "Common causes of this conflict pattern" ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:common_causes ],
        [ sh:datatype xsd:string ;
            sh:description "Fields commonly involved in this pattern" ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:involved_fields ],
        [ sh:datatype xsd:float ;
            sh:description "Average time to resolve in minutes" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:average_resolution_time ],
        [ sh:datatype xsd:integer ;
            sh:description "How often this pattern occurs" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:frequency ] ;
    sh:targetClass revaise:ConflictPattern .

revaise:ExtractionStage a sh:NodeShape ;
    rdfs:comment "Data extraction from included studies." ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:class <https://open-and-sustainable.github.io/revaise-model/schema/objects/stage_output/StageOutput> ;
            sh:description "Input artifacts for this stage" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 13 ;
            sh:path revaise:inputs ],
        [ sh:datatype xsd:string ;
            sh:description "Human-readable label for this stage execution" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path revaise:stage_label ],
        [ sh:class <https://open-and-sustainable.github.io/revaise-model/schema/objects/stage_output/StageOutput> ;
            sh:description "Output artifacts produced by this stage" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 14 ;
            sh:path revaise:outputs ],
        [ sh:class revaise:ExtractionForm ;
            sh:description "Data extraction forms/templates used" ;
            sh:nodeKind sh:IRI ;
            sh:order 0 ;
            sh:path revaise:extraction_forms ],
        [ sh:class revaise:ExtractionQualityControl ;
            sh:description "Quality control measures for extraction" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 3 ;
            sh:path revaise:extraction_quality_control ],
        [ sh:datatype xsd:string ;
            sh:description "Concrete stage class this execution represents (e.g., SearchStage, ReportingStage). Auto-populated; enables deserialization of polymorphic stages to typed RDF." ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:stage_category ],
        [ sh:datatype xsd:dateTime ;
            sh:description "When this stage ended" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 12 ;
            sh:path revaise:ended_at ],
        [ sh:datatype xsd:string ;
            sh:description "Description of what was done in this stage" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 9 ;
            sh:path revaise:stage_description ],
        [ sh:class revaise:ExtractionStatistics ;
            sh:description "Overall statistics for the extraction stage" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 4 ;
            sh:path revaise:extraction_statistics ],
        [ sh:datatype xsd:dateTime ;
            sh:description "When this stage started" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 11 ;
            sh:path revaise:started_at ],
        [ sh:description "Type of stage being executed" ;
            sh:in ( "scoping" "registration" "search" "deduplication" "screening_title_abstract" "screening_fulltext" "data_extraction" "risk_of_bias" "synthesis_meta_analysis" "synthesis_narrative" "reporting" "reporting_prisma" "reproducibility_pack" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:order 7 ;
            sh:path revaise:stage_type ],
        [ sh:class revaise:AIAssistance ;
            sh:description "AI assistance configuration for extraction" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 5 ;
            sh:path revaise:ai_assistance_config ],
        [ sh:description "Completion status of this stage execution" ;
            sh:in ( "NOT_STARTED" "IN_PROGRESS" "COMPLETE" "SKIPPED" "NOT_APPLICABLE" ) ;
            sh:maxCount 1 ;
            sh:order 10 ;
            sh:path revaise:stage_status ],
        [ sh:class revaise:ExtractedStudy ;
            sh:description "Studies with extracted data" ;
            sh:nodeKind sh:IRI ;
            sh:order 2 ;
            sh:path revaise:extracted_studies ],
        [ sh:datatype xsd:float ;
            sh:description "Estimated cost of this stage" ;
            sh:maxCount 1 ;
            sh:minInclusive 0 ;
            sh:nodeKind sh:Literal ;
            sh:order 15 ;
            sh:path revaise:cost ],
        [ sh:class revaise:ExtractionProtocol ;
            sh:description "Protocol for data extraction process" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 1 ;
            sh:path revaise:extraction_protocol ] ;
    sh:targetClass revaise:ExtractionStage .

revaise:PerformanceMetrics a sh:NodeShape ;
    rdfs:comment "General performance metrics" ;
    sh:closed true ;
    sh:ignoredProperties ( revaise:processing_speed revaise:human_agreement_rate rdf:type revaise:confidence_calibration ) ;
    sh:property [ sh:datatype xsd:float ;
            sh:description "Proportion of false negatives among negative calls" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:false_omission_rate ],
        [ sh:datatype xsd:float ;
            sh:description "Overall accuracy" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path revaise:accuracy ],
        [ sh:datatype xsd:float ;
            sh:description "Matthews correlation coefficient" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive -1e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 11 ;
            sh:path revaise:matthews_correlation ],
        [ sh:datatype xsd:float ;
            sh:description "Average of sensitivity and specificity" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 9 ;
            sh:path revaise:balanced_accuracy ],
        [ sh:datatype xsd:float ;
            sh:description "True negative rate" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:specificity ],
        [ sh:datatype xsd:float ;
            sh:description "Negative predictive value" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:negative_predictive_value ],
        [ sh:datatype xsd:float ;
            sh:description "Ratio of odds of positive test in diseased vs non-diseased" ;
            sh:maxCount 1 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 12 ;
            sh:path revaise:diagnostic_odds_ratio ],
        [ sh:datatype xsd:float ;
            sh:description "Harmonic mean of precision and recall" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 10 ;
            sh:path revaise:f1_score ],
        [ sh:datatype xsd:float ;
            sh:description "Expected proportion of false discoveries" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:false_discovery_rate ],
        [ sh:datatype xsd:float ;
            sh:description "Type II error rate" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:false_negative_rate ],
        [ sh:datatype xsd:float ;
            sh:description "Positive predictive value" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:precision ],
        [ sh:datatype xsd:float ;
            sh:description "Area under the ROC curve" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 13 ;
            sh:path revaise:area_under_curve ],
        [ sh:datatype xsd:float ;
            sh:description "True positive rate (recall)" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:sensitivity ],
        [ sh:datatype xsd:float ;
            sh:description "Type I error rate" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:false_positive_rate ] ;
    sh:targetClass revaise:PerformanceMetrics .

revaise:ProcessMetrics a sh:NodeShape ;
    rdfs:comment "Metrics related to process efficiency and completion" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:float ;
            sh:description "Total time spent in hours" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:process_total_time_hours ],
        [ sh:datatype xsd:string ;
            sh:description "Trend in processing speed (increasing/stable/decreasing)" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path revaise:throughput_trend ],
        [ sh:datatype xsd:float ;
            sh:description "Median time per item in minutes" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:median_time_per_item ],
        [ sh:datatype xsd:float ;
            sh:description "Proportion of items completed" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:completion_rate ],
        [ sh:datatype xsd:float ;
            sh:description "Average time per item in minutes" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:process_avg_time_per_item ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of items remaining" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:backlog_size ],
        [ sh:datatype xsd:integer ;
            sh:description "Total number of items to process" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:total_items ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of items completed" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:completed_items ],
        [ sh:datatype xsd:float ;
            sh:description "Average items processed per day" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:items_per_day ] ;
    sh:targetClass revaise:ProcessMetrics .

revaise:QualityChecklist a sh:NodeShape ;
    rdfs:comment "Checklist for quality assessment" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:class revaise:ChecklistItem ;
            sh:description "Items in the checklist" ;
            sh:nodeKind sh:IRI ;
            sh:order 3 ;
            sh:path revaise:checklist_items ],
        [ sh:datatype xsd:string ;
            sh:description "Guide for interpreting scores" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:interpretation_guide ],
        [ sh:datatype xsd:string ;
            sh:description "Method for scoring the checklist" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:scoring_method ],
        [ sh:datatype xsd:string ;
            sh:description "Version of the checklist" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:checklist_version ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for the checklist" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:checklist_id ],
        [ sh:datatype xsd:string ;
            sh:description "Name of the checklist" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:checklist_name ] ;
    sh:targetClass revaise:QualityChecklist .

revaise:QualityControl a sh:NodeShape ;
    rdfs:comment "Quality control measures and checks" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:integer ;
            sh:description "Number of issues identified" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:issues_found ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for this quality control check" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:qc_id ],
        [ sh:description "Type of quality control performed" ;
            sh:in ( "DOUBLE_CHECK" "SPOT_CHECK" "SYSTEMATIC_REVIEW" "AUTOMATED_VALIDATION" "CALIBRATION_EXERCISE" "AUDIT" "PEER_REVIEW" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:order 1 ;
            sh:path revaise:qc_type ],
        [ sh:datatype xsd:float ;
            sh:description "Proportion of items passing QC" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:qc_pass_rate ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of issues resolved" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:issues_resolved ],
        [ sh:datatype xsd:string ;
            sh:description "Corrective actions taken" ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path revaise:corrective_actions ],
        [ sh:datatype xsd:integer ;
            sh:description "Size of the sample checked" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:qc_sample_size ],
        [ sh:datatype xsd:dateTime ;
            sh:description "When QC was performed" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 9 ;
            sh:path revaise:qc_timestamp ],
        [ sh:description "Method used for sampling" ;
            sh:in ( "RANDOM" "STRATIFIED" "SYSTEMATIC" "PURPOSIVE" "CONVENIENCE" "RISK_BASED" ) ;
            sh:maxCount 1 ;
            sh:order 3 ;
            sh:path revaise:sample_method ],
        [ sh:datatype xsd:string ;
            sh:description "Specific checks performed" ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:checks_performed ],
        [ sh:datatype xsd:string ;
            sh:description "Who performed the QC" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 10 ;
            sh:path revaise:qc_performed_by ] ;
    sh:targetClass revaise:QualityControl .

revaise:RegistrationStage a sh:NodeShape ;
    rdfs:comment "Stage for managing review registrations and pre-registrations, focusing on referencing external registry entries rather than hosting registration content." ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "Concrete stage class this execution represents (e.g., SearchStage, ReportingStage). Auto-populated; enables deserialization of polymorphic stages to typed RDF." ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:stage_category ],
        [ sh:class revaise:RegistrationPolicy ;
            sh:description "Policy governing registration requirements" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 3 ;
            sh:path revaise:registration_policy ],
        [ sh:class <https://open-and-sustainable.github.io/revaise-model/schema/objects/stage_output/StageOutput> ;
            sh:description "Input artifacts for this stage" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 13 ;
            sh:path revaise:inputs ],
        [ sh:class revaise:RegistrationStatistics ;
            sh:description "Statistics about the registration process" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 5 ;
            sh:path revaise:registration_statistics ],
        [ sh:description "Type of stage being executed" ;
            sh:in ( "scoping" "registration" "search" "deduplication" "screening_title_abstract" "screening_fulltext" "data_extraction" "risk_of_bias" "synthesis_meta_analysis" "synthesis_narrative" "reporting" "reporting_prisma" "reproducibility_pack" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:order 7 ;
            sh:path revaise:stage_type ],
        [ sh:datatype xsd:float ;
            sh:description "Estimated cost of this stage" ;
            sh:maxCount 1 ;
            sh:minInclusive 0 ;
            sh:nodeKind sh:Literal ;
            sh:order 15 ;
            sh:path revaise:cost ],
        [ sh:description "Completion status of this stage execution" ;
            sh:in ( "NOT_STARTED" "IN_PROGRESS" "COMPLETE" "SKIPPED" "NOT_APPLICABLE" ) ;
            sh:maxCount 1 ;
            sh:order 10 ;
            sh:path revaise:stage_status ],
        [ sh:datatype xsd:string ;
            sh:description "Version ID of the current active registration" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:current_registration_version ],
        [ sh:class revaise:RegistrationProtocol ;
            sh:description "Protocol defining the registration approach and requirements" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 0 ;
            sh:path revaise:registration_protocol ],
        [ sh:class revaise:RegistrationQualityControl ;
            sh:description "Quality control measures for the registration process" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 4 ;
            sh:path revaise:registration_quality_control ],
        [ sh:datatype xsd:dateTime ;
            sh:description "When this stage started" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 11 ;
            sh:path revaise:started_at ],
        [ sh:class revaise:Registration ;
            sh:description "All registrations associated with this review" ;
            sh:minCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 1 ;
            sh:path revaise:registrations ],
        [ sh:datatype xsd:string ;
            sh:description "Human-readable label for this stage execution" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path revaise:stage_label ],
        [ sh:class <https://open-and-sustainable.github.io/revaise-model/schema/objects/stage_output/StageOutput> ;
            sh:description "Output artifacts produced by this stage" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 14 ;
            sh:path revaise:outputs ],
        [ sh:datatype xsd:dateTime ;
            sh:description "When this stage ended" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 12 ;
            sh:path revaise:ended_at ],
        [ sh:datatype xsd:string ;
            sh:description "Description of what was done in this stage" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 9 ;
            sh:path revaise:stage_description ] ;
    sh:targetClass revaise:RegistrationStage .

revaise:RegistrationTemplate a sh:NodeShape ;
    rdfs:comment "A template used for registering systematic reviews, defining required and optional fields." ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "Validation rules for the template" ;
            sh:nodeKind sh:Literal ;
            sh:order 12 ;
            sh:path revaise:validation_rules ],
        [ sh:description "URI where the template can be accessed" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 3 ;
            sh:path revaise:template_uri ],
        [ sh:datatype xsd:string ;
            sh:description "Organization or registry providing the template" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:template_provider ],
        [ sh:datatype xsd:string ;
            sh:description "JSON Schema or other formal definition of fields" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 11 ;
            sh:path revaise:field_definitions ],
        [ sh:datatype xsd:string ;
            sh:description "ID of the template that supersedes this one" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 16 ;
            sh:path revaise:successor_template_id ],
        [ sh:datatype xsd:date ;
            sh:description "Date the template was created" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 13 ;
            sh:path revaise:created_date ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for this template" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:template_id ],
        [ sh:datatype xsd:date ;
            sh:description "Date when this template will be or was deprecated" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 15 ;
            sh:path revaise:deprecation_date ],
        [ sh:class revaise:TemplateField ;
            sh:description "Fields required by this template" ;
            sh:nodeKind sh:IRI ;
            sh:order 9 ;
            sh:path revaise:required_fields ],
        [ sh:datatype xsd:string ;
            sh:defaultValue "en"^^xsd:string ;
            sh:description "Language of the template" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path revaise:template_language ],
        [ sh:datatype xsd:string ;
            sh:description "Version of the template" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:template_version ],
        [ sh:class revaise:TemplateField ;
            sh:description "Optional fields in this template" ;
            sh:nodeKind sh:IRI ;
            sh:order 10 ;
            sh:path revaise:optional_fields ],
        [ sh:description "Type of registration template" ;
            sh:in ( "PROSPERO" "OSF_PREREG" "OSF_PREREG_PLUS" "ASPREDICTED" "CLINICAL_TRIALS" "PRISMA_P" "COCHRANE" "CAMPBELL" "CUSTOM" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:order 6 ;
            sh:path revaise:template_type ],
        [ sh:datatype xsd:string ;
            sh:description "Human-readable name of the template" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:template_name ],
        [ sh:datatype xsd:dateTime ;
            sh:description "Date and time when the template was last updated" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 14 ;
            sh:path revaise:template_last_updated ],
        [ sh:datatype xsd:string ;
            sh:description "Description of the template and its purpose" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:template_description ],
        [ sh:datatype xsd:string ;
            sh:description "DOI of the template publication, if available (e.g., for PRISMA-P)" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:template_doi ] ;
    sh:targetClass revaise:RegistrationTemplate .

revaise:ReportingStage a sh:NodeShape ;
    rdfs:comment "Optional stage for documenting review reporting and publication activities." ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:class revaise:ReportingChecklist ;
            sh:description "Reporting checklists and item-level completion information" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 2 ;
            sh:path revaise:reporting_checklists ],
        [ sh:class revaise:ReportDocument ;
            sh:description "Manuscripts, preprints, reports, and supplementary reporting documents" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 3 ;
            sh:path revaise:report_documents ],
        [ sh:class <https://open-and-sustainable.github.io/revaise-model/schema/objects/stage_output/StageOutput> ;
            sh:description "Input artifacts for this stage" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 18 ;
            sh:path revaise:inputs ],
        [ sh:class <https://open-and-sustainable.github.io/revaise-model/schema/objects/stage_output/StageOutput> ;
            sh:description "Output artifacts produced by this stage" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 19 ;
            sh:path revaise:outputs ],
        [ sh:class revaise:ReportingStandard ;
            sh:description "Reporting standards used or planned" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 1 ;
            sh:path revaise:reporting_standards ],
        [ sh:class revaise:ReportingStatistics ;
            sh:description "Summary statistics for the reporting process" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 9 ;
            sh:path revaise:reporting_statistics ],
        [ sh:class revaise:ReportingDeviation ;
            sh:description "Protocol deviations disclosed in reporting" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 6 ;
            sh:path revaise:reporting_deviations ],
        [ sh:class revaise:PublicationRecord ;
            sh:description "Publication, submission, and dissemination records" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 5 ;
            sh:path revaise:publication_records ],
        [ sh:description "Completion status of this stage execution" ;
            sh:in ( "NOT_STARTED" "IN_PROGRESS" "COMPLETE" "SKIPPED" "NOT_APPLICABLE" ) ;
            sh:maxCount 1 ;
            sh:order 15 ;
            sh:path revaise:stage_status ],
        [ sh:datatype xsd:string ;
            sh:description "Concrete stage class this execution represents (e.g., SearchStage, ReportingStage). Auto-populated; enables deserialization of polymorphic stages to typed RDF." ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 11 ;
            sh:path revaise:stage_category ],
        [ sh:datatype xsd:string ;
            sh:description "Description of what was done in this stage" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 14 ;
            sh:path revaise:stage_description ],
        [ sh:datatype xsd:dateTime ;
            sh:description "When this stage ended" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 17 ;
            sh:path revaise:ended_at ],
        [ sh:class revaise:ReportingProtocol ;
            sh:description "Protocol or plan for reporting the review" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 0 ;
            sh:path revaise:reporting_protocol ],
        [ sh:datatype xsd:dateTime ;
            sh:description "When this stage started" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 16 ;
            sh:path revaise:started_at ],
        [ sh:class revaise:AIAssistance ;
            sh:description "AI assistance configuration for reporting" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 10 ;
            sh:path revaise:ai_assistance_config ],
        [ sh:class revaise:FlowDiagram ;
            sh:description "Study selection flow diagram information if applicable" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 4 ;
            sh:path revaise:flow_diagram ],
        [ sh:datatype xsd:string ;
            sh:description "Human-readable label for this stage execution" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 13 ;
            sh:path revaise:stage_label ],
        [ sh:class revaise:ReportingQualityControl ;
            sh:description "Quality control measures for reporting" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 8 ;
            sh:path revaise:reporting_quality_control ],
        [ sh:description "Type of stage being executed" ;
            sh:in ( "scoping" "registration" "search" "deduplication" "screening_title_abstract" "screening_fulltext" "data_extraction" "risk_of_bias" "synthesis_meta_analysis" "synthesis_narrative" "reporting" "reporting_prisma" "reproducibility_pack" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:order 12 ;
            sh:path revaise:stage_type ],
        [ sh:class revaise:ReportingApproval ;
            sh:description "Author, stakeholder, or governance approvals for reports" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 7 ;
            sh:path revaise:reporting_approvals ],
        [ sh:datatype xsd:float ;
            sh:description "Estimated cost of this stage" ;
            sh:maxCount 1 ;
            sh:minInclusive 0 ;
            sh:nodeKind sh:Literal ;
            sh:order 20 ;
            sh:path revaise:cost ] ;
    sh:targetClass revaise:ReportingStage .

revaise:ResolutionStatistics a sh:NodeShape ;
    rdfs:comment "Statistics about conflict resolution" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:float ;
            sh:description "Average time to resolve conflicts in minutes" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:average_resolution_time ],
        [ sh:class revaise:ResolutionMethodCount ;
            sh:description "Count of each resolution method used" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 5 ;
            sh:path revaise:resolution_methods_used ],
        [ sh:datatype xsd:integer ;
            sh:description "Total number of conflicts identified" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:total_conflicts ],
        [ sh:datatype xsd:string ;
            sh:description "Matrix showing agreement patterns between participants" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:participant_agreement_matrix ],
        [ sh:description "Most frequently occurring conflict type" ;
            sh:in ( "INCLUSION_EXCLUSION" "DATA_VALUE" "CLASSIFICATION" "QUALITY_RATING" "INTERPRETATION" "MISSING_DATA" "METHODOLOGICAL" "TECHNICAL" ) ;
            sh:maxCount 1 ;
            sh:order 6 ;
            sh:path revaise:most_common_conflict_type ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of conflicts resolved" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:resolved_conflicts ],
        [ sh:datatype xsd:float ;
            sh:description "Proportion of conflicts resolved" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:resolution_rate ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of conflicts pending resolution" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:pending_conflicts ] ;
    sh:targetClass revaise:ResolutionStatistics .

revaise:Review a sh:NodeShape ;
    rdfs:comment "Root container for a systematic review. This is the primary object that contains all review data, stages, literature records, and artifacts. Every RevAIse document should have a Review as its top-level object." ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:class revaise:ConformanceAssertion ;
            sh:description "Stored results of conformance checks against declared protocols" ;
            sh:nodeKind sh:IRI ;
            sh:order 7 ;
            sh:path revaise:conformance_assertions ],
        [ sh:class revaise:StageExecution ;
            sh:description "Stages executed in this review" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 25 ;
            sh:path revaise:stages ],
        [ sh:datatype xsd:date ;
            sh:description "Date review completed" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 15 ;
            sh:path revaise:completion_date ],
        [ sh:datatype xsd:dateTime ;
            sh:description "When this review record was created" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 17 ;
            sh:path revaise:created_at ],
        [ sh:class <https://open-and-sustainable.github.io/revaise-model/schema/objects/stage_output/StageOutput> ;
            sh:description "Outputs and logs produced by the review stages" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 27 ;
            sh:path revaise:stage_outputs ],
        [ sh:datatype xsd:string ;
            sh:description "Version of the review" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 11 ;
            sh:path revaise:version ],
        [ sh:description "Current status of the review" ;
            sh:in ( "PROTOCOL" "IN_PROGRESS" "COMPLETED" "PUBLISHED" "UPDATED" "WITHDRAWN" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:order 10 ;
            sh:path revaise:review_status ],
        [ sh:class <https://open-and-sustainable.github.io/revaise-model/schema/objects/protocol/Protocol> ;
            sh:description "Review protocol with registration details" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 5 ;
            sh:path revaise:protocol ],
        [ sh:class revaise:FlowDiagram ;
            sh:description "Study selection flow diagram counts" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 23 ;
            sh:path revaise:flow_diagram ],
        [ sh:class revaise:LiteratureRecord ;
            sh:description "Literature records managed in this review" ;
            sh:nodeKind sh:IRI ;
            sh:order 26 ;
            sh:path revaise:literature_records ],
        [ sh:class <https://open-and-sustainable.github.io/revaise-model/schema/objects/software_env/SoftwareEnv> ;
            sh:description "Software environment for reproducibility" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 28 ;
            sh:path revaise:software_env ],
        [ sh:class revaise:Author ;
            sh:description "Corresponding author for the review" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 9 ;
            sh:path revaise:corresponding_author ],
        [ sh:datatype xsd:string ;
            sh:description "Country where review is conducted" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 13 ;
            sh:path revaise:review_country ],
        [ sh:description "Type of review being conducted" ;
            sh:in ( "SYSTEMATIC_REVIEW" "META_ANALYSIS" "SCOPING_REVIEW" "RAPID_REVIEW" "UMBRELLA_REVIEW" "NARRATIVE_REVIEW" "LIVING_REVIEW" "MIXED_METHODS" "REALIST_REVIEW" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:order 2 ;
            sh:path revaise:review_type ],
        [ sh:class revaise:ProtocolReference ;
            sh:description "Protocols or guidelines this review or record declares conformance to" ;
            sh:nodeKind sh:IRI ;
            sh:order 6 ;
            sh:path revaise:conforms_to ],
        [ sh:datatype xsd:string ;
            sh:description "Title of the systematic review" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:review_title ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for this review" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:review_id ],
        [ sh:datatype xsd:string ;
            sh:description "Abstract or summary of the review" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:review_abstract ],
        [ sh:datatype xsd:dateTime ;
            sh:description "Last update to the review" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 16 ;
            sh:path revaise:last_updated ],
        [ sh:datatype xsd:string ;
            sh:description "Keywords or tags for the review" ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:review_keywords ],
        [ sh:datatype xsd:string ;
            sh:description "Primary language of the review" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 12 ;
            sh:path revaise:review_language ],
        [ sh:datatype xsd:string ;
            sh:description "Ethical approval information if applicable" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 21 ;
            sh:path revaise:ethical_approval ],
        [ sh:class revaise:Author ;
            sh:description "Review authors" ;
            sh:minCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 8 ;
            sh:path revaise:review_authors ],
        [ sh:class revaise:ReviewNarrative ;
            sh:description "Narrative prose sections of the review report" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 24 ;
            sh:path revaise:sections ],
        [ sh:datatype xsd:string ;
            sh:description "Declaration of conflicts of interest" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 20 ;
            sh:path revaise:conflicts_of_interest ],
        [ sh:class revaise:FundingSource ;
            sh:description "Sources of funding for the review" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 19 ;
            sh:path revaise:funding_sources ],
        [ sh:datatype xsd:string ;
            sh:description "Statement on publicly available data, code, and other materials" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 22 ;
            sh:path revaise:data_availability ],
        [ sh:datatype xsd:date ;
            sh:description "Date review started" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 14 ;
            sh:path revaise:start_date ],
        [ sh:datatype xsd:dateTime ;
            sh:description "When this review record was last updated" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 18 ;
            sh:path revaise:updated_at ] ;
    sh:targetClass revaise:Review .

revaise:RiskOfBiasAssessmentStage a sh:NodeShape ;
    rdfs:comment "Stage for assessing methodological risk of bias in included studies." ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:class revaise:RobProtocol ;
            sh:description "Protocol defining the risk-of-bias assessment approach" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 0 ;
            sh:path revaise:rob_protocol ],
        [ sh:description "Type of stage being executed" ;
            sh:in ( "scoping" "registration" "search" "deduplication" "screening_title_abstract" "screening_fulltext" "data_extraction" "risk_of_bias" "synthesis_meta_analysis" "synthesis_narrative" "reporting" "reporting_prisma" "reproducibility_pack" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:order 5 ;
            sh:path revaise:stage_type ],
        [ sh:class revaise:RobStatistics ;
            sh:description "Summary statistics for the assessment stage" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 3 ;
            sh:path revaise:rob_statistics ],
        [ sh:datatype xsd:dateTime ;
            sh:description "When this stage started" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 9 ;
            sh:path revaise:started_at ],
        [ sh:description "Completion status of this stage execution" ;
            sh:in ( "NOT_STARTED" "IN_PROGRESS" "COMPLETE" "SKIPPED" "NOT_APPLICABLE" ) ;
            sh:maxCount 1 ;
            sh:order 8 ;
            sh:path revaise:stage_status ],
        [ sh:class revaise:RobAssessment ;
            sh:description "Per-study risk-of-bias assessments" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 1 ;
            sh:path revaise:rob_assessments ],
        [ sh:class <https://open-and-sustainable.github.io/revaise-model/schema/objects/stage_output/StageOutput> ;
            sh:description "Input artifacts for this stage" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 11 ;
            sh:path revaise:inputs ],
        [ sh:class <https://open-and-sustainable.github.io/revaise-model/schema/objects/stage_output/StageOutput> ;
            sh:description "Output artifacts produced by this stage" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 12 ;
            sh:path revaise:outputs ],
        [ sh:datatype xsd:string ;
            sh:description "Description of what was done in this stage" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:stage_description ],
        [ sh:datatype xsd:string ;
            sh:description "Human-readable label for this stage execution" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:stage_label ],
        [ sh:class revaise:RobQualityControl ;
            sh:description "Quality control measures for the assessment process" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 2 ;
            sh:path revaise:rob_quality_control ],
        [ sh:datatype xsd:string ;
            sh:description "Concrete stage class this execution represents (e.g., SearchStage, ReportingStage). Auto-populated; enables deserialization of polymorphic stages to typed RDF." ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:stage_category ],
        [ sh:datatype xsd:dateTime ;
            sh:description "When this stage ended" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 10 ;
            sh:path revaise:ended_at ],
        [ sh:datatype xsd:float ;
            sh:description "Estimated cost of this stage" ;
            sh:maxCount 1 ;
            sh:minInclusive 0 ;
            sh:nodeKind sh:Literal ;
            sh:order 13 ;
            sh:path revaise:cost ] ;
    sh:targetClass revaise:RiskOfBiasAssessmentStage .

revaise:ScopingStage a sh:NodeShape ;
    rdfs:comment "Optional stage documenting exploratory work before or alongside protocol finalization." ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:description "Type of stage being executed" ;
            sh:in ( "scoping" "registration" "search" "deduplication" "screening_title_abstract" "screening_fulltext" "data_extraction" "risk_of_bias" "synthesis_meta_analysis" "synthesis_narrative" "reporting" "reporting_prisma" "reproducibility_pack" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:order 11 ;
            sh:path revaise:stage_type ],
        [ sh:class <https://open-and-sustainable.github.io/revaise-model/schema/objects/stage_output/StageOutput> ;
            sh:description "Output artifacts produced by this stage" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 18 ;
            sh:path revaise:outputs ],
        [ sh:datatype xsd:string ;
            sh:description "Concrete stage class this execution represents (e.g., SearchStage, ReportingStage). Auto-populated; enables deserialization of polymorphic stages to typed RDF." ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 10 ;
            sh:path revaise:stage_category ],
        [ sh:description "Completion status of this stage execution" ;
            sh:in ( "NOT_STARTED" "IN_PROGRESS" "COMPLETE" "SKIPPED" "NOT_APPLICABLE" ) ;
            sh:maxCount 1 ;
            sh:order 14 ;
            sh:path revaise:stage_status ],
        [ sh:class revaise:ScopingProtocol ;
            sh:description "Protocol or plan for the scoping activity" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 0 ;
            sh:path revaise:scoping_protocol ],
        [ sh:datatype xsd:string ;
            sh:description "Human-readable label for this stage execution" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 12 ;
            sh:path revaise:stage_label ],
        [ sh:class <https://open-and-sustainable.github.io/revaise-model/schema/objects/stage_output/StageOutput> ;
            sh:description "Outputs produced during scoping" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 6 ;
            sh:path revaise:scoping_outputs ],
        [ sh:class revaise:StakeholderInput ;
            sh:description "Input from stakeholders, domain experts, librarians, or methodologists" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 4 ;
            sh:path revaise:stakeholder_inputs ],
        [ sh:datatype xsd:string ;
            sh:description "Description of what was done in this stage" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 13 ;
            sh:path revaise:stage_description ],
        [ sh:datatype xsd:dateTime ;
            sh:description "When this stage ended" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 16 ;
            sh:path revaise:ended_at ],
        [ sh:class <https://open-and-sustainable.github.io/revaise-model/schema/objects/stage_output/StageOutput> ;
            sh:description "Input artifacts for this stage" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 17 ;
            sh:path revaise:inputs ],
        [ sh:class revaise:AIAssistance ;
            sh:description "AI assistance configuration for scoping" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 9 ;
            sh:path revaise:ai_assistance_config ],
        [ sh:datatype xsd:float ;
            sh:description "Estimated cost of this stage" ;
            sh:maxCount 1 ;
            sh:minInclusive 0 ;
            sh:nodeKind sh:Literal ;
            sh:order 19 ;
            sh:path revaise:cost ],
        [ sh:class revaise:ExploratorySearch ;
            sh:description "Exploratory searches used to understand the evidence landscape" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 2 ;
            sh:path revaise:exploratory_searches ],
        [ sh:class revaise:ScopingQualityControl ;
            sh:description "Quality control measures for the scoping process" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 7 ;
            sh:path revaise:scoping_quality_control ],
        [ sh:class revaise:FeasibilityAssessment ;
            sh:description "Assessment of whether the planned review scope is feasible" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 5 ;
            sh:path revaise:feasibility_assessment ],
        [ sh:class revaise:ScopingDecision ;
            sh:description "Decisions made while refining the review scope" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 3 ;
            sh:path revaise:scoping_decisions ],
        [ sh:class revaise:ReviewQuestionCandidate ;
            sh:description "Candidate review questions considered during scoping" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 1 ;
            sh:path revaise:scoping_question_candidates ],
        [ sh:class revaise:ScopingStatistics ;
            sh:description "Summary statistics for the scoping process" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 8 ;
            sh:path revaise:scoping_statistics ],
        [ sh:datatype xsd:dateTime ;
            sh:description "When this stage started" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 15 ;
            sh:path revaise:started_at ] ;
    sh:targetClass revaise:ScopingStage .

revaise:ScreeningQualityControl a sh:NodeShape ;
    rdfs:comment "Quality control for screening process" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:class revaise:AgreementMetrics ;
            sh:description "Inter-rater agreement metrics" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 5 ;
            sh:path revaise:base_agreement_metrics ],
        [ sh:datatype xsd:boolean ;
            sh:description "Whether calibration exercises were performed" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path revaise:base_calibration_performed ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for quality control instance" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:base_qc_id ],
        [ sh:datatype xsd:string ;
            sh:description "Consistency checks performed during screening" ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:screening_consistency_checks ],
        [ sh:datatype xsd:string ;
            sh:description "Additional quality control notes" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 9 ;
            sh:path revaise:base_qc_notes ],
        [ sh:datatype xsd:float ;
            sh:description "Agreement level achieved in pilot screening" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:pilot_agreement_achieved ],
        [ sh:datatype xsd:float ;
            sh:description "Proportion of items double-checked" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:base_double_checking_rate ],
        [ sh:datatype xsd:string ;
            sh:description "Type of quality control (screening, extraction, synthesis, etc.)" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:base_qc_type ],
        [ sh:datatype xsd:float ;
            sh:description "Proportion of items spot-checked" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:base_spot_check_rate ],
        [ sh:class revaise:ConflictResolution ;
            sh:description "Record of resolved discrepancies" ;
            sh:nodeKind sh:IRI ;
            sh:order 6 ;
            sh:path revaise:base_discrepancy_resolutions ] ;
    sh:targetClass revaise:ScreeningQualityControl .

revaise:ScreeningStage a sh:NodeShape ;
    rdfs:comment "Execution of the screening stage, including deduplication and multiple screening rounds." ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:description "Completion status of this stage execution" ;
            sh:in ( "NOT_STARTED" "IN_PROGRESS" "COMPLETE" "SKIPPED" "NOT_APPLICABLE" ) ;
            sh:maxCount 1 ;
            sh:order 9 ;
            sh:path revaise:stage_status ],
        [ sh:datatype xsd:float ;
            sh:description "Estimated cost of this stage" ;
            sh:maxCount 1 ;
            sh:minInclusive 0 ;
            sh:nodeKind sh:Literal ;
            sh:order 14 ;
            sh:path revaise:cost ],
        [ sh:datatype xsd:dateTime ;
            sh:description "When this stage ended" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 11 ;
            sh:path revaise:ended_at ],
        [ sh:datatype xsd:string ;
            sh:description "Concrete stage class this execution represents (e.g., SearchStage, ReportingStage). Auto-populated; enables deserialization of polymorphic stages to typed RDF." ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:stage_category ],
        [ sh:datatype xsd:string ;
            sh:description "Human-readable label for this stage execution" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:stage_label ],
        [ sh:class revaise:ScreeningProtocol ;
            sh:description "Protocol defining the screening process" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 3 ;
            sh:path revaise:screening_protocol ],
        [ sh:datatype xsd:string ;
            sh:description "Description of what was done in this stage" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path revaise:stage_description ],
        [ sh:class <https://open-and-sustainable.github.io/revaise-model/schema/objects/stage_output/StageOutput> ;
            sh:description "Input artifacts for this stage" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 12 ;
            sh:path revaise:inputs ],
        [ sh:class revaise:ScreeningRound ;
            sh:description "Different rounds of screening (e.g., title/abstract, full-text)" ;
            sh:minCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 1 ;
            sh:path revaise:screening_rounds ],
        [ sh:class revaise:DeduplicationProcess ;
            sh:description "Process for identifying and removing duplicate records" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 0 ;
            sh:path revaise:deduplication_process ],
        [ sh:class revaise:ScreeningStatistics ;
            sh:description "Overall statistics for the entire screening stage" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 4 ;
            sh:path revaise:overall_statistics ],
        [ sh:class revaise:ScreeningCriteria ;
            sh:description "Inclusion and exclusion criteria for screening" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 2 ;
            sh:path revaise:screening_criteria ],
        [ sh:class <https://open-and-sustainable.github.io/revaise-model/schema/objects/stage_output/StageOutput> ;
            sh:description "Output artifacts produced by this stage" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 13 ;
            sh:path revaise:outputs ],
        [ sh:datatype xsd:dateTime ;
            sh:description "When this stage started" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 10 ;
            sh:path revaise:started_at ],
        [ sh:description "Type of stage being executed" ;
            sh:in ( "scoping" "registration" "search" "deduplication" "screening_title_abstract" "screening_fulltext" "data_extraction" "risk_of_bias" "synthesis_meta_analysis" "synthesis_narrative" "reporting" "reporting_prisma" "reproducibility_pack" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:order 6 ;
            sh:path revaise:stage_type ] ;
    sh:targetClass revaise:ScreeningStage .

revaise:SearchStage a sh:NodeShape ;
    rdfs:comment "Executing literature search strategies." ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:float ;
            sh:description "Estimated cost of this stage" ;
            sh:maxCount 1 ;
            sh:minInclusive 0 ;
            sh:nodeKind sh:Literal ;
            sh:order 15 ;
            sh:path revaise:cost ],
        [ sh:description "Type of stage being executed" ;
            sh:in ( "scoping" "registration" "search" "deduplication" "screening_title_abstract" "screening_fulltext" "data_extraction" "risk_of_bias" "synthesis_meta_analysis" "synthesis_narrative" "reporting" "reporting_prisma" "reproducibility_pack" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:order 7 ;
            sh:path revaise:stage_type ],
        [ sh:class revaise:Database ;
            sh:description "Databases used for literature search" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 1 ;
            sh:path revaise:databases ],
        [ sh:class revaise:SearchQuery ;
            sh:description "Search queries executed" ;
            sh:nodeKind sh:IRI ;
            sh:order 2 ;
            sh:path revaise:search_queries ],
        [ sh:datatype xsd:string ;
            sh:description "Human-readable label for this stage execution" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path revaise:stage_label ],
        [ sh:class <https://open-and-sustainable.github.io/revaise-model/schema/objects/stage_output/StageOutput> ;
            sh:description "Output artifacts produced by this stage" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 14 ;
            sh:path revaise:outputs ],
        [ sh:class revaise:LiteratureRecordCollection ;
            sh:description "Collections of literature records resulting from searches" ;
            sh:nodeKind sh:IRI ;
            sh:order 3 ;
            sh:path revaise:result_collections ],
        [ sh:description "Completion status of this stage execution" ;
            sh:in ( "NOT_STARTED" "IN_PROGRESS" "COMPLETE" "SKIPPED" "NOT_APPLICABLE" ) ;
            sh:maxCount 1 ;
            sh:order 10 ;
            sh:path revaise:stage_status ],
        [ sh:class <https://open-and-sustainable.github.io/revaise-model/schema/objects/stage_output/StageOutput> ;
            sh:description "Input artifacts for this stage" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 13 ;
            sh:path revaise:inputs ],
        [ sh:class revaise:SearchStatistics ;
            sh:description "Statistics about the search process" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 5 ;
            sh:path revaise:search_statistics ],
        [ sh:datatype xsd:dateTime ;
            sh:description "When this stage started" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 11 ;
            sh:path revaise:started_at ],
        [ sh:datatype xsd:string ;
            sh:description "Description of what was done in this stage" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 9 ;
            sh:path revaise:stage_description ],
        [ sh:datatype xsd:string ;
            sh:description "Concrete stage class this execution represents (e.g., SearchStage, ReportingStage). Auto-populated; enables deserialization of polymorphic stages to typed RDF." ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:stage_category ],
        [ sh:datatype xsd:dateTime ;
            sh:description "When this stage ended" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 12 ;
            sh:path revaise:ended_at ],
        [ sh:class revaise:SearchQualityControl ;
            sh:description "Quality control measures for the search process" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 4 ;
            sh:path revaise:search_quality_control ],
        [ sh:class revaise:SearchProtocol ;
            sh:description "Protocol defining the search strategy and approach" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 0 ;
            sh:path revaise:search_protocol ] ;
    sh:targetClass revaise:SearchStage .

revaise:SessionMetrics a sh:NodeShape ;
    rdfs:comment "Metrics for a work session" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:float ;
            sh:description "Average time between breaks in minutes" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:break_frequency ],
        [ sh:datatype xsd:float ;
            sh:description "Rate of items requiring rework" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:rework_rate ],
        [ sh:datatype xsd:float ;
            sh:description "Average time per item in minutes" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:session_avg_time_per_item ],
        [ sh:datatype xsd:float ;
            sh:description "Measure of session focus/consistency" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:focus_score ],
        [ sh:datatype xsd:string ;
            sh:description "Reference to the work session" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:session_id ],
        [ sh:datatype xsd:float ;
            sh:description "Items processed per hour" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:items_per_hour ],
        [ sh:datatype xsd:float ;
            sh:description "Rate of errors made" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:error_rate ] ;
    sh:targetClass revaise:SessionMetrics .

revaise:StageProtocol a sh:NodeShape ;
    rdfs:comment "Base class for protocols defining how a review stage should be conducted. Stage-specific protocols should inherit from this class." ;
    sh:closed false ;
    sh:ignoredProperties ( revaise:missing_data_strategy revaise:minimum_extractors_per_study revaise:population_scope revaise:initial_review_question revaise:registration_update_policy revaise:synthesis_approach revaise:registration_timing revaise:date_restrictions revaise:data_availability_plan revaise:transparency_commitments revaise:disagreement_resolution revaise:embargo_period revaise:blind_screening revaise:blinding_level revaise:planned_comparisons revaise:concept_scope revaise:rob_domains revaise:target_audiences revaise:language_restrictions revaise:scoping_start_criteria revaise:search_strategy_description revaise:registration_platforms revaise:screening_order revaise:reporting_timeline revaise:independent_extraction revaise:screening_batch_size revaise:effect_measures revaise:data_transformation_rules revaise:rob_tool_version revaise:peer_review_search_strategy revaise:minimum_raters revaise:disagreement_resolution_method revaise:publication_type_restrictions revaise:target_publication_types revaise:extraction_order revaise:grey_literature_approach revaise:search_limits revaise:pilot_agreement_threshold revaise:pilot_screening_size revaise:heterogeneity_assessment revaise:rob_tool revaise:preprint_plan revaise:extraction_guidance rdf:type revaise:scoping_objective revaise:scoping_stop_criteria revaise:open_access_plan revaise:planned_reporting_standards revaise:conflict_resolution_strategy revaise:context_scope revaise:require_consensus revaise:minimum_reviewers_per_record revaise:planned_scoping_methods ) ;
    sh:property [ sh:class revaise:ExternalTool ;
            sh:description "Tools used in this stage" ;
            sh:nodeKind sh:IRI ;
            sh:order 4 ;
            sh:path revaise:base_protocol_tools ],
        [ sh:class revaise:ExternalTool ;
            sh:description "Software packages used in this stage" ;
            sh:nodeKind sh:IRI ;
            sh:order 5 ;
            sh:path revaise:base_protocol_software ],
        [ sh:datatype xsd:string ;
            sh:description "Additional notes about the protocol" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:base_protocol_notes ],
        [ sh:datatype xsd:string ;
            sh:description "Deviations from the planned protocol" ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:base_protocol_deviations ],
        [ sh:datatype xsd:string ;
            sh:description "Detailed description of the protocol" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:base_protocol_description ],
        [ sh:datatype xsd:date ;
            sh:description "Date the protocol was finalized" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:base_protocol_date ],
        [ sh:class revaise:StageTrainingInfo ;
            sh:description "Training provided for this stage" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 8 ;
            sh:path revaise:base_protocol_training ],
        [ sh:datatype xsd:string ;
            sh:description "Version of the protocol" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:base_protocol_version ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for this stage protocol" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:base_protocol_id ] ;
    sh:targetClass revaise:StageProtocol .

revaise:StageQualityControl a sh:NodeShape ;
    rdfs:comment "Base class for quality control measures across review stages. Stage-specific QC classes should inherit from this." ;
    sh:closed false ;
    sh:ignoredProperties ( revaise:rob_inter_rater_reliability_checked revaise:search_completeness_assessment revaise:registration_accuracy_verification revaise:external_review revaise:rob_calibration_performed revaise:code_review revaise:reporting_peer_review revaise:registration_completeness_check revaise:reporting_transparency_check revaise:version_control_audit revaise:amendment_review_process revaise:extraction_specific_checks revaise:checklist_verified revaise:scoping_consistency_checks revaise:search_strategy_validation revaise:search_update_schedule revaise:stakeholder_validation revaise:rob_discrepancies_resolved revaise:pilot_agreement_achieved revaise:transparency_measures revaise:calculation_verification revaise:screening_consistency_checks rdf:type revaise:librarian_consulted revaise:scoping_peer_review revaise:search_reproducibility_check revaise:artifact_links_verified revaise:flow_counts_reconciled ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "Unique identifier for quality control instance" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:base_qc_id ],
        [ sh:class revaise:ConflictResolution ;
            sh:description "Record of resolved discrepancies" ;
            sh:nodeKind sh:IRI ;
            sh:order 4 ;
            sh:path revaise:base_discrepancy_resolutions ],
        [ sh:datatype xsd:float ;
            sh:description "Proportion of items double-checked" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:base_double_checking_rate ],
        [ sh:datatype xsd:string ;
            sh:description "Additional quality control notes" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:base_qc_notes ],
        [ sh:datatype xsd:string ;
            sh:description "Type of quality control (screening, extraction, synthesis, etc.)" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:base_qc_type ],
        [ sh:class revaise:AgreementMetrics ;
            sh:description "Inter-rater agreement metrics" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 3 ;
            sh:path revaise:base_agreement_metrics ],
        [ sh:datatype xsd:boolean ;
            sh:description "Whether calibration exercises were performed" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:base_calibration_performed ],
        [ sh:datatype xsd:float ;
            sh:description "Proportion of items spot-checked" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:base_spot_check_rate ] ;
    sh:targetClass revaise:StageQualityControl .

revaise:StageStatistics a sh:NodeShape ;
    rdfs:comment "Base class for statistics collected about review stages. Stage-specific statistics classes should inherit from this." ;
    sh:closed false ;
    sh:ignoredProperties ( revaise:total_queries_executed revaise:total_databases_searched revaise:reporting_checklist_items_total revaise:subgroup_analyses_count revaise:average_days_between_versions revaise:total_records_retrieved revaise:total_data_points revaise:narrative_syntheses_count revaise:some_concerns_count revaise:scoping_decisions_count revaise:publications_count revaise:total_participants revaise:total_amendments revaise:exploratory_searches_count revaise:overall_inclusion_rate revaise:screening_total_time_hours revaise:studies_assessed_count revaise:days_to_first_registration revaise:total_studies_synthesized revaise:total_studies_extracted revaise:total_outcomes_analyzed revaise:high_risk_count revaise:initial_records_count revaise:reporting_deviations_count revaise:exploratory_records_found revaise:low_risk_count revaise:meta_analyses_count revaise:title_abstract_excluded revaise:post_dedup_count revaise:final_included_count revaise:missing_data_rate revaise:registration_compliance_rate revaise:total_registrations revaise:total_reviewer_hours revaise:reporting_standards_count revaise:sensitivity_analyses_count revaise:average_time_per_study revaise:report_documents_count rdf:type revaise:stakeholder_inputs_count revaise:grey_literature_sources revaise:candidate_questions_count revaise:fulltext_excluded revaise:supplementary_search_methods revaise:reporting_checklist_items_complete revaise:cost_estimate revaise:overall_exclusion_rate revaise:total_versions revaise:unique_records_after_dedup ) ;
    sh:property [ sh:datatype xsd:integer ;
            sh:description "Total number of items to process in this stage" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:base_total_items ],
        [ sh:datatype xsd:date ;
            sh:description "Date the stage started" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:base_started_date ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for stage statistics" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:base_stats_id ],
        [ sh:datatype xsd:date ;
            sh:description "Date the stage completed" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:base_completed_date ],
        [ sh:class revaise:ParticipantWorkload ;
            sh:description "Workload distribution among participants" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 7 ;
            sh:path revaise:base_participant_workloads ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of items completed" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:base_items_completed ],
        [ sh:datatype xsd:float ;
            sh:description "Proportion of items completed" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:base_completion_rate ],
        [ sh:datatype xsd:float ;
            sh:description "Total hours spent on this stage" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:base_total_hours ],
        [ sh:datatype xsd:string ;
            sh:description "Additional notes about stage statistics" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path revaise:base_stats_notes ] ;
    sh:targetClass revaise:StageStatistics .

revaise:SynthesisStage a sh:NodeShape ;
    rdfs:comment "Stage for synthesizing evidence from included studies" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:description "Completion status of this stage execution" ;
            sh:in ( "NOT_STARTED" "IN_PROGRESS" "COMPLETE" "SKIPPED" "NOT_APPLICABLE" ) ;
            sh:maxCount 1 ;
            sh:order 16 ;
            sh:path revaise:stage_status ],
        [ sh:datatype xsd:dateTime ;
            sh:description "When this stage started" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 17 ;
            sh:path revaise:started_at ],
        [ sh:datatype xsd:string ;
            sh:description "Concrete stage class this execution represents (e.g., SearchStage, ReportingStage). Auto-populated; enables deserialization of polymorphic stages to typed RDF." ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 12 ;
            sh:path revaise:stage_category ],
        [ sh:datatype xsd:dateTime ;
            sh:description "When this stage ended" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 18 ;
            sh:path revaise:ended_at ],
        [ sh:class revaise:AIAssistance ;
            sh:description "AI assistance configuration for synthesis" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 11 ;
            sh:path revaise:ai_assistance_config ],
        [ sh:datatype xsd:string ;
            sh:description "Human-readable label for this stage execution" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 14 ;
            sh:path revaise:stage_label ],
        [ sh:class revaise:SensitivityAnalysis ;
            sh:description "Sensitivity analyses performed" ;
            sh:nodeKind sh:IRI ;
            sh:order 5 ;
            sh:path revaise:sensitivity_analyses ],
        [ sh:class revaise:PublicationBiasAssessment ;
            sh:description "Assessment of publication bias" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 6 ;
            sh:path revaise:publication_bias_assessment ],
        [ sh:class <https://open-and-sustainable.github.io/revaise-model/schema/objects/stage_output/StageOutput> ;
            sh:description "Visualizations produced (forest plots, funnel plots, etc.)" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 10 ;
            sh:path revaise:synthesis_visualizations ],
        [ sh:class revaise:MetaAnalysis ;
            sh:description "Meta-analyses performed on the data" ;
            sh:nodeKind sh:IRI ;
            sh:order 3 ;
            sh:path revaise:meta_analyses ],
        [ sh:class revaise:SynthesisMethod ;
            sh:description "Methods used for evidence synthesis" ;
            sh:minCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 1 ;
            sh:path revaise:synthesis_methods ],
        [ sh:class revaise:SynthesisQualityControl ;
            sh:description "Quality control measures for synthesis" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 8 ;
            sh:path revaise:synthesis_quality_control ],
        [ sh:class revaise:NarrativeSynthesis ;
            sh:description "Narrative synthesis results if performed" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 2 ;
            sh:path revaise:narrative_synthesis ],
        [ sh:class <https://open-and-sustainable.github.io/revaise-model/schema/objects/stage_output/StageOutput> ;
            sh:description "Input artifacts for this stage" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 19 ;
            sh:path revaise:inputs ],
        [ sh:class revaise:SubgroupAnalysis ;
            sh:description "Subgroup analyses conducted" ;
            sh:nodeKind sh:IRI ;
            sh:order 4 ;
            sh:path revaise:subgroup_analyses ],
        [ sh:description "Type of stage being executed" ;
            sh:in ( "scoping" "registration" "search" "deduplication" "screening_title_abstract" "screening_fulltext" "data_extraction" "risk_of_bias" "synthesis_meta_analysis" "synthesis_narrative" "reporting" "reporting_prisma" "reproducibility_pack" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:order 13 ;
            sh:path revaise:stage_type ],
        [ sh:datatype xsd:string ;
            sh:description "Description of what was done in this stage" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 15 ;
            sh:path revaise:stage_description ],
        [ sh:class revaise:SynthesisStatistics ;
            sh:description "Statistics about the synthesis process" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 9 ;
            sh:path revaise:synthesis_statistics ],
        [ sh:datatype xsd:float ;
            sh:description "Estimated cost of this stage" ;
            sh:maxCount 1 ;
            sh:minInclusive 0 ;
            sh:nodeKind sh:Literal ;
            sh:order 21 ;
            sh:path revaise:cost ],
        [ sh:class revaise:EvidenceGrading ;
            sh:description "Grading of evidence quality/certainty" ;
            sh:nodeKind sh:IRI ;
            sh:order 7 ;
            sh:path revaise:evidence_grading ],
        [ sh:class revaise:SynthesisProtocol ;
            sh:description "Protocol defining how synthesis will be conducted" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 0 ;
            sh:path revaise:synthesis_protocol ],
        [ sh:class <https://open-and-sustainable.github.io/revaise-model/schema/objects/stage_output/StageOutput> ;
            sh:description "Output artifacts produced by this stage" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 20 ;
            sh:path revaise:outputs ] ;
    sh:targetClass revaise:SynthesisStage .

<https://open-and-sustainable.github.io/revaise-model/schema/objects/stage_output/DatasetRef> a sh:NodeShape ;
    rdfs:comment "External dataset reference." ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "License governing the dataset" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path <https://open-and-sustainable.github.io/revaise-model/schema/objects/stage_output/license> ],
        [ sh:datatype xsd:string ;
            sh:description "Name of the dataset" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path <https://open-and-sustainable.github.io/revaise-model/schema/objects/stage_output/dataset_name> ],
        [ sh:datatype xsd:string ;
            sh:description "Additional notes" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path <https://open-and-sustainable.github.io/revaise-model/schema/objects/stage_output/notes> ],
        [ sh:datatype xsd:string ;
            sh:description "Checksum of the dataset snapshot" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path <https://open-and-sustainable.github.io/revaise-model/schema/objects/stage_output/snapshot_hash> ],
        [ sh:description "Kind or type of stage output" ;
            sh:in ( "bibliographic_db" "local_index" "fulltext_corpus" "annotation_set" "gold_labels" "calibration_set" "other" ) ;
            sh:maxCount 1 ;
            sh:order 0 ;
            sh:path <https://open-and-sustainable.github.io/revaise-model/schema/objects/stage_output/kind> ],
        [ sh:description "URI locating the resource" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 2 ;
            sh:path <https://open-and-sustainable.github.io/revaise-model/schema/objects/stage_output/resource_uri> ] ;
    sh:targetClass <https://open-and-sustainable.github.io/revaise-model/schema/objects/stage_output/DatasetRef> .

revaise:AIParameter a sh:NodeShape ;
    rdfs:comment "AI model parameter configuration" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "Value of the parameter" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:parameter_value ],
        [ sh:datatype xsd:string ;
            sh:description "Name of the parameter" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:parameter_name ],
        [ sh:datatype xsd:string ;
            sh:description "Description of what this parameter controls" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:parameter_description ] ;
    sh:targetClass revaise:AIParameter .

revaise:AIPerformanceMetrics a sh:NodeShape ;
    rdfs:comment "Performance metrics for AI assistance, extending general performance metrics with AI-specific measures" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:float ;
            sh:description "True positive rate (recall)" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:sensitivity ],
        [ sh:datatype xsd:float ;
            sh:description "Overall accuracy" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 11 ;
            sh:path revaise:accuracy ],
        [ sh:datatype xsd:float ;
            sh:description "Area under the ROC curve" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 16 ;
            sh:path revaise:area_under_curve ],
        [ sh:datatype xsd:float ;
            sh:description "Expected proportion of false discoveries" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 9 ;
            sh:path revaise:false_discovery_rate ],
        [ sh:datatype xsd:float ;
            sh:description "Calibration of AI confidence scores" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:confidence_calibration ],
        [ sh:datatype xsd:float ;
            sh:description "Proportion of false negatives among negative calls" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 10 ;
            sh:path revaise:false_omission_rate ],
        [ sh:datatype xsd:float ;
            sh:description "True negative rate" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:specificity ],
        [ sh:datatype xsd:float ;
            sh:description "Ratio of odds of positive test in diseased vs non-diseased" ;
            sh:maxCount 1 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 15 ;
            sh:path revaise:diagnostic_odds_ratio ],
        [ sh:datatype xsd:float ;
            sh:description "Type II error rate" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path revaise:false_negative_rate ],
        [ sh:datatype xsd:float ;
            sh:description "Negative predictive value" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:negative_predictive_value ],
        [ sh:datatype xsd:float ;
            sh:description "Positive predictive value" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:precision ],
        [ sh:datatype xsd:float ;
            sh:description "Harmonic mean of precision and recall" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 13 ;
            sh:path revaise:f1_score ],
        [ sh:datatype xsd:float ;
            sh:description "Average of sensitivity and specificity" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 12 ;
            sh:path revaise:balanced_accuracy ],
        [ sh:datatype xsd:float ;
            sh:description "Type I error rate" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:false_positive_rate ],
        [ sh:datatype xsd:float ;
            sh:description "Matthews correlation coefficient" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive -1e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 14 ;
            sh:path revaise:matthews_correlation ],
        [ sh:datatype xsd:float ;
            sh:description "Rate of agreement with human reviewers" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:human_agreement_rate ],
        [ sh:datatype xsd:float ;
            sh:description "Average processing time per item (seconds)" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:processing_speed ] ;
    sh:targetClass revaise:AIPerformanceMetrics .

revaise:AIPrompt a sh:NodeShape ;
    rdfs:comment "Prompt configuration for AI interaction" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "Version of this prompt" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:prompt_version ],
        [ sh:datatype xsd:string ;
            sh:description "The actual prompt text" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:prompt_text ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for this prompt" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:prompt_id ],
        [ sh:datatype xsd:string ;
            sh:description "Few-shot examples included in the prompt" ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:prompt_examples ],
        [ sh:description "Type of prompting strategy" ;
            sh:in ( "ZERO_SHOT" "FEW_SHOT" "CHAIN_OF_THOUGHT" "STRUCTURED_OUTPUT" "CONVERSATIONAL" "INSTRUCTION_BASED" ) ;
            sh:maxCount 1 ;
            sh:order 2 ;
            sh:path revaise:prompt_type ],
        [ sh:datatype xsd:string ;
            sh:description "Field or task this prompt targets" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:target_field ] ;
    sh:targetClass revaise:AIPrompt .

revaise:ChecklistItem a sh:NodeShape ;
    rdfs:comment "Individual item in a quality checklist" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "Category this item belongs to" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:item_category ],
        [ sh:datatype xsd:string ;
            sh:description "Possible responses to this item" ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:response_options ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for the item" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:item_id ],
        [ sh:datatype xsd:string ;
            sh:description "Text of the checklist item" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:item_text ],
        [ sh:datatype xsd:string ;
            sh:description "Guidance for answering this item" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:guidance_text ],
        [ sh:datatype xsd:float ;
            sh:description "Weight of this item in scoring" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:scoring_weight ] ;
    sh:targetClass revaise:ChecklistItem .

revaise:ConfidenceInterval a sh:NodeShape ;
    rdfs:comment "Confidence interval specification" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:float ;
            sh:description "Confidence level (e.g., 0.95 for 95%)" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:confidence_level ],
        [ sh:datatype xsd:float ;
            sh:description "Upper bound of the interval" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:upper_bound ],
        [ sh:datatype xsd:float ;
            sh:description "Lower bound of the interval" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:lower_bound ] ;
    sh:targetClass revaise:ConfidenceInterval .

revaise:ConformanceItemResult a sh:NodeShape ;
    rdfs:comment "Result for a single protocol item or constraint within a conformance assertion." ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "Message describing the item result, such as a violation reason" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:item_message ],
        [ sh:datatype xsd:string ;
            sh:description "Identifier of the protocol item or constraint" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:item_result_id ],
        [ sh:datatype xsd:string ;
            sh:description "Location in the review or record where the item is addressed" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:item_location ],
        [ sh:description "Outcome for this item" ;
            sh:in ( "SATISFIED" "VIOLATED" "NOT_APPLICABLE" "NOT_EVALUATED" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:order 2 ;
            sh:path revaise:item_status ],
        [ sh:datatype xsd:string ;
            sh:description "Short label for the protocol item" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:item_label ] ;
    sh:targetClass revaise:ConformanceItemResult .

revaise:Database a sh:NodeShape ;
    rdfs:comment "Information about a database used for searching" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:description "Date when the database was accessed" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:access_date ],
        [ sh:datatype xsd:string ;
            sh:description "Additional notes about database access or limitations" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:database_notes ],
        [ sh:datatype xsd:string ;
            sh:description "Name of the database (e.g., PubMed, Scopus, Web of Science)" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:database_name ],
        [ sh:datatype xsd:string ;
            sh:description "Version or release of the database" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:database_version ],
        [ sh:description "URL to access the database" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 1 ;
            sh:path revaise:database_url ] ;
    sh:targetClass revaise:Database .

revaise:DateRange a sh:NodeShape ;
    rdfs:comment "A simple date range representation" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "Start date/time in any format" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:range_start ],
        [ sh:datatype xsd:string ;
            sh:description "Optional description of the date range" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:range_description ],
        [ sh:datatype xsd:string ;
            sh:description "End date/time in any format" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:range_end ] ;
    sh:targetClass revaise:DateRange .

revaise:DeduplicationProcess a sh:NodeShape ;
    rdfs:comment "Process for identifying and removing duplicate records" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "Unique identifier for the deduplication process" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:dedup_id ],
        [ sh:class revaise:ExternalTool ;
            sh:description "External tools used for deduplication" ;
            sh:nodeKind sh:IRI ;
            sh:order 5 ;
            sh:path revaise:dedup_tools ],
        [ sh:datatype xsd:dateTime ;
            sh:description "When deduplication completed" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 9 ;
            sh:path revaise:dedup_completed_at ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of duplicate records identified" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:duplicate_count ],
        [ sh:description "Method used for deduplication" ;
            sh:in ( "AUTOMATIC" "SEMI_AUTOMATIC" "MANUAL" "HYBRID" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:order 4 ;
            sh:path revaise:dedup_method ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of unique records after deduplication" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:unique_record_count ],
        [ sh:datatype xsd:integer ;
            sh:description "Total number of records before deduplication" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:input_record_count ],
        [ sh:datatype xsd:string ;
            sh:description "Criteria used to identify duplicates (e.g., DOI, title similarity)" ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:dedup_criteria ],
        [ sh:class revaise:DuplicateGroup ;
            sh:description "Groups of identified duplicate records" ;
            sh:nodeKind sh:IRI ;
            sh:order 7 ;
            sh:path revaise:duplicate_groups ],
        [ sh:datatype xsd:dateTime ;
            sh:description "When deduplication started" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path revaise:dedup_started_at ],
        [ sh:datatype xsd:string ;
            sh:description "Additional notes about the deduplication process" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 11 ;
            sh:path revaise:dedup_notes ],
        [ sh:class revaise:Author ;
            sh:description "Who performed the deduplication" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 10 ;
            sh:path revaise:dedup_performed_by ] ;
    sh:targetClass revaise:DeduplicationProcess .

revaise:DomainAssessment a sh:NodeShape ;
    rdfs:comment "Assessment of a specific quality domain" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:description "Rating for this domain" ;
            sh:in ( "LOW_RISK" "SOME_CONCERNS" "HIGH_RISK" "CRITICAL_RISK" "NO_INFORMATION" "NOT_APPLICABLE" "GOOD" "FAIR" "POOR" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:order 1 ;
            sh:path revaise:domain_rating ],
        [ sh:datatype xsd:string ;
            sh:description "Page references for the assessment" ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:page_references ],
        [ sh:datatype xsd:string ;
            sh:description "Quotes supporting the assessment" ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:supporting_quotes ],
        [ sh:datatype xsd:string ;
            sh:description "Name of the quality domain" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:domain_name ],
        [ sh:datatype xsd:string ;
            sh:description "Justification for the rating" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:domain_justification ] ;
    sh:targetClass revaise:DomainAssessment .

revaise:DuplicateGroup a sh:NodeShape ;
    rdfs:comment "Group of records identified as duplicates" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:float ;
            sh:description "Similarity score between duplicates (0-1)" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:similarity_score ],
        [ sh:datatype xsd:string ;
            sh:description "Fields that matched between duplicates" ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:match_fields ],
        [ sh:datatype xsd:string ;
            sh:description "ID of the record kept as the master" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:master_record_id ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for the duplicate group" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:group_id ],
        [ sh:datatype xsd:string ;
            sh:description "IDs of records identified as duplicates" ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:duplicate_record_ids ],
        [ sh:description "Method used to resolve the conflict" ;
            sh:in ( "CONSENSUS_DISCUSSION" "THIRD_REVIEWER" "SENIOR_REVIEWER" "MAJORITY_VOTE" "TEAM_MEETING" "STATISTICAL_METHOD" "PREDEFINED_RULE" "RE_REVIEW" "EXTERNAL_EXPERT" "AUTOMATED_RULE" ) ;
            sh:maxCount 1 ;
            sh:order 5 ;
            sh:path revaise:resolution_method ] ;
    sh:targetClass revaise:DuplicateGroup .

revaise:EvidenceGrading a sh:NodeShape ;
    rdfs:comment "Grading of evidence quality/certainty" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "Reasons for upgrading" ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:upgrade_reasons ],
        [ sh:datatype xsd:string ;
            sh:description "Notes about the grading" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path revaise:grading_notes ],
        [ sh:class revaise:QualityDomain ;
            sh:description "Assessment of individual quality domains" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 5 ;
            sh:path revaise:quality_domains ],
        [ sh:datatype xsd:date ;
            sh:description "Date of grading" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 10 ;
            sh:path revaise:grading_date ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for this grading" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:grading_id ],
        [ sh:description "Final quality rating after adjustments" ;
            sh:in ( "HIGH" "MODERATE" "LOW" "VERY_LOW" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:order 4 ;
            sh:path revaise:final_quality ],
        [ sh:datatype xsd:string ;
            sh:description "IDs of people who performed grading" ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 9 ;
            sh:path revaise:grader_ids ],
        [ sh:datatype xsd:string ;
            sh:description "Reasons for downgrading" ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:downgrade_reasons ],
        [ sh:description "Initial quality rating" ;
            sh:in ( "HIGH" "MODERATE" "LOW" "VERY_LOW" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:order 3 ;
            sh:path revaise:initial_quality ],
        [ sh:description "System used for grading (e.g., GRADE)" ;
            sh:in ( "GRADE" "OXFORD_CEBM" "AHRQ" "SIGN" "NICE" "CUSTOM" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:order 2 ;
            sh:path revaise:grading_system ],
        [ sh:datatype xsd:string ;
            sh:description "Outcome being graded" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:outcome_assessed ] ;
    sh:targetClass revaise:EvidenceGrading .

revaise:ExploratorySearch a sh:NodeShape ;
    rdfs:comment "Exploratory search used to test or refine the review scope." ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "Notes about the exploratory search" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:exploratory_notes ],
        [ sh:datatype xsd:string ;
            sh:description "Source used for the exploratory search" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:exploratory_source ],
        [ sh:datatype xsd:dateTime ;
            sh:description "Date and time of the exploratory search" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:exploratory_search_date ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of records considered relevant during exploratory review" ;
            sh:maxCount 1 ;
            sh:minInclusive 0 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:exploratory_relevant_count ],
        [ sh:datatype xsd:string ;
            sh:description "Exploratory query or search expression" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:exploratory_query ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of records found by the exploratory search" ;
            sh:maxCount 1 ;
            sh:minInclusive 0 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:exploratory_results_count ],
        [ sh:class <https://open-and-sustainable.github.io/revaise-model/schema/objects/stage_output/StageOutput> ;
            sh:description "Outputs produced by the exploratory search" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 7 ;
            sh:path revaise:exploratory_outputs ],
        [ sh:datatype xsd:string ;
            sh:description "Identifier for an exploratory search" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:exploratory_search_id ] ;
    sh:targetClass revaise:ExploratorySearch .

revaise:ExtractedStudy a sh:NodeShape ;
    rdfs:comment "A study with extracted data" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "Reference to the extraction form used" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:extraction_form_id ],
        [ sh:datatype xsd:string ;
            sh:description "Reference to the source literature record" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:source_record_id ],
        [ sh:class revaise:AISession ;
            sh:description "AI-specific extraction session details" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 10 ;
            sh:path revaise:ai_extraction_session ],
        [ sh:class revaise:QualityAssessment ;
            sh:description "Quality/risk of bias assessment" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 8 ;
            sh:path revaise:quality_assessment ],
        [ sh:description "Current status of extraction" ;
            sh:in ( "NOT_STARTED" "IN_PROGRESS" "COMPLETED" "REQUIRES_REVIEW" "DISCREPANCY_RESOLUTION" "FINALIZED" "EXCLUDED" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:order 5 ;
            sh:path revaise:extraction_status ],
        [ sh:class revaise:ExtractedDataPoint ;
            sh:description "Individual data points extracted" ;
            sh:nodeKind sh:IRI ;
            sh:order 3 ;
            sh:path revaise:extracted_data ],
        [ sh:datatype xsd:string ;
            sh:description "Notes about the extraction" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:extraction_notes ],
        [ sh:class revaise:ExtractedDataPoint ;
            sh:description "Final reconciled values after resolution" ;
            sh:nodeKind sh:IRI ;
            sh:order 9 ;
            sh:path revaise:final_extracted_values ],
        [ sh:class revaise:WorkSession ;
            sh:description "Work sessions for this extraction" ;
            sh:nodeKind sh:IRI ;
            sh:order 4 ;
            sh:path revaise:extraction_sessions ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for the extracted study" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:extracted_study_id ],
        [ sh:class revaise:StudyCharacteristics ;
            sh:description "Key characteristics of the study" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 7 ;
            sh:path revaise:study_characteristics ] ;
    sh:targetClass revaise:ExtractedStudy .

revaise:ExtractionForm a sh:NodeShape ;
    rdfs:comment "Template or form used for data extraction" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:boolean ;
            sh:description "Whether the form was pilot tested" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:pilot_tested ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for the form" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:form_id ],
        [ sh:class revaise:FormSection ;
            sh:description "Sections within the form" ;
            sh:nodeKind sh:IRI ;
            sh:order 4 ;
            sh:path revaise:form_sections ],
        [ sh:description "URI to the form template" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 5 ;
            sh:path revaise:form_uri ],
        [ sh:datatype xsd:string ;
            sh:description "Notes from pilot testing" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path revaise:pilot_test_notes ],
        [ sh:datatype xsd:string ;
            sh:description "Version of the form" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:form_version ],
        [ sh:datatype xsd:string ;
            sh:description "Description of what the form captures" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:form_description ],
        [ sh:datatype xsd:date ;
            sh:description "Date of pilot testing" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:pilot_test_date ],
        [ sh:datatype xsd:dateTime ;
            sh:description "Creation timestamp" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 10 ;
            sh:path revaise:form_created_at ],
        [ sh:class revaise:Author ;
            sh:description "Creator of the form" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 9 ;
            sh:path revaise:form_created_by ],
        [ sh:datatype xsd:dateTime ;
            sh:description "Last modification timestamp" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 11 ;
            sh:path revaise:form_last_modified ],
        [ sh:datatype xsd:string ;
            sh:description "Name of the extraction form" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:form_name ] ;
    sh:targetClass revaise:ExtractionForm .

revaise:ExtractionProtocol a sh:NodeShape ;
    rdfs:comment "Protocol for the data extraction process" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:date ;
            sh:description "Date the protocol was finalized" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path revaise:base_protocol_date ],
        [ sh:datatype xsd:string ;
            sh:description "Detailed description of the protocol" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 9 ;
            sh:path revaise:base_protocol_description ],
        [ sh:datatype xsd:boolean ;
            sh:description "Whether extraction is done independently" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:independent_extraction ],
        [ sh:description "Level of blinding during extraction" ;
            sh:in ( "NONE" "SINGLE_BLIND" "DOUBLE_BLIND" "TRIPLE_BLIND" ) ;
            sh:maxCount 1 ;
            sh:order 4 ;
            sh:path revaise:blinding_level ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for this stage protocol" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:base_protocol_id ],
        [ sh:datatype xsd:integer ;
            sh:description "Minimum number of extractors per study" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:minimum_extractors_per_study ],
        [ sh:datatype xsd:string ;
            sh:description "Detailed guidance for extractors" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:extraction_guidance ],
        [ sh:class revaise:StageTrainingInfo ;
            sh:description "Training provided for this stage" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 14 ;
            sh:path revaise:base_protocol_training ],
        [ sh:datatype xsd:string ;
            sh:description "Version of the protocol" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:base_protocol_version ],
        [ sh:description "Method for resolving extraction disagreements" ;
            sh:in ( "CONSENSUS_DISCUSSION" "THIRD_REVIEWER" "SENIOR_REVIEWER" "MAJORITY_VOTE" "TEAM_MEETING" "STATISTICAL_METHOD" "PREDEFINED_RULE" "RE_REVIEW" "EXTERNAL_EXPERT" "AUTOMATED_RULE" ) ;
            sh:maxCount 1 ;
            sh:order 2 ;
            sh:path revaise:disagreement_resolution_method ],
        [ sh:class revaise:ExternalTool ;
            sh:description "Tools used in this stage" ;
            sh:nodeKind sh:IRI ;
            sh:order 10 ;
            sh:path revaise:base_protocol_tools ],
        [ sh:datatype xsd:string ;
            sh:description "Additional notes about the protocol" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 13 ;
            sh:path revaise:base_protocol_notes ],
        [ sh:description "Order in which studies are extracted" ;
            sh:in ( "RANDOM" "ALPHABETICAL" "CHRONOLOGICAL" "BY_RELEVANCE" "BY_QUALITY" "ASSIGNED" ) ;
            sh:maxCount 1 ;
            sh:order 3 ;
            sh:path revaise:extraction_order ],
        [ sh:class revaise:ExternalTool ;
            sh:description "Software packages used in this stage" ;
            sh:nodeKind sh:IRI ;
            sh:order 11 ;
            sh:path revaise:base_protocol_software ],
        [ sh:datatype xsd:string ;
            sh:description "Deviations from the planned protocol" ;
            sh:nodeKind sh:Literal ;
            sh:order 12 ;
            sh:path revaise:base_protocol_deviations ] ;
    sh:targetClass revaise:ExtractionProtocol .

revaise:ExtractionQualityControl a sh:NodeShape ;
    rdfs:comment "Quality control measures for data extraction" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:float ;
            sh:description "Proportion of items double-checked" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:base_double_checking_rate ],
        [ sh:datatype xsd:string ;
            sh:description "Extraction-specific quality checks performed" ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:extraction_specific_checks ],
        [ sh:class revaise:ConflictResolution ;
            sh:description "Record of resolved discrepancies" ;
            sh:nodeKind sh:IRI ;
            sh:order 5 ;
            sh:path revaise:base_discrepancy_resolutions ],
        [ sh:class revaise:AgreementMetrics ;
            sh:description "Inter-rater agreement metrics" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 4 ;
            sh:path revaise:base_agreement_metrics ],
        [ sh:datatype xsd:boolean ;
            sh:description "Whether calibration exercises were performed" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:base_calibration_performed ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for quality control instance" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:base_qc_id ],
        [ sh:datatype xsd:string ;
            sh:description "Additional quality control notes" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path revaise:base_qc_notes ],
        [ sh:datatype xsd:string ;
            sh:description "Type of quality control (screening, extraction, synthesis, etc.)" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:base_qc_type ],
        [ sh:datatype xsd:float ;
            sh:description "Proportion of items spot-checked" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:base_spot_check_rate ] ;
    sh:targetClass revaise:ExtractionQualityControl .

revaise:ExtractionStatistics a sh:NodeShape ;
    rdfs:comment "Statistics about the extraction process" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:integer ;
            sh:description "Total number of studies extracted" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:total_studies_extracted ],
        [ sh:datatype xsd:string ;
            sh:description "Additional notes about stage statistics" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 12 ;
            sh:path revaise:base_stats_notes ],
        [ sh:datatype xsd:float ;
            sh:description "Average time per study (minutes)" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:average_time_per_study ],
        [ sh:class revaise:ParticipantWorkload ;
            sh:description "Workload distribution among participants" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 11 ;
            sh:path revaise:base_participant_workloads ],
        [ sh:datatype xsd:date ;
            sh:description "Date the stage completed" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:base_completed_date ],
        [ sh:datatype xsd:date ;
            sh:description "Date the stage started" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:base_started_date ],
        [ sh:datatype xsd:float ;
            sh:description "Proportion of items completed" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 9 ;
            sh:path revaise:base_completion_rate ],
        [ sh:datatype xsd:integer ;
            sh:description "Total number of data points extracted" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:total_data_points ],
        [ sh:datatype xsd:float ;
            sh:description "Total hours spent on this stage" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 10 ;
            sh:path revaise:base_total_hours ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of items completed" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path revaise:base_items_completed ],
        [ sh:datatype xsd:float ;
            sh:description "Rate of missing data points" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:missing_data_rate ],
        [ sh:datatype xsd:integer ;
            sh:description "Total number of studies to extract" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:base_total_items ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for stage statistics" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:base_stats_id ] ;
    sh:targetClass revaise:ExtractionStatistics .

revaise:FeasibilityAssessment a sh:NodeShape ;
    rdfs:comment "Feasibility assessment for the proposed review scope." ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "Feasibility assessment of the population scope" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:feasibility_population ],
        [ sh:description "Overall feasibility conclusion" ;
            sh:in ( "FEASIBLE" "FEASIBLE_WITH_CHANGES" "NOT_FEASIBLE" "UNCERTAIN" ) ;
            sh:maxCount 1 ;
            sh:order 5 ;
            sh:path revaise:feasibility_conclusion ],
        [ sh:datatype xsd:string ;
            sh:description "Feasibility assessment of expected data availability" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:feasibility_data_availability ],
        [ sh:datatype xsd:string ;
            sh:description "Feasibility assessment of expected literature volume" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:feasibility_literature_volume ],
        [ sh:datatype xsd:string ;
            sh:description "Notes about feasibility" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:feasibility_notes ],
        [ sh:datatype xsd:string ;
            sh:description "Feasibility assessment of review scope" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:feasibility_review_scope ],
        [ sh:datatype xsd:string ;
            sh:description "Known resource constraints affecting feasibility" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:feasibility_resource_constraints ] ;
    sh:targetClass revaise:FeasibilityAssessment .

revaise:FieldAgreement a sh:NodeShape ;
    rdfs:comment "Agreement metrics for a specific field or item" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:class revaise:ConfidenceInterval ;
            sh:description "Confidence interval for the agreement rate" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 4 ;
            sh:path revaise:confidence_interval ],
        [ sh:datatype xsd:string ;
            sh:description "Types of disagreements observed" ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:disagreement_types ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of items compared" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:agreement_sample_size ],
        [ sh:datatype xsd:float ;
            sh:description "Agreement rate for this field" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minCount 1 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:agreement_rate ],
        [ sh:datatype xsd:string ;
            sh:description "Identifier of the field or item" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:field_identifier ] ;
    sh:targetClass revaise:FieldAgreement .

revaise:FieldDefinition a sh:NodeShape ;
    rdfs:comment "Definition of a field used in forms, templates, or data collection" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "Additional metadata as JSON" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 15 ;
            sh:path revaise:field_metadata ],
        [ sh:description "Data type of the field" ;
            sh:in ( "TEXT" "TEXT_AREA" "NUMBER" "DATE" "DATETIME" "BOOLEAN" "SELECT" "MULTI_SELECT" "URL" "EMAIL" "FILE" "STRUCTURED" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:order 3 ;
            sh:path revaise:field_type ],
        [ sh:class revaise:ValidationRule ;
            sh:description "Validation rules for the field" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 12 ;
            sh:path revaise:field_validation_rules ],
        [ sh:datatype xsd:string ;
            sh:description "Placeholder text for the field" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 10 ;
            sh:path revaise:field_placeholder ],
        [ sh:datatype xsd:string ;
            sh:description "Human-readable label for the field" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:field_label ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for this field" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:field_id ],
        [ sh:datatype xsd:boolean ;
            sh:description "Whether this field is required" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:field_required ],
        [ sh:datatype xsd:string ;
            sh:description "Category or section this field belongs to" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:field_category ],
        [ sh:class revaise:FieldDependency ;
            sh:description "Dependencies on other fields" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 14 ;
            sh:path revaise:field_dependencies ],
        [ sh:datatype xsd:string ;
            sh:description "Machine-readable name for the field" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:field_name ],
        [ sh:datatype xsd:string ;
            sh:description "Group this field belongs to" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path revaise:field_group ],
        [ sh:datatype xsd:string ;
            sh:description "Default value for the field" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 11 ;
            sh:path revaise:field_default_value ],
        [ sh:datatype xsd:string ;
            sh:description "Help text to guide users" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 9 ;
            sh:path revaise:field_help_text ],
        [ sh:datatype xsd:string ;
            sh:description "Detailed description of the field" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:field_description ],
        [ sh:datatype xsd:integer ;
            sh:description "Display order of the field" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:field_order ],
        [ sh:class revaise:FieldOption ;
            sh:description "Options for select/multi-select fields" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 13 ;
            sh:path revaise:field_options ] ;
    sh:targetClass revaise:FieldDefinition .

revaise:FieldDependency a sh:NodeShape ;
    rdfs:comment "Dependency between fields" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:description "Type of dependency" ;
            sh:in ( "SHOW_IF" "HIDE_IF" "ENABLE_IF" "DISABLE_IF" "REQUIRE_IF" "CALCULATE_FROM" "VALIDATE_WITH" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:order 1 ;
            sh:path revaise:dependency_type ],
        [ sh:datatype xsd:string ;
            sh:description "Condition for the dependency" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:dependency_condition ],
        [ sh:datatype xsd:string ;
            sh:description "Field this depends on" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:depends_on_field ],
        [ sh:datatype xsd:string ;
            sh:description "Value to check against" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:dependency_value ] ;
    sh:targetClass revaise:FieldDependency .

revaise:FieldOption a sh:NodeShape ;
    rdfs:comment "Option for select/multi-select fields" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "Display label for the option" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:option_label ],
        [ sh:datatype xsd:string ;
            sh:description "Description of the option" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:option_description ],
        [ sh:datatype xsd:string ;
            sh:description "Value of the option" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:option_value ],
        [ sh:datatype xsd:string ;
            sh:description "Group this option belongs to" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:option_group ],
        [ sh:datatype xsd:boolean ;
            sh:description "Whether this is a default selection" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:is_default ],
        [ sh:datatype xsd:integer ;
            sh:description "Display order of the option" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:option_order ] ;
    sh:targetClass revaise:FieldOption .

revaise:FormSection a sh:NodeShape ;
    rdfs:comment "Section within a form or template" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "Description of the section" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:section_description ],
        [ sh:datatype xsd:boolean ;
            sh:description "Whether this section can be repeated" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:section_repeatable ],
        [ sh:datatype xsd:string ;
            sh:description "Machine-readable name for the section" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:section_name ],
        [ sh:class revaise:FieldDefinition ;
            sh:description "Fields in this section" ;
            sh:nodeKind sh:IRI ;
            sh:order 7 ;
            sh:path revaise:section_fields ],
        [ sh:datatype xsd:string ;
            sh:description "Conditions for showing this section" ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path revaise:section_conditions ],
        [ sh:datatype xsd:string ;
            sh:description "Human-readable label for the section" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:section_label ],
        [ sh:datatype xsd:boolean ;
            sh:description "Whether this section is required" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:section_required ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for this section" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:section_id ],
        [ sh:datatype xsd:integer ;
            sh:description "Display order of the section" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:section_order ] ;
    sh:targetClass revaise:FormSection .

revaise:FundingSource a sh:NodeShape ;
    rdfs:comment "Source of funding for the review" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "Funder identifier (e.g., Crossref Funder ID)" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:funder_id ],
        [ sh:datatype xsd:string ;
            sh:description "Grant or award number" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:grant_number ],
        [ sh:datatype xsd:string ;
            sh:description "Name of the funding organization" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:funder_name ] ;
    sh:targetClass revaise:FundingSource .

revaise:HeterogeneityStatistics a sh:NodeShape ;
    rdfs:comment "Statistics measuring heterogeneity in meta-analysis" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:float ;
            sh:description "Lower bound of prediction interval" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:prediction_interval_lower ],
        [ sh:datatype xsd:float ;
            sh:description "P-value for Q statistic" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:q_p_value ],
        [ sh:datatype xsd:float ;
            sh:description "Tau² (between-study variance)" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:tau_squared ],
        [ sh:datatype xsd:float ;
            sh:description "Upper bound of prediction interval" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:prediction_interval_upper ],
        [ sh:datatype xsd:float ;
            sh:description "I² statistic (percentage of variation due to heterogeneity)" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:i_squared ],
        [ sh:datatype xsd:float ;
            sh:description "Cochran's Q statistic" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:q_statistic ] ;
    sh:targetClass revaise:HeterogeneityStatistics .

revaise:HumanModification a sh:NodeShape ;
    rdfs:comment "Record of human modification to AI output" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "Value after human modification" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:modified_value ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for this modification" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:modification_id ],
        [ sh:datatype xsd:string ;
            sh:description "ID of the person who made the modification" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:modifier_id ],
        [ sh:datatype xsd:dateTime ;
            sh:description "When the modification was made" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:modification_timestamp ],
        [ sh:description "Reason for the modification" ;
            sh:in ( "INCORRECT" "INCOMPLETE" "IMPRECISE" "WRONG_CONTEXT" "FORMATTING" "VALIDATION_FAILURE" "AMBIGUITY" "HUMAN_JUDGMENT" "POLICY_OVERRIDE" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:order 4 ;
            sh:path revaise:modification_reason ],
        [ sh:datatype xsd:string ;
            sh:description "Original value produced by AI" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:original_ai_value ],
        [ sh:datatype xsd:string ;
            sh:description "Item or field that was modified" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:item_modified ] ;
    sh:targetClass revaise:HumanModification .

revaise:MetaAnalysis a sh:NodeShape ;
    rdfs:comment "Results from a meta-analysis" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "IDs of analysts" ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 13 ;
            sh:path revaise:analyst_ids ],
        [ sh:class revaise:WorkSession ;
            sh:description "Work sessions for this analysis" ;
            sh:nodeKind sh:IRI ;
            sh:order 12 ;
            sh:path revaise:analysis_sessions ],
        [ sh:datatype xsd:string ;
            sh:description "Groups being compared" ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:comparison_groups ],
        [ sh:datatype xsd:float ;
            sh:description "Upper bound of confidence interval" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:confidence_interval_upper ],
        [ sh:class revaise:AISession ;
            sh:description "AI assistance session if used" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 15 ;
            sh:path revaise:ai_analysis_session ],
        [ sh:class revaise:HeterogeneityStatistics ;
            sh:description "Heterogeneity statistics (I², Q, tau²)" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 9 ;
            sh:path revaise:heterogeneity_statistics ],
        [ sh:datatype xsd:float ;
            sh:description "Lower bound of confidence interval" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:confidence_interval_lower ],
        [ sh:datatype xsd:string ;
            sh:description "Study IDs included in this analysis" ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:included_studies ],
        [ sh:datatype xsd:string ;
            sh:description "Additional notes about the analysis" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 14 ;
            sh:path revaise:analysis_notes ],
        [ sh:description "Type of model used (fixed/random effects)" ;
            sh:in ( "FIXED_EFFECT" "RANDOM_EFFECTS" "FIXED_EFFECTS_PLURAL" "BAYESIAN_FIXED" "BAYESIAN_RANDOM" "QUALITY_EFFECTS" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:order 10 ;
            sh:path revaise:model_type ],
        [ sh:datatype xsd:string ;
            sh:description "Name of the meta-analysis" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:analysis_name ],
        [ sh:class <https://open-and-sustainable.github.io/revaise-model/schema/objects/stage_output/StageOutput> ;
            sh:description "Forest plot visualization" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 11 ;
            sh:path revaise:forest_plot_output ],
        [ sh:datatype xsd:string ;
            sh:description "Outcome measure being analyzed" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:outcome_measure ],
        [ sh:datatype xsd:float ;
            sh:description "P-value for the pooled effect" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path revaise:p_value ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for this meta-analysis" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:analysis_id ],
        [ sh:datatype xsd:float ;
            sh:description "Pooled effect size" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:effect_size ] ;
    sh:targetClass revaise:MetaAnalysis .

revaise:NarrativeSynthesis a sh:NodeShape ;
    rdfs:comment "Results from narrative synthesis" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:class revaise:SynthesisTheme ;
            sh:description "Themes identified in the synthesis" ;
            sh:nodeKind sh:IRI ;
            sh:order 2 ;
            sh:path revaise:synthesis_themes ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for this narrative synthesis" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:synthesis_id ],
        [ sh:class revaise:AISession ;
            sh:description "AI assistance session if used" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 9 ;
            sh:path revaise:ai_synthesis_session ],
        [ sh:datatype xsd:string ;
            sh:description "Patterns identified across studies" ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:synthesis_patterns ],
        [ sh:datatype xsd:string ;
            sh:description "Main narrative synthesis text" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:synthesis_text ],
        [ sh:datatype xsd:string ;
            sh:description "IDs of people who conducted synthesis" ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:synthesist_ids ],
        [ sh:datatype xsd:string ;
            sh:description "Framework used for narrative synthesis" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:synthesis_framework ],
        [ sh:class revaise:WorkSession ;
            sh:description "Work sessions for this synthesis" ;
            sh:nodeKind sh:IRI ;
            sh:order 6 ;
            sh:path revaise:synthesis_sessions ],
        [ sh:description "Confidence in synthesis conclusions" ;
            sh:in ( "VERY_HIGH" "HIGH" "MODERATE" "LOW" "VERY_LOW" ) ;
            sh:maxCount 1 ;
            sh:order 8 ;
            sh:path revaise:synthesis_confidence ],
        [ sh:class <https://open-and-sustainable.github.io/revaise-model/schema/objects/stage_output/StageOutput> ;
            sh:description "Supporting tables and summaries" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 5 ;
            sh:path revaise:supporting_tables ] ;
    sh:targetClass revaise:NarrativeSynthesis .

revaise:PublicationBiasAssessment a sh:NodeShape ;
    rdfs:comment "Assessment of publication bias" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:integer ;
            sh:description "Fail-safe N calculation" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:failsafe_n ],
        [ sh:description "Methods used to assess publication bias" ;
            sh:in ( "FUNNEL_PLOT" "EGGERS_TEST" "BEGGS_TEST" "TRIM_FILL" "FAILSAFE_N" "PETERS_TEST" "SELECTION_MODELS" "P_CURVE" "EXCESS_SIGNIFICANCE" ) ;
            sh:minCount 1 ;
            sh:order 1 ;
            sh:path revaise:assessment_methods ],
        [ sh:class <https://open-and-sustainable.github.io/revaise-model/schema/objects/stage_output/StageOutput> ;
            sh:description "Funnel plot visualization" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 2 ;
            sh:path revaise:funnel_plot_output ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for this assessment" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:bias_assessment_id ],
        [ sh:class revaise:StatisticalTestResult ;
            sh:description "Result of Begg's test" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 4 ;
            sh:path revaise:beggs_test_result ],
        [ sh:datatype xsd:string ;
            sh:description "Notes about the assessment" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 10 ;
            sh:path revaise:bias_assessment_notes ],
        [ sh:datatype xsd:string ;
            sh:description "Selection model results" ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:selection_models ],
        [ sh:datatype xsd:string ;
            sh:description "Impact of bias on conclusions" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 9 ;
            sh:path revaise:bias_impact ],
        [ sh:class revaise:StatisticalTestResult ;
            sh:description "Result of Egger's test" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 3 ;
            sh:path revaise:eggers_test_result ],
        [ sh:description "Overall conclusion about publication bias" ;
            sh:in ( "LOW" "MODERATE" "HIGH" "UNCLEAR" ) ;
            sh:maxCount 1 ;
            sh:order 8 ;
            sh:path revaise:bias_conclusion ],
        [ sh:class revaise:TrimFillResult ;
            sh:description "Result of trim and fill analysis" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 5 ;
            sh:path revaise:trim_fill_result ] ;
    sh:targetClass revaise:PublicationBiasAssessment .

revaise:PublicationRecord a sh:NodeShape ;
    rdfs:comment "Submission, publication, or dissemination record." ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:description "Date and time of acceptance" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:publication_acceptance_date ],
        [ sh:description "Publication URL" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 7 ;
            sh:path revaise:publication_url ],
        [ sh:datatype xsd:dateTime ;
            sh:description "Date and time of publication" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:publication_publication_date ],
        [ sh:description "Publication status of the report" ;
            sh:in ( "NOT_SUBMITTED" "SUBMITTED" "UNDER_REVIEW" "ACCEPTED" "PUBLISHED" "REJECTED" "WITHDRAWN" ) ;
            sh:maxCount 1 ;
            sh:order 1 ;
            sh:path revaise:report_publication_status ],
        [ sh:datatype xsd:string ;
            sh:description "Identifier for a publication record" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:publication_id ],
        [ sh:datatype xsd:string ;
            sh:description "Publication DOI" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:publication_doi ],
        [ sh:datatype xsd:string ;
            sh:description "Notes about the publication record" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path revaise:publication_notes ],
        [ sh:datatype xsd:string ;
            sh:description "Journal, platform, repository, or venue" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:publication_venue ],
        [ sh:datatype xsd:dateTime ;
            sh:description "Date and time of submission" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:publication_submission_date ] ;
    sh:targetClass revaise:PublicationRecord .

revaise:QualityDomain a sh:NodeShape ;
    rdfs:comment "Individual quality domain assessment" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:description "Rating for this domain" ;
            sh:in ( "NO_CONCERNS" "SERIOUS_CONCERNS" "VERY_SERIOUS_CONCERNS" "NOT_APPLICABLE" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:order 1 ;
            sh:path revaise:quality_domain_rating ],
        [ sh:datatype xsd:string ;
            sh:description "Name of the quality domain" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:quality_domain_name ],
        [ sh:datatype xsd:string ;
            sh:description "Justification for the rating" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:quality_domain_justification ] ;
    sh:targetClass revaise:QualityDomain .

revaise:Registration a sh:NodeShape ;
    rdfs:comment "A registration entry referencing an external registry, with full versioning support." ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:description "When this registration record was created" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path revaise:registration_created_at ],
        [ sh:datatype xsd:dateTime ;
            sh:description "When this registration was last modified" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 9 ;
            sh:path revaise:registration_last_modified ],
        [ sh:datatype xsd:string ;
            sh:description "ID of the currently active version" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:current_version_id ],
        [ sh:description "Type of registration (pre-registration or registration)" ;
            sh:in ( "PRE_REGISTRATION" "REGISTRATION" "REGISTERED_REPORT" "PROTOCOL_REGISTRATION" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:order 3 ;
            sh:path revaise:registration_type ],
        [ sh:datatype xsd:string ;
            sh:description "Name of the registry (e.g., PROSPERO, OSF, ClinicalTrials.gov)" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:registry_name ],
        [ sh:description "Current status of the registration" ;
            sh:in ( "DRAFT" "SUBMITTED" "UNDER_REVIEW" "REGISTERED" "AMENDED" "WITHDRAWN" "SUPERSEDED" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:order 7 ;
            sh:path revaise:registration_status ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for this registration within the review" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:stage_registration_id ],
        [ sh:class revaise:RegistrationVersion ;
            sh:description "All versions of this registration" ;
            sh:minCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 4 ;
            sh:path revaise:versions ],
        [ sh:description "URL to the registration entry in the external registry" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 2 ;
            sh:path revaise:registry_entry_url ],
        [ sh:datatype xsd:string ;
            sh:description "ID of the initial registration version" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:initial_version_id ] ;
    sh:targetClass revaise:Registration .

revaise:RegistrationPolicy a sh:NodeShape ;
    rdfs:comment "Policy governing registration requirements and constraints" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:integer ;
            sh:description "Maximum days allowed between version updates" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:max_days_between_versions ],
        [ sh:datatype xsd:boolean ;
            sh:description "Whether content hashes are required for verification" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:require_content_hash ],
        [ sh:description "URIs of allowed registration templates" ;
            sh:nodeKind sh:IRI ;
            sh:order 6 ;
            sh:path revaise:allowed_templates ],
        [ sh:datatype xsd:boolean ;
            sh:description "Whether DOIs are required for registration versions" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:require_doi ],
        [ sh:datatype xsd:boolean ;
            sh:description "Whether a template must be used" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:require_template ],
        [ sh:description "Allowed hash algorithms for content verification" ;
            sh:in ( "SHA256" "SHA512" "SHA3_256" "SHA3_512" "BLAKE2B" "BLAKE3" ) ;
            sh:order 7 ;
            sh:path revaise:hash_algorithms ],
        [ sh:datatype xsd:boolean ;
            sh:description "Whether amendments require formal approval" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:require_amendment_approval ],
        [ sh:description "Types of amendments allowed" ;
            sh:in ( "CLARIFICATION" "CORRECTION" "PROTOCOL_CHANGE" "SCOPE_CHANGE" "METHODOLOGY_CHANGE" "TIMELINE_CHANGE" "TEAM_CHANGE" "ADMINISTRATIVE" ) ;
            sh:order 2 ;
            sh:path revaise:allowed_change_types ] ;
    sh:targetClass revaise:RegistrationPolicy .

revaise:RegistrationProtocol a sh:NodeShape ;
    rdfs:comment "Protocol defining the registration approach and requirements" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "Commitments to transparency and open science" ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:transparency_commitments ],
        [ sh:datatype xsd:string ;
            sh:description "Any embargo period for the registration" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:embargo_period ],
        [ sh:datatype xsd:string ;
            sh:description "Platforms where the protocol will be registered" ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:registration_platforms ],
        [ sh:datatype xsd:string ;
            sh:description "Version of the protocol" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:base_protocol_version ],
        [ sh:datatype xsd:string ;
            sh:description "Additional notes about the protocol" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 12 ;
            sh:path revaise:base_protocol_notes ],
        [ sh:datatype xsd:string ;
            sh:description "When registration should occur (e.g., before data collection)" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:registration_timing ],
        [ sh:datatype xsd:string ;
            sh:description "Policy for updating registrations" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:registration_update_policy ],
        [ sh:datatype xsd:string ;
            sh:description "Deviations from the planned protocol" ;
            sh:nodeKind sh:Literal ;
            sh:order 11 ;
            sh:path revaise:base_protocol_deviations ],
        [ sh:datatype xsd:string ;
            sh:description "Detailed description of the protocol" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path revaise:base_protocol_description ],
        [ sh:datatype xsd:date ;
            sh:description "Date the protocol was finalized" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:base_protocol_date ],
        [ sh:class revaise:ExternalTool ;
            sh:description "Tools used in this stage" ;
            sh:nodeKind sh:IRI ;
            sh:order 9 ;
            sh:path revaise:base_protocol_tools ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for this stage protocol" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:base_protocol_id ],
        [ sh:class revaise:ExternalTool ;
            sh:description "Software packages used in this stage" ;
            sh:nodeKind sh:IRI ;
            sh:order 10 ;
            sh:path revaise:base_protocol_software ],
        [ sh:class revaise:StageTrainingInfo ;
            sh:description "Training provided for this stage" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 13 ;
            sh:path revaise:base_protocol_training ] ;
    sh:targetClass revaise:RegistrationProtocol .

revaise:RegistrationQualityControl a sh:NodeShape ;
    rdfs:comment "Quality control measures for the registration process" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:boolean ;
            sh:description "Whether registration accuracy was verified" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:registration_accuracy_verification ],
        [ sh:class revaise:ConflictResolution ;
            sh:description "Record of resolved discrepancies" ;
            sh:nodeKind sh:IRI ;
            sh:order 8 ;
            sh:path revaise:base_discrepancy_resolutions ],
        [ sh:datatype xsd:float ;
            sh:description "Proportion of items double-checked" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:base_double_checking_rate ],
        [ sh:class revaise:AgreementMetrics ;
            sh:description "Inter-rater agreement metrics" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 7 ;
            sh:path revaise:base_agreement_metrics ],
        [ sh:datatype xsd:boolean ;
            sh:description "Whether registration completeness was verified" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:registration_completeness_check ],
        [ sh:datatype xsd:string ;
            sh:description "Type of quality control (screening, extraction, synthesis, etc.)" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:base_qc_type ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for quality control instance" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:base_qc_id ],
        [ sh:datatype xsd:string ;
            sh:description "Process for reviewing amendments" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:amendment_review_process ],
        [ sh:datatype xsd:string ;
            sh:description "Audit trail for version control" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:version_control_audit ],
        [ sh:datatype xsd:boolean ;
            sh:description "Whether calibration exercises were performed" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 10 ;
            sh:path revaise:base_calibration_performed ],
        [ sh:datatype xsd:string ;
            sh:description "Additional quality control notes" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 11 ;
            sh:path revaise:base_qc_notes ],
        [ sh:datatype xsd:float ;
            sh:description "Proportion of items spot-checked" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 9 ;
            sh:path revaise:base_spot_check_rate ] ;
    sh:targetClass revaise:RegistrationQualityControl .

revaise:RegistrationStatistics a sh:NodeShape ;
    rdfs:comment "Statistics about the registration process" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:integer ;
            sh:description "Total number of registration versions" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 9 ;
            sh:path revaise:base_total_items ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of items completed" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 10 ;
            sh:path revaise:base_items_completed ],
        [ sh:datatype xsd:float ;
            sh:description "Total hours spent on this stage" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 12 ;
            sh:path revaise:base_total_hours ],
        [ sh:datatype xsd:integer ;
            sh:description "Total number of registrations created" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:total_registrations ],
        [ sh:datatype xsd:float ;
            sh:description "Average days between registration versions" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:average_days_between_versions ],
        [ sh:datatype xsd:date ;
            sh:description "Date the stage completed" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path revaise:base_completed_date ],
        [ sh:class revaise:ParticipantWorkload ;
            sh:description "Workload distribution among participants" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 13 ;
            sh:path revaise:base_participant_workloads ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for stage statistics" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:base_stats_id ],
        [ sh:datatype xsd:string ;
            sh:description "Additional notes about stage statistics" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 14 ;
            sh:path revaise:base_stats_notes ],
        [ sh:datatype xsd:integer ;
            sh:description "Total number of registration versions" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:total_versions ],
        [ sh:datatype xsd:integer ;
            sh:description "Days from protocol creation to first registration" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:days_to_first_registration ],
        [ sh:datatype xsd:date ;
            sh:description "Date the stage started" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:base_started_date ],
        [ sh:datatype xsd:float ;
            sh:description "Proportion of items completed" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 11 ;
            sh:path revaise:base_completion_rate ],
        [ sh:datatype xsd:float ;
            sh:description "Rate of compliance with registration requirements" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:registration_compliance_rate ],
        [ sh:datatype xsd:integer ;
            sh:description "Total number of amendments" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:total_amendments ] ;
    sh:targetClass revaise:RegistrationStatistics .

revaise:RegistrationVersion a sh:NodeShape ;
    rdfs:comment "An immutable version of a registration, capturing the exact state at a point in time." ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "Version identifier in the external registry" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:registry_version_id ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for this version" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:version_id ],
        [ sh:datatype xsd:boolean ;
            sh:description "Whether this is a major revision" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 18 ;
            sh:path revaise:is_major_revision ],
        [ sh:datatype xsd:dateTime ;
            sh:description "When this version was created" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 15 ;
            sh:path revaise:version_date ],
        [ sh:datatype xsd:string ;
            sh:description "Cryptographic hash of the registration content" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path revaise:content_hash ],
        [ sh:class revaise:Author ;
            sh:description "Author who created this version" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 16 ;
            sh:path revaise:version_author ],
        [ sh:class <https://open-and-sustainable.github.io/revaise-model/schema/objects/protocol/Amendment> ;
            sh:description "Amendments made in this version" ;
            sh:nodeKind sh:IRI ;
            sh:order 19 ;
            sh:path <https://open-and-sustainable.github.io/revaise-model/schema/objects/protocol/amendments> ],
        [ sh:datatype xsd:string ;
            sh:description "Hash of the exact protocol registered" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 14 ;
            sh:path revaise:protocol_snapshot_hash ],
        [ sh:datatype xsd:dateTime ;
            sh:description "When this version was accepted by the registry" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:registry_acceptance_date ],
        [ sh:datatype xsd:string ;
            sh:description "Version of the template used" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 12 ;
            sh:path revaise:registration_template_version ],
        [ sh:datatype xsd:string ;
            sh:description "DOI if this version has been published" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:registration_doi ],
        [ sh:description "Algorithm used to generate the content hash" ;
            sh:in ( "SHA256" "SHA512" "SHA3_256" "SHA3_512" "BLAKE2B" "BLAKE3" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:order 9 ;
            sh:path revaise:content_hash_algorithm ],
        [ sh:datatype xsd:dateTime ;
            sh:description "When this version was submitted to the registry" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:registry_submission_date ],
        [ sh:description "URI to the immutable content of this version" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 7 ;
            sh:path revaise:content_uri ],
        [ sh:datatype xsd:string ;
            sh:description "Semantic version number (e.g., 1.0.0, 1.1.0)" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:version_number ],
        [ sh:datatype xsd:string ;
            sh:description "DOI of the registration template used, if available" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 13 ;
            sh:path revaise:registration_template_doi ],
        [ sh:description "Reference to the template used" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 11 ;
            sh:path revaise:template_ref ],
        [ sh:datatype xsd:string ;
            sh:description "Human-readable label for this version" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:version_label ],
        [ sh:datatype xsd:string ;
            sh:description "Reason for creating this version" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 17 ;
            sh:path revaise:version_reason ],
        [ sh:datatype xsd:string ;
            sh:description "Optional full text as submitted to the registry" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 10 ;
            sh:path revaise:registered_text ] ;
    sh:targetClass revaise:RegistrationVersion .

revaise:ReportDocument a sh:NodeShape ;
    rdfs:comment "Report, manuscript, preprint, or supplementary document." ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:class <https://open-and-sustainable.github.io/revaise-model/schema/objects/stage_output/StageOutput> ;
            sh:description "Report document output artifact" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 8 ;
            sh:path revaise:report_output ],
        [ sh:datatype xsd:string ;
            sh:description "Title of the report document" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:report_title ],
        [ sh:description "Type of report document" ;
            sh:in ( "MANUSCRIPT" "PREPRINT" "REGISTERED_REPORT" "TECHNICAL_REPORT" "SUPPLEMENTARY_MATERIAL" "PRISMA_CHECKLIST" "PRISMA_FLOW_DIAGRAM" "OTHER" ) ;
            sh:maxCount 1 ;
            sh:order 1 ;
            sh:path revaise:report_document_type ],
        [ sh:datatype xsd:string ;
            sh:description "Version of the report document" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:report_version ],
        [ sh:datatype xsd:string ;
            sh:description "DOI for the report document" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:report_doi ],
        [ sh:datatype xsd:dateTime ;
            sh:description "Date associated with the report document" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:report_date ],
        [ sh:datatype xsd:string ;
            sh:description "Identifier for a report document" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:report_document_id ],
        [ sh:description "Status of the report document" ;
            sh:in ( "PLANNED" "DRAFT" "IN_REVIEW" "SUBMITTED" "ACCEPTED" "PUBLISHED" "WITHDRAWN" ) ;
            sh:maxCount 1 ;
            sh:order 3 ;
            sh:path revaise:report_status ],
        [ sh:description "URI for the report document" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 4 ;
            sh:path revaise:report_uri ] ;
    sh:targetClass revaise:ReportDocument .

revaise:ReportingApproval a sh:NodeShape ;
    rdfs:comment "Approval or signoff associated with reporting." ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "Role of the approver" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:reporting_approval_role ],
        [ sh:description "Status of the approval" ;
            sh:in ( "REQUESTED" "APPROVED" "REVISIONS_REQUESTED" "DECLINED" ) ;
            sh:maxCount 1 ;
            sh:order 3 ;
            sh:path revaise:reporting_approval_status ],
        [ sh:class revaise:Participant ;
            sh:description "Participant providing approval" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 1 ;
            sh:path revaise:reporting_approver ],
        [ sh:datatype xsd:string ;
            sh:description "Identifier for a reporting approval" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:reporting_approval_id ],
        [ sh:datatype xsd:dateTime ;
            sh:description "Date and time of approval" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:reporting_approval_date ],
        [ sh:datatype xsd:string ;
            sh:description "Notes about the approval" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:reporting_approval_notes ] ;
    sh:targetClass revaise:ReportingApproval .

revaise:ReportingChecklist a sh:NodeShape ;
    rdfs:comment "Checklist documenting completion of a reporting standard." ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "Identifier for a reporting checklist" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:reporting_checklist_id ],
        [ sh:description "Overall checklist completion status" ;
            sh:in ( "NOT_STARTED" "IN_PROGRESS" "COMPLETE" "PARTIAL" "NOT_APPLICABLE" ) ;
            sh:maxCount 1 ;
            sh:order 4 ;
            sh:path revaise:reporting_checklist_status ],
        [ sh:class <https://open-and-sustainable.github.io/revaise-model/schema/objects/stage_output/StageOutput> ;
            sh:description "Checklist artifact output" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 5 ;
            sh:path revaise:reporting_checklist_output ],
        [ sh:class revaise:ReportingChecklistItem ;
            sh:description "Items in the reporting checklist" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 3 ;
            sh:path revaise:reporting_checklist_items ],
        [ sh:datatype xsd:string ;
            sh:description "Version of the reporting checklist" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:reporting_checklist_version ],
        [ sh:datatype xsd:string ;
            sh:description "Name or identifier of the checklist standard" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:checklist_standard ] ;
    sh:targetClass revaise:ReportingChecklist .

revaise:ReportingChecklistItem a sh:NodeShape ;
    rdfs:comment "Item-level status for a reporting checklist." ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "References to model artifacts supporting the reporting item" ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:reporting_item_artifact_refs ],
        [ sh:datatype xsd:string ;
            sh:description "Location in the report where the item is addressed" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:reporting_item_location ],
        [ sh:datatype xsd:string ;
            sh:description "Notes about the reporting item" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:reporting_item_notes ],
        [ sh:datatype xsd:string ;
            sh:description "Short label for the reporting item" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:reporting_item_label ],
        [ sh:datatype xsd:string ;
            sh:description "Identifier for a reporting checklist item" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:reporting_item_id ],
        [ sh:description "Completion status for the reporting item" ;
            sh:in ( "NOT_STARTED" "IN_PROGRESS" "COMPLETE" "PARTIAL" "NOT_APPLICABLE" ) ;
            sh:maxCount 1 ;
            sh:order 3 ;
            sh:path revaise:reporting_item_status ],
        [ sh:datatype xsd:string ;
            sh:description "Text or description of the reporting item" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:reporting_item_text ] ;
    sh:targetClass revaise:ReportingChecklistItem .

revaise:ReportingDeviation a sh:NodeShape ;
    rdfs:comment "Protocol or workflow deviation disclosed in reporting." ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "Description of the deviation" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:deviation_description ],
        [ sh:datatype xsd:string ;
            sh:description "Protocol, analysis plan, or workflow element from which the report deviated" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:deviation_from ],
        [ sh:datatype xsd:string ;
            sh:description "Identifier for a reporting deviation" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:reporting_deviation_id ],
        [ sh:datatype xsd:string ;
            sh:description "Location where the deviation is reported" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:deviation_reported_where ],
        [ sh:datatype xsd:string ;
            sh:description "Impact of the deviation on interpretation or conclusions" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:deviation_impact ],
        [ sh:datatype xsd:string ;
            sh:description "Rationale for the deviation" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:deviation_rationale ] ;
    sh:targetClass revaise:ReportingDeviation .

revaise:ReportingProtocol a sh:NodeShape ;
    rdfs:comment "Protocol or plan for reporting and dissemination." ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "Plan for preprint posting" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:preprint_plan ],
        [ sh:datatype xsd:string ;
            sh:description "Deviations from the planned protocol" ;
            sh:nodeKind sh:Literal ;
            sh:order 13 ;
            sh:path revaise:base_protocol_deviations ],
        [ sh:class revaise:StageTrainingInfo ;
            sh:description "Training provided for this stage" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 15 ;
            sh:path revaise:base_protocol_training ],
        [ sh:datatype xsd:string ;
            sh:description "Intended audiences for the report" ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:target_audiences ],
        [ sh:datatype xsd:date ;
            sh:description "Date the protocol was finalized" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 9 ;
            sh:path revaise:base_protocol_date ],
        [ sh:datatype xsd:string ;
            sh:description "Open access plan for reports or manuscripts" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:open_access_plan ],
        [ sh:datatype xsd:string ;
            sh:description "Additional notes about the protocol" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 14 ;
            sh:path revaise:base_protocol_notes ],
        [ sh:datatype xsd:string ;
            sh:description "Timeline or schedule for reporting" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:reporting_timeline ],
        [ sh:datatype xsd:string ;
            sh:description "Detailed description of the protocol" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 10 ;
            sh:path revaise:base_protocol_description ],
        [ sh:datatype xsd:string ;
            sh:description "Version of the protocol" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path revaise:base_protocol_version ],
        [ sh:datatype xsd:string ;
            sh:description "Reporting standards planned for use" ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:planned_reporting_standards ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for this stage protocol" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:base_protocol_id ],
        [ sh:class revaise:ExternalTool ;
            sh:description "Software packages used in this stage" ;
            sh:nodeKind sh:IRI ;
            sh:order 12 ;
            sh:path revaise:base_protocol_software ],
        [ sh:datatype xsd:string ;
            sh:description "Plan for data availability statements and shared data" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:data_availability_plan ],
        [ sh:class revaise:ExternalTool ;
            sh:description "Tools used in this stage" ;
            sh:nodeKind sh:IRI ;
            sh:order 11 ;
            sh:path revaise:base_protocol_tools ],
        [ sh:description "Planned publication or dissemination types" ;
            sh:in ( "MANUSCRIPT" "PREPRINT" "REGISTERED_REPORT" "TECHNICAL_REPORT" "SUPPLEMENTARY_MATERIAL" "PRISMA_CHECKLIST" "PRISMA_FLOW_DIAGRAM" "OTHER" ) ;
            sh:order 1 ;
            sh:path revaise:target_publication_types ] ;
    sh:targetClass revaise:ReportingProtocol .

revaise:ReportingQualityControl a sh:NodeShape ;
    rdfs:comment "Quality control measures for reporting." ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:boolean ;
            sh:description "Whether flow diagram counts were reconciled against review data" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:flow_counts_reconciled ],
        [ sh:datatype xsd:string ;
            sh:description "Type of quality control (screening, extraction, synthesis, etc.)" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:base_qc_type ],
        [ sh:datatype xsd:boolean ;
            sh:description "Whether reporting received internal peer review" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:reporting_peer_review ],
        [ sh:datatype xsd:float ;
            sh:description "Proportion of items double-checked" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:base_double_checking_rate ],
        [ sh:datatype xsd:boolean ;
            sh:description "Whether calibration exercises were performed" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 11 ;
            sh:path revaise:base_calibration_performed ],
        [ sh:datatype xsd:string ;
            sh:description "Additional quality control notes" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 12 ;
            sh:path revaise:base_qc_notes ],
        [ sh:class revaise:ConflictResolution ;
            sh:description "Record of resolved discrepancies" ;
            sh:nodeKind sh:IRI ;
            sh:order 9 ;
            sh:path revaise:base_discrepancy_resolutions ],
        [ sh:datatype xsd:boolean ;
            sh:description "Whether links to supporting artifacts were verified" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:artifact_links_verified ],
        [ sh:datatype xsd:boolean ;
            sh:description "Whether reporting checklist completion was verified" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:checklist_verified ],
        [ sh:class revaise:AgreementMetrics ;
            sh:description "Inter-rater agreement metrics" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 8 ;
            sh:path revaise:base_agreement_metrics ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for quality control instance" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:base_qc_id ],
        [ sh:datatype xsd:boolean ;
            sh:description "Whether transparency statements were checked" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:reporting_transparency_check ],
        [ sh:datatype xsd:float ;
            sh:description "Proportion of items spot-checked" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 10 ;
            sh:path revaise:base_spot_check_rate ] ;
    sh:targetClass revaise:ReportingQualityControl .

revaise:ReportingStandard a sh:NodeShape ;
    rdfs:comment "Reporting standard used or planned for the review report." ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "Identifier for a reporting standard" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:reporting_standard_id ],
        [ sh:datatype xsd:string ;
            sh:description "Version of the reporting standard" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:reporting_standard_version ],
        [ sh:description "Completion status for the reporting standard" ;
            sh:in ( "NOT_STARTED" "IN_PROGRESS" "COMPLETE" "PARTIAL" "NOT_APPLICABLE" ) ;
            sh:maxCount 1 ;
            sh:order 5 ;
            sh:path revaise:reporting_standard_status ],
        [ sh:datatype xsd:string ;
            sh:description "Name of the reporting standard" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:reporting_standard_name ],
        [ sh:description "URI for the reporting standard" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 3 ;
            sh:path revaise:reporting_standard_uri ],
        [ sh:datatype xsd:string ;
            sh:description "Scope or applicability of the reporting standard" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:reporting_standard_scope ] ;
    sh:targetClass revaise:ReportingStandard .

revaise:ReportingStatistics a sh:NodeShape ;
    rdfs:comment "Summary statistics for reporting." ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:integer ;
            sh:description "Number of reporting standards documented" ;
            sh:maxCount 1 ;
            sh:minInclusive 0 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:reporting_standards_count ],
        [ sh:datatype xsd:date ;
            sh:description "Date the stage completed" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path revaise:base_completed_date ],
        [ sh:datatype xsd:float ;
            sh:description "Proportion of items completed" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 11 ;
            sh:path revaise:base_completion_rate ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for stage statistics" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:base_stats_id ],
        [ sh:datatype xsd:date ;
            sh:description "Date the stage started" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:base_started_date ],
        [ sh:datatype xsd:float ;
            sh:description "Total hours spent on this stage" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 12 ;
            sh:path revaise:base_total_hours ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of reporting deviations" ;
            sh:maxCount 1 ;
            sh:minInclusive 0 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:reporting_deviations_count ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of items completed" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 10 ;
            sh:path revaise:base_items_completed ],
        [ sh:datatype xsd:integer ;
            sh:description "Total number of items to process in this stage" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 9 ;
            sh:path revaise:base_total_items ],
        [ sh:datatype xsd:integer ;
            sh:description "Total number of reporting checklist items" ;
            sh:maxCount 1 ;
            sh:minInclusive 0 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:reporting_checklist_items_total ],
        [ sh:datatype xsd:string ;
            sh:description "Additional notes about stage statistics" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 14 ;
            sh:path revaise:base_stats_notes ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of publication records" ;
            sh:maxCount 1 ;
            sh:minInclusive 0 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:publications_count ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of completed reporting checklist items" ;
            sh:maxCount 1 ;
            sh:minInclusive 0 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:reporting_checklist_items_complete ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of report documents" ;
            sh:maxCount 1 ;
            sh:minInclusive 0 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:report_documents_count ],
        [ sh:class revaise:ParticipantWorkload ;
            sh:description "Workload distribution among participants" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 13 ;
            sh:path revaise:base_participant_workloads ] ;
    sh:targetClass revaise:ReportingStatistics .

revaise:ResolutionMethodCount a sh:NodeShape ;
    rdfs:comment "Count of a specific resolution method usage" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:description "The resolution method" ;
            sh:in ( "CONSENSUS_DISCUSSION" "THIRD_REVIEWER" "SENIOR_REVIEWER" "MAJORITY_VOTE" "TEAM_MEETING" "STATISTICAL_METHOD" "PREDEFINED_RULE" "RE_REVIEW" "EXTERNAL_EXPERT" "AUTOMATED_RULE" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:order 0 ;
            sh:path revaise:method ],
        [ sh:datatype xsd:float ;
            sh:description "Success rate of this method" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:success_rate ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of times this method was used" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:count ] ;
    sh:targetClass revaise:ResolutionMethodCount .

revaise:ReviewNarrative a sh:NodeShape ;
    rdfs:comment "Narrative prose sections of the review report." ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "Limitations of the review processes used" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:discussion_process_limitations ],
        [ sh:datatype xsd:string ;
            sh:description "Rationale for the review in the context of existing knowledge" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:rationale ],
        [ sh:datatype xsd:string ;
            sh:description "General interpretation of the results in the context of other evidence" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:discussion_interpretation ],
        [ sh:datatype xsd:string ;
            sh:description "Implications of the results for practice, policy, and future research" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:discussion_implications ],
        [ sh:datatype xsd:string ;
            sh:description "Limitations of the evidence included in the review" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:discussion_evidence_limitations ] ;
    sh:targetClass revaise:ReviewNarrative .

revaise:ReviewQuestionCandidate a sh:NodeShape ;
    rdfs:comment "Candidate review question considered during scoping." ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "Candidate question text" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:question_text ],
        [ sh:description "Status of the candidate question" ;
            sh:in ( "PROPOSED" "REFINED" "SELECTED" "REJECTED" "MERGED" ) ;
            sh:maxCount 1 ;
            sh:order 8 ;
            sh:path revaise:candidate_status ],
        [ sh:datatype xsd:string ;
            sh:description "Outcome components of the candidate question" ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:candidate_outcomes ],
        [ sh:datatype xsd:string ;
            sh:description "Identifier of a related scoping decision" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 10 ;
            sh:path revaise:related_decision_id ],
        [ sh:datatype xsd:string ;
            sh:description "Intervention, exposure, or concept component of the candidate question" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:candidate_intervention_or_exposure ],
        [ sh:datatype xsd:string ;
            sh:description "Context or setting component of the candidate question" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:candidate_context ],
        [ sh:datatype xsd:string ;
            sh:description "Identifier for a candidate question" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:question_candidate_id ],
        [ sh:datatype xsd:string ;
            sh:description "Comparator component of the candidate question" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:candidate_comparator ],
        [ sh:datatype xsd:string ;
            sh:description "Population component of the candidate question" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:candidate_population ],
        [ sh:datatype xsd:string ;
            sh:description "Rationale for accepting, rejecting, or refining a candidate question" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 9 ;
            sh:path revaise:candidate_rationale ],
        [ sh:datatype xsd:string ;
            sh:description "Framework used to express the question, such as PICO, PECO, or SPIDER" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:question_framework ] ;
    sh:targetClass revaise:ReviewQuestionCandidate .

revaise:RobAssessment a sh:NodeShape ;
    rdfs:comment "Risk-of-bias assessment for a single included study." ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "Notes on the risk-of-bias assessment" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:rob_notes ],
        [ sh:class revaise:RiskOfBiasDomainAssessment ;
            sh:description "Per-domain risk-of-bias judgements, including signalling questions" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 1 ;
            sh:path revaise:rob_domain_judgements ],
        [ sh:description "Overall risk-of-bias judgement for the study" ;
            sh:in ( "LOW_RISK" "SOME_CONCERNS" "MODERATE_RISK" "SERIOUS_RISK" "HIGH_RISK" "CRITICAL_RISK" "NO_INFORMATION" "NOT_APPLICABLE" ) ;
            sh:maxCount 1 ;
            sh:order 2 ;
            sh:path revaise:overall_judgement ],
        [ sh:datatype xsd:string ;
            sh:description "Identifier for a risk-of-bias assessment record" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:rob_assessment_id ] ;
    sh:targetClass revaise:RobAssessment .

revaise:RobProtocol a sh:NodeShape ;
    rdfs:comment "Protocol for risk-of-bias assessment, including tool and rater configuration." ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:date ;
            sh:description "Date the protocol was finalized" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:base_protocol_date ],
        [ sh:datatype xsd:string ;
            sh:description "Method for resolving disagreements between raters" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:disagreement_resolution ],
        [ sh:datatype xsd:string ;
            sh:description "Deviations from the planned protocol" ;
            sh:nodeKind sh:Literal ;
            sh:order 11 ;
            sh:path revaise:base_protocol_deviations ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for this stage protocol" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:base_protocol_id ],
        [ sh:datatype xsd:string ;
            sh:description "Detailed description of the protocol" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path revaise:base_protocol_description ],
        [ sh:datatype xsd:string ;
            sh:description "Version of the risk-of-bias tool" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:rob_tool_version ],
        [ sh:datatype xsd:string ;
            sh:description "Domains assessed by the tool" ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:rob_domains ],
        [ sh:datatype xsd:integer ;
            sh:description "Minimum number of independent raters per study" ;
            sh:maxCount 1 ;
            sh:minInclusive 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:minimum_raters ],
        [ sh:class revaise:ExternalTool ;
            sh:description "Software packages used in this stage" ;
            sh:nodeKind sh:IRI ;
            sh:order 10 ;
            sh:path revaise:base_protocol_software ],
        [ sh:datatype xsd:string ;
            sh:description "Additional notes about the protocol" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 12 ;
            sh:path revaise:base_protocol_notes ],
        [ sh:datatype xsd:string ;
            sh:description "Version of the protocol" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:base_protocol_version ],
        [ sh:class revaise:StageTrainingInfo ;
            sh:description "Training provided for this stage" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 13 ;
            sh:path revaise:base_protocol_training ],
        [ sh:class revaise:ExternalTool ;
            sh:description "Tools used in this stage" ;
            sh:nodeKind sh:IRI ;
            sh:order 9 ;
            sh:path revaise:base_protocol_tools ],
        [ sh:datatype xsd:string ;
            sh:description "Risk-of-bias assessment tool used (e.g., RoB 2, ROBINS-I, NOS)" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:rob_tool ] ;
    sh:targetClass revaise:RobProtocol .

revaise:RobQualityControl a sh:NodeShape ;
    rdfs:comment "Quality control measures for risk-of-bias assessment." ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:class revaise:AgreementMetrics ;
            sh:description "Inter-rater agreement metrics" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 6 ;
            sh:path revaise:base_agreement_metrics ],
        [ sh:datatype xsd:string ;
            sh:description "Additional quality control notes" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 10 ;
            sh:path revaise:base_qc_notes ],
        [ sh:class revaise:ConflictResolution ;
            sh:description "Record of resolved discrepancies" ;
            sh:nodeKind sh:IRI ;
            sh:order 7 ;
            sh:path revaise:base_discrepancy_resolutions ],
        [ sh:datatype xsd:string ;
            sh:description "Type of quality control (screening, extraction, synthesis, etc.)" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:base_qc_type ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for quality control instance" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:base_qc_id ],
        [ sh:datatype xsd:boolean ;
            sh:description "Whether inter-rater reliability was checked" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:rob_inter_rater_reliability_checked ],
        [ sh:datatype xsd:float ;
            sh:description "Proportion of items double-checked" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:base_double_checking_rate ],
        [ sh:datatype xsd:boolean ;
            sh:description "Whether calibration exercises were performed" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 9 ;
            sh:path revaise:base_calibration_performed ],
        [ sh:datatype xsd:float ;
            sh:description "Proportion of items spot-checked" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path revaise:base_spot_check_rate ],
        [ sh:datatype xsd:boolean ;
            sh:description "Whether rater calibration was performed before assessment" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:rob_calibration_performed ],
        [ sh:datatype xsd:boolean ;
            sh:description "Whether all rater discrepancies were resolved" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:rob_discrepancies_resolved ] ;
    sh:targetClass revaise:RobQualityControl .

revaise:RobStatistics a sh:NodeShape ;
    rdfs:comment "Summary statistics for the risk-of-bias assessment stage." ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "Additional notes about stage statistics" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 12 ;
            sh:path revaise:base_stats_notes ],
        [ sh:datatype xsd:float ;
            sh:description "Total hours spent on this stage" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 10 ;
            sh:path revaise:base_total_hours ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for stage statistics" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:base_stats_id ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of studies judged at low risk of bias" ;
            sh:maxCount 1 ;
            sh:minInclusive 0 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:low_risk_count ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of items completed" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path revaise:base_items_completed ],
        [ sh:class revaise:ParticipantWorkload ;
            sh:description "Workload distribution among participants" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 11 ;
            sh:path revaise:base_participant_workloads ],
        [ sh:datatype xsd:date ;
            sh:description "Date the stage completed" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:base_completed_date ],
        [ sh:datatype xsd:date ;
            sh:description "Date the stage started" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:base_started_date ],
        [ sh:datatype xsd:float ;
            sh:description "Proportion of items completed" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 9 ;
            sh:path revaise:base_completion_rate ],
        [ sh:datatype xsd:integer ;
            sh:description "Total number of studies assessed for risk of bias" ;
            sh:maxCount 1 ;
            sh:minInclusive 0 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:studies_assessed_count ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of studies judged as raising some concerns" ;
            sh:maxCount 1 ;
            sh:minInclusive 0 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:some_concerns_count ],
        [ sh:datatype xsd:integer ;
            sh:description "Total number of items to process in this stage" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:base_total_items ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of studies judged at high risk of bias" ;
            sh:maxCount 1 ;
            sh:minInclusive 0 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:high_risk_count ] ;
    sh:targetClass revaise:RobStatistics .

revaise:RoundStatistics a sh:NodeShape ;
    rdfs:comment "Statistics for a screening round" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:float ;
            sh:description "Average time per record in seconds" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:average_time_per_record ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of records excluded" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:records_excluded ],
        [ sh:datatype xsd:float ;
            sh:description "Rate of inclusion (0-1)" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:inclusion_rate ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of conflicts" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 9 ;
            sh:path revaise:conflicts_count ],
        [ sh:datatype xsd:float ;
            sh:description "Rate of exclusion (0-1)" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:exclusion_rate ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of uncertain decisions" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:records_uncertain ],
        [ sh:datatype xsd:float ;
            sh:description "Total screening time in hours" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:total_screening_time ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of conflicts resolved" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 10 ;
            sh:path revaise:conflicts_resolved ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of records included" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:records_included ],
        [ sh:class revaise:AgreementMetrics ;
            sh:description "Agreement metrics between raters" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 8 ;
            sh:path revaise:inter_rater_agreement ],
        [ sh:datatype xsd:integer ;
            sh:description "Total number of records screened" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:total_records_screened ] ;
    sh:targetClass revaise:RoundStatistics .

revaise:ScopingDecision a sh:NodeShape ;
    rdfs:comment "Decision made during scoping." ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "Protocol sections affected by the decision" ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:affected_protocol_sections ],
        [ sh:datatype xsd:string ;
            sh:description "Identifier for a scoping decision" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:scoping_decision_id ],
        [ sh:class revaise:Participant ;
            sh:description "Participants who made the decision" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 4 ;
            sh:path revaise:decision_made_by ],
        [ sh:description "Type of scoping decision" ;
            sh:in ( "QUESTION_REFINEMENT" "CRITERIA_REFINEMENT" "SCOPE_NARROWING" "SCOPE_BROADENING" "FEASIBILITY_DECISION" "METHODS_DECISION" "OTHER" ) ;
            sh:maxCount 1 ;
            sh:order 1 ;
            sh:path revaise:scoping_decision_type ],
        [ sh:datatype xsd:string ;
            sh:description "Changes resulting from the decision" ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:resulting_changes ],
        [ sh:datatype xsd:dateTime ;
            sh:description "Date and time when the decision was made" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:decision_date ],
        [ sh:datatype xsd:string ;
            sh:description "Rationale for the scoping decision" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:scoping_decision_rationale ],
        [ sh:datatype xsd:string ;
            sh:description "Decision text" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:scoping_decision_text ] ;
    sh:targetClass revaise:ScopingDecision .

revaise:ScopingProtocol a sh:NodeShape ;
    rdfs:comment "Protocol describing how scoping work will be conducted." ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "Unique identifier for this stage protocol" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path revaise:base_protocol_id ],
        [ sh:datatype xsd:string ;
            sh:description "Initial review question before refinement" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:initial_review_question ],
        [ sh:datatype xsd:string ;
            sh:description "Initial or refined concept, intervention, exposure, or topic scope" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:concept_scope ],
        [ sh:datatype xsd:string ;
            sh:description "Detailed description of the protocol" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 11 ;
            sh:path revaise:base_protocol_description ],
        [ sh:datatype xsd:string ;
            sh:description "Initial or refined population scope" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:population_scope ],
        [ sh:class revaise:ExternalTool ;
            sh:description "Software packages used in this stage" ;
            sh:nodeKind sh:IRI ;
            sh:order 13 ;
            sh:path revaise:base_protocol_software ],
        [ sh:datatype xsd:string ;
            sh:description "Deviations from the planned protocol" ;
            sh:nodeKind sh:Literal ;
            sh:order 14 ;
            sh:path revaise:base_protocol_deviations ],
        [ sh:datatype xsd:string ;
            sh:description "Additional notes about the protocol" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 15 ;
            sh:path revaise:base_protocol_notes ],
        [ sh:datatype xsd:date ;
            sh:description "Date the protocol was finalized" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 10 ;
            sh:path revaise:base_protocol_date ],
        [ sh:datatype xsd:string ;
            sh:description "Version of the protocol" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 9 ;
            sh:path revaise:base_protocol_version ],
        [ sh:datatype xsd:string ;
            sh:description "Criteria for ending scoping work" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:scoping_stop_criteria ],
        [ sh:datatype xsd:string ;
            sh:description "Criteria for starting scoping work" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:scoping_start_criteria ],
        [ sh:datatype xsd:string ;
            sh:description "Purpose of the scoping work" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:scoping_objective ],
        [ sh:datatype xsd:string ;
            sh:description "Methods planned for scoping" ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:planned_scoping_methods ],
        [ sh:class revaise:StageTrainingInfo ;
            sh:description "Training provided for this stage" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 16 ;
            sh:path revaise:base_protocol_training ],
        [ sh:class revaise:ExternalTool ;
            sh:description "Tools used in this stage" ;
            sh:nodeKind sh:IRI ;
            sh:order 12 ;
            sh:path revaise:base_protocol_tools ],
        [ sh:datatype xsd:string ;
            sh:description "Initial or refined context or setting scope" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:context_scope ] ;
    sh:targetClass revaise:ScopingProtocol .

revaise:ScopingQualityControl a sh:NodeShape ;
    rdfs:comment "Quality control measures for scoping." ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:class revaise:ConflictResolution ;
            sh:description "Record of resolved discrepancies" ;
            sh:nodeKind sh:IRI ;
            sh:order 8 ;
            sh:path revaise:base_discrepancy_resolutions ],
        [ sh:datatype xsd:string ;
            sh:description "Consistency checks performed during scoping" ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:scoping_consistency_checks ],
        [ sh:datatype xsd:boolean ;
            sh:description "Whether scoping work received peer review" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:scoping_peer_review ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for quality control instance" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:base_qc_id ],
        [ sh:class revaise:AgreementMetrics ;
            sh:description "Inter-rater agreement metrics" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 7 ;
            sh:path revaise:base_agreement_metrics ],
        [ sh:datatype xsd:float ;
            sh:description "Proportion of items double-checked" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:base_double_checking_rate ],
        [ sh:datatype xsd:boolean ;
            sh:description "Whether stakeholders validated the proposed scope" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:stakeholder_validation ],
        [ sh:datatype xsd:string ;
            sh:description "Type of quality control (screening, extraction, synthesis, etc.)" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:base_qc_type ],
        [ sh:datatype xsd:float ;
            sh:description "Proportion of items spot-checked" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 9 ;
            sh:path revaise:base_spot_check_rate ],
        [ sh:datatype xsd:boolean ;
            sh:description "Whether calibration exercises were performed" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 10 ;
            sh:path revaise:base_calibration_performed ],
        [ sh:datatype xsd:boolean ;
            sh:description "Whether a librarian or information specialist was consulted" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:librarian_consulted ],
        [ sh:datatype xsd:string ;
            sh:description "Additional quality control notes" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 11 ;
            sh:path revaise:base_qc_notes ] ;
    sh:targetClass revaise:ScopingQualityControl .

revaise:ScopingStatistics a sh:NodeShape ;
    rdfs:comment "Summary statistics for scoping." ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:date ;
            sh:description "Date the stage completed" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:base_completed_date ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for stage statistics" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:base_stats_id ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of exploratory searches conducted" ;
            sh:maxCount 1 ;
            sh:minInclusive 0 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:exploratory_searches_count ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of stakeholder input records documented" ;
            sh:maxCount 1 ;
            sh:minInclusive 0 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:stakeholder_inputs_count ],
        [ sh:class revaise:ParticipantWorkload ;
            sh:description "Workload distribution among participants" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 12 ;
            sh:path revaise:base_participant_workloads ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of scoping decisions documented" ;
            sh:maxCount 1 ;
            sh:minInclusive 0 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:scoping_decisions_count ],
        [ sh:datatype xsd:float ;
            sh:description "Total hours spent on this stage" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 11 ;
            sh:path revaise:base_total_hours ],
        [ sh:datatype xsd:float ;
            sh:description "Proportion of items completed" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 10 ;
            sh:path revaise:base_completion_rate ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of items completed" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 9 ;
            sh:path revaise:base_items_completed ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of records found during exploratory searches" ;
            sh:maxCount 1 ;
            sh:minInclusive 0 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:exploratory_records_found ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of candidate questions considered" ;
            sh:maxCount 1 ;
            sh:minInclusive 0 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:candidate_questions_count ],
        [ sh:datatype xsd:string ;
            sh:description "Additional notes about stage statistics" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 13 ;
            sh:path revaise:base_stats_notes ],
        [ sh:datatype xsd:integer ;
            sh:description "Total number of items to process in this stage" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path revaise:base_total_items ],
        [ sh:datatype xsd:date ;
            sh:description "Date the stage started" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:base_started_date ] ;
    sh:targetClass revaise:ScopingStatistics .

revaise:ScreeningConflictResolution a sh:NodeShape ;
    rdfs:comment "Resolution of conflicts between reviewer decisions" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:description "When the conflict was resolved" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:screening_resolution_timestamp ],
        [ sh:datatype xsd:string ;
            sh:description "IDs of the conflicting decisions" ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:conflicting_decisions ],
        [ sh:description "Final decision after conflict resolution" ;
            sh:in ( "INCLUDE" "EXCLUDE" "UNCERTAIN" "DUPLICATE" "CANNOT_ACCESS" "WRONG_LANGUAGE" "PROTOCOL_ONLY" "RETRACTED" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:order 4 ;
            sh:path revaise:screening_final_decision ],
        [ sh:datatype xsd:string ;
            sh:description "ID of the record with conflicting decisions" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:conflict_record_id ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for the resolution" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:screening_resolution_id ],
        [ sh:datatype xsd:string ;
            sh:description "ID of the person/process that resolved the conflict" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:resolver_id ],
        [ sh:datatype xsd:string ;
            sh:description "Notes about the resolution process" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:screening_resolution_notes ],
        [ sh:description "Method used to resolve the conflict" ;
            sh:in ( "CONSENSUS" "THIRD_REVIEWER" "MAJORITY_VOTE" "SENIOR_REVIEWER" "TEAM_MEETING" "INCLUDE_BY_DEFAULT" "EXCLUDE_BY_DEFAULT" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:order 3 ;
            sh:path revaise:screening_resolution_method ] ;
    sh:targetClass revaise:ScreeningConflictResolution .

revaise:ScreeningCriteria a sh:NodeShape ;
    rdfs:comment "Inclusion and exclusion criteria for screening" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:class revaise:DateRange ;
            sh:description "Acceptable publication date range" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 10 ;
            sh:path revaise:date_range_criteria ],
        [ sh:datatype xsd:string ;
            sh:description "Acceptable study designs" ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:study_design_criteria ],
        [ sh:datatype xsd:string ;
            sh:description "Criteria related to outcomes" ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:outcome_criteria ],
        [ sh:datatype xsd:string ;
            sh:description "List of inclusion criteria" ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:inclusion_criteria ],
        [ sh:datatype xsd:string ;
            sh:description "List of exclusion criteria" ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:exclusion_criteria ],
        [ sh:description "Acceptable publication types" ;
            sh:in ( "JOURNAL_ARTICLE" "CONFERENCE_PAPER" "BOOK" "BOOK_CHAPTER" "DISSERTATION" "THESIS" "TECHNICAL_REPORT" "PREPRINT" "WORKING_PAPER" "SYSTEMATIC_REVIEW" "META_ANALYSIS" "CLINICAL_TRIAL" "CASE_REPORT" "EDITORIAL" "LETTER" "COMMENT" "NEWS" "GREY_LITERATURE" "PATENT" "DATASET" "SOFTWARE" "PROTOCOL" "ABSTRACT_ONLY" "POSTER" ) ;
            sh:order 8 ;
            sh:path revaise:publication_type_criteria ],
        [ sh:datatype xsd:string ;
            sh:description "Criteria related to interventions" ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:intervention_criteria ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for the criteria set" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:criteria_id ],
        [ sh:datatype xsd:string ;
            sh:description "Criteria related to comparators" ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:comparator_criteria ],
        [ sh:datatype xsd:string ;
            sh:description "Criteria related to study population" ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:population_criteria ],
        [ sh:datatype xsd:boolean ;
            sh:description "Whether to include only primary sources" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 13 ;
            sh:path revaise:primary_sources_only ],
        [ sh:datatype xsd:boolean ;
            sh:description "Whether to exclude systematic reviews" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 12 ;
            sh:path revaise:exclude_systematic_reviews ],
        [ sh:datatype xsd:string ;
            sh:description "Additional notes about the criteria" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 14 ;
            sh:path revaise:criteria_notes ],
        [ sh:datatype xsd:string ;
            sh:description "Geographic restrictions" ;
            sh:nodeKind sh:Literal ;
            sh:order 11 ;
            sh:path revaise:geographic_criteria ],
        [ sh:datatype xsd:string ;
            sh:description "Acceptable languages" ;
            sh:nodeKind sh:Literal ;
            sh:order 9 ;
            sh:path revaise:language_criteria ] ;
    sh:targetClass revaise:ScreeningCriteria .

revaise:ScreeningDecision a sh:NodeShape ;
    rdfs:comment "Individual screening decision by a reviewer" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:integer ;
            sh:description "Time spent on this decision in seconds" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:time_spent_seconds ],
        [ sh:datatype xsd:dateTime ;
            sh:description "When the decision was made" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:decision_timestamp ],
        [ sh:datatype xsd:string ;
            sh:description "ID of the reviewer making the decision" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:decision_reviewer_id ],
        [ sh:datatype xsd:float ;
            sh:description "Confidence in inclusion decision (0-1)" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:inclusion_confidence ],
        [ sh:description "The screening decision" ;
            sh:in ( "INCLUDE" "EXCLUDE" "UNCERTAIN" "DUPLICATE" "CANNOT_ACCESS" "WRONG_LANGUAGE" "PROTOCOL_ONLY" "RETRACTED" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:order 3 ;
            sh:path revaise:decision ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for the decision" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:decision_id ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for the literature record" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:record_id ],
        [ sh:datatype xsd:float ;
            sh:description "AI confidence in its suggestion (0-1)" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 10 ;
            sh:path revaise:ai_confidence_score ],
        [ sh:datatype xsd:string ;
            sh:description "Reasons for exclusion (if excluded)" ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:exclusion_reasons ],
        [ sh:datatype xsd:string ;
            sh:description "Additional notes about the decision" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path revaise:decision_notes ],
        [ sh:description "Decision suggested by AI (if used)" ;
            sh:in ( "INCLUDE" "EXCLUDE" "UNCERTAIN" "DUPLICATE" "CANNOT_ACCESS" "WRONG_LANGUAGE" "PROTOCOL_ONLY" "RETRACTED" ) ;
            sh:maxCount 1 ;
            sh:order 9 ;
            sh:path revaise:ai_suggested_decision ] ;
    sh:targetClass revaise:ScreeningDecision .

revaise:ScreeningProtocol a sh:NodeShape ;
    rdfs:comment "Protocol defining the screening process" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:integer ;
            sh:description "Minimum number of reviewers per record" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:minimum_reviewers_per_record ],
        [ sh:class revaise:StageTrainingInfo ;
            sh:description "Training provided for this stage" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 16 ;
            sh:path revaise:base_protocol_training ],
        [ sh:description "Order in which records are screened" ;
            sh:in ( "RANDOM" "CHRONOLOGICAL" "REVERSE_CHRONOLOGICAL" "ALPHABETICAL" "RELEVANCE_RANKED" "DATABASE_ORDER" ) ;
            sh:maxCount 1 ;
            sh:order 6 ;
            sh:path revaise:screening_order ],
        [ sh:datatype xsd:string ;
            sh:description "Additional notes about the protocol" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 15 ;
            sh:path revaise:base_protocol_notes ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for this stage protocol" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path revaise:base_protocol_id ],
        [ sh:class revaise:ExternalTool ;
            sh:description "Tools used in this stage" ;
            sh:nodeKind sh:IRI ;
            sh:order 12 ;
            sh:path revaise:base_protocol_tools ],
        [ sh:description "Default strategy for resolving conflicts" ;
            sh:in ( "CONSENSUS" "THIRD_REVIEWER" "MAJORITY_VOTE" "SENIOR_REVIEWER" "TEAM_MEETING" "INCLUDE_BY_DEFAULT" "EXCLUDE_BY_DEFAULT" ) ;
            sh:maxCount 1 ;
            sh:order 5 ;
            sh:path revaise:conflict_resolution_strategy ],
        [ sh:datatype xsd:string ;
            sh:description "Version of the protocol" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 9 ;
            sh:path revaise:base_protocol_version ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of records per batch" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:screening_batch_size ],
        [ sh:datatype xsd:float ;
            sh:description "Required agreement level in pilot (0-1)" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:pilot_agreement_threshold ],
        [ sh:datatype xsd:boolean ;
            sh:description "Whether consensus is required" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:require_consensus ],
        [ sh:datatype xsd:boolean ;
            sh:description "Whether screening is blind to other reviewers" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:blind_screening ],
        [ sh:class revaise:ExternalTool ;
            sh:description "Software packages used in this stage" ;
            sh:nodeKind sh:IRI ;
            sh:order 13 ;
            sh:path revaise:base_protocol_software ],
        [ sh:datatype xsd:date ;
            sh:description "Date the protocol was finalized" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 10 ;
            sh:path revaise:base_protocol_date ],
        [ sh:datatype xsd:string ;
            sh:description "Detailed description of the protocol" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 11 ;
            sh:path revaise:base_protocol_description ],
        [ sh:datatype xsd:string ;
            sh:description "Deviations from the planned protocol" ;
            sh:nodeKind sh:Literal ;
            sh:order 14 ;
            sh:path revaise:base_protocol_deviations ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of records for pilot screening" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:pilot_screening_size ] ;
    sh:targetClass revaise:ScreeningProtocol .

revaise:ScreeningRound a sh:NodeShape ;
    rdfs:comment "A specific round of screening (e.g., title/abstract or full-text)" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:description "When this round completed" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 10 ;
            sh:path revaise:round_completed_at ],
        [ sh:class revaise:Participant ;
            sh:description "Reviewers involved in this round" ;
            sh:minCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 11 ;
            sh:path revaise:reviewers ],
        [ sh:datatype xsd:string ;
            sh:description "Human-readable label for the round" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:round_label ],
        [ sh:datatype xsd:dateTime ;
            sh:description "When this round started" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 9 ;
            sh:path revaise:round_started_at ],
        [ sh:class revaise:RoundStatistics ;
            sh:description "Statistics for this screening round" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 14 ;
            sh:path revaise:round_statistics ],
        [ sh:class revaise:ScreeningConflictResolution ;
            sh:description "Resolutions of conflicts between reviewers" ;
            sh:nodeKind sh:IRI ;
            sh:order 6 ;
            sh:path revaise:conflict_resolutions ],
        [ sh:datatype xsd:string ;
            sh:description "IDs of records excluded in this round" ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:excluded_record_ids ],
        [ sh:class revaise:ScreeningDecision ;
            sh:description "Individual screening decisions made" ;
            sh:nodeKind sh:IRI ;
            sh:order 5 ;
            sh:path revaise:screening_decisions ],
        [ sh:class revaise:AIAssistance ;
            sh:description "AI assistance used in this round" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 13 ;
            sh:path revaise:ai_assistance ],
        [ sh:datatype xsd:string ;
            sh:description "IDs of records included/passed to next round" ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path revaise:included_record_ids ],
        [ sh:datatype xsd:string ;
            sh:description "Additional notes about this round" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 15 ;
            sh:path revaise:round_notes ],
        [ sh:datatype xsd:integer ;
            sh:description "Sequential number of the round" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:round_number ],
        [ sh:description "Type of screening round" ;
            sh:in ( "TITLE_ABSTRACT" "FULL_TEXT" "TITLE_ONLY" "ABSTRACT_ONLY" "SYSTEMATIC_REVIEW_CHECK" "DUPLICATE_CHECK" "PILOT" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:order 1 ;
            sh:path revaise:round_type ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for the screening round" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:round_id ],
        [ sh:class revaise:LiteratureRecordCollection ;
            sh:description "Records to be screened in this round" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 4 ;
            sh:path revaise:input_records ],
        [ sh:class revaise:ExternalTool ;
            sh:description "Tools used for screening in this round" ;
            sh:nodeKind sh:IRI ;
            sh:order 12 ;
            sh:path revaise:screening_tools ] ;
    sh:targetClass revaise:ScreeningRound .

revaise:ScreeningStatistics a sh:NodeShape ;
    rdfs:comment "Overall statistics for the screening stage" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:float ;
            sh:description "Total reviewer hours" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path revaise:total_reviewer_hours ],
        [ sh:datatype xsd:float ;
            sh:description "Total hours spent on this stage" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 16 ;
            sh:path revaise:base_total_hours ],
        [ sh:datatype xsd:date ;
            sh:description "Date the stage started" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 11 ;
            sh:path revaise:base_started_date ],
        [ sh:datatype xsd:integer ;
            sh:description "Final number of included records" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:final_included_count ],
        [ sh:datatype xsd:float ;
            sh:description "Total time spent in hours" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:screening_total_time_hours ],
        [ sh:datatype xsd:integer ;
            sh:description "Records excluded at full-text" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:fulltext_excluded ],
        [ sh:datatype xsd:integer ;
            sh:description "Initial number of records" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:initial_records_count ],
        [ sh:datatype xsd:float ;
            sh:description "Estimated cost of screening" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 9 ;
            sh:path revaise:cost_estimate ],
        [ sh:datatype xsd:integer ;
            sh:description "Total number of items to process in this stage" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 13 ;
            sh:path revaise:base_total_items ],
        [ sh:datatype xsd:float ;
            sh:description "Overall inclusion rate (0-1)" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:overall_inclusion_rate ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of items completed" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 14 ;
            sh:path revaise:base_items_completed ],
        [ sh:datatype xsd:integer ;
            sh:description "Records excluded at title/abstract" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:title_abstract_excluded ],
        [ sh:datatype xsd:float ;
            sh:description "Proportion of items completed" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 15 ;
            sh:path revaise:base_completion_rate ],
        [ sh:datatype xsd:float ;
            sh:description "Overall exclusion rate (0-1)" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:overall_exclusion_rate ],
        [ sh:datatype xsd:integer ;
            sh:description "Records after deduplication" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:post_dedup_count ],
        [ sh:datatype xsd:date ;
            sh:description "Date the stage completed" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 12 ;
            sh:path revaise:base_completed_date ],
        [ sh:datatype xsd:string ;
            sh:description "Additional notes about stage statistics" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 18 ;
            sh:path revaise:base_stats_notes ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for stage statistics" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 10 ;
            sh:path revaise:base_stats_id ],
        [ sh:class revaise:ParticipantWorkload ;
            sh:description "Workload distribution among participants" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 17 ;
            sh:path revaise:base_participant_workloads ] ;
    sh:targetClass revaise:ScreeningStatistics .

revaise:SearchProtocol a sh:NodeShape ;
    rdfs:comment "Protocol defining the search strategy and approach" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:class revaise:StageTrainingInfo ;
            sh:description "Training provided for this stage" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 15 ;
            sh:path revaise:base_protocol_training ],
        [ sh:class revaise:ExternalTool ;
            sh:description "Software packages used in this stage" ;
            sh:nodeKind sh:IRI ;
            sh:order 12 ;
            sh:path revaise:base_protocol_software ],
        [ sh:datatype xsd:string ;
            sh:description "Publication type restrictions (e.g., RCTs only)" ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:publication_type_restrictions ],
        [ sh:datatype xsd:string ;
            sh:description "Approach for searching grey literature" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:grey_literature_approach ],
        [ sh:datatype xsd:string ;
            sh:description "Deviations from the planned protocol" ;
            sh:nodeKind sh:Literal ;
            sh:order 13 ;
            sh:path revaise:base_protocol_deviations ],
        [ sh:datatype xsd:boolean ;
            sh:description "Whether the search strategy was peer-reviewed (PRESS)" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:peer_review_search_strategy ],
        [ sh:datatype xsd:string ;
            sh:description "Language restrictions applied to searches" ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:language_restrictions ],
        [ sh:datatype xsd:string ;
            sh:description "Additional notes about the protocol" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 14 ;
            sh:path revaise:base_protocol_notes ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for this stage protocol" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:base_protocol_id ],
        [ sh:datatype xsd:string ;
            sh:description "Detailed description of the search strategy" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:search_strategy_description ],
        [ sh:class revaise:ExternalTool ;
            sh:description "Tools used in this stage" ;
            sh:nodeKind sh:IRI ;
            sh:order 11 ;
            sh:path revaise:base_protocol_tools ],
        [ sh:datatype xsd:string ;
            sh:description "Date range restrictions for searches" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:date_restrictions ],
        [ sh:datatype xsd:date ;
            sh:description "Date the protocol was finalized" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 9 ;
            sh:path revaise:base_protocol_date ],
        [ sh:datatype xsd:string ;
            sh:description "Detailed description of the protocol" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 10 ;
            sh:path revaise:base_protocol_description ],
        [ sh:datatype xsd:string ;
            sh:description "Limits applied to searches (e.g., human studies only)" ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:search_limits ],
        [ sh:datatype xsd:string ;
            sh:description "Version of the protocol" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path revaise:base_protocol_version ] ;
    sh:targetClass revaise:SearchProtocol .

revaise:SearchQualityControl a sh:NodeShape ;
    rdfs:comment "Quality control measures for the search process" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:class revaise:AgreementMetrics ;
            sh:description "Inter-rater agreement metrics" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 7 ;
            sh:path revaise:base_agreement_metrics ],
        [ sh:datatype xsd:string ;
            sh:description "Type of quality control (screening, extraction, synthesis, etc.)" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:base_qc_type ],
        [ sh:datatype xsd:string ;
            sh:description "Schedule for updating searches" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:search_update_schedule ],
        [ sh:datatype xsd:boolean ;
            sh:description "Whether calibration exercises were performed" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 10 ;
            sh:path revaise:base_calibration_performed ],
        [ sh:datatype xsd:string ;
            sh:description "Additional quality control notes" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 11 ;
            sh:path revaise:base_qc_notes ],
        [ sh:datatype xsd:boolean ;
            sh:description "Whether search reproducibility was verified" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:search_reproducibility_check ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for quality control instance" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:base_qc_id ],
        [ sh:datatype xsd:string ;
            sh:description "Assessment of search completeness" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:search_completeness_assessment ],
        [ sh:datatype xsd:string ;
            sh:description "How the search strategy was validated" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:search_strategy_validation ],
        [ sh:class revaise:ConflictResolution ;
            sh:description "Record of resolved discrepancies" ;
            sh:nodeKind sh:IRI ;
            sh:order 8 ;
            sh:path revaise:base_discrepancy_resolutions ],
        [ sh:datatype xsd:float ;
            sh:description "Proportion of items spot-checked" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 9 ;
            sh:path revaise:base_spot_check_rate ],
        [ sh:datatype xsd:float ;
            sh:description "Proportion of items double-checked" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:base_double_checking_rate ] ;
    sh:targetClass revaise:SearchQualityControl .

revaise:SearchQuery a sh:NodeShape ;
    rdfs:comment "Search query executed against a database" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "Additional notes about the query or its execution" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:query_notes ],
        [ sh:datatype xsd:dateTime ;
            sh:description "Date and time when the query was executed" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:query_date ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for the search query" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:query_id ],
        [ sh:datatype xsd:string ;
            sh:description "The actual search query string or expression" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:query_string ],
        [ sh:datatype xsd:string ;
            sh:description "Filters applied (e.g., date range, language, study type)" ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:query_filters ],
        [ sh:datatype xsd:string ;
            sh:description "Reference to the LiteratureRecordCollection containing results" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:result_collection_id ],
        [ sh:datatype xsd:string ;
            sh:description "Name of the database where query was executed" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:database_name ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of results returned by the query" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:results_count ] ;
    sh:targetClass revaise:SearchQuery .

revaise:SearchStatistics a sh:NodeShape ;
    rdfs:comment "Statistics about the search process" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:integer ;
            sh:description "Number of items completed" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 10 ;
            sh:path revaise:base_items_completed ],
        [ sh:datatype xsd:float ;
            sh:description "Total hours spent on this stage" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 12 ;
            sh:path revaise:base_total_hours ],
        [ sh:datatype xsd:integer ;
            sh:description "Total number of search queries executed" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:total_queries_executed ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for stage statistics" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:base_stats_id ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of grey literature sources searched" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:grey_literature_sources ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of unique records after deduplication" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:unique_records_after_dedup ],
        [ sh:datatype xsd:float ;
            sh:description "Proportion of items completed" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 11 ;
            sh:path revaise:base_completion_rate ],
        [ sh:datatype xsd:integer ;
            sh:description "Total number of records retrieved from all searches" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 9 ;
            sh:path revaise:base_total_items ],
        [ sh:datatype xsd:string ;
            sh:description "Additional notes about stage statistics" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 14 ;
            sh:path revaise:base_stats_notes ],
        [ sh:datatype xsd:date ;
            sh:description "Date the stage completed" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path revaise:base_completed_date ],
        [ sh:datatype xsd:string ;
            sh:description "Supplementary search methods used (e.g., citation searching, hand searching)" ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:supplementary_search_methods ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of databases searched" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:total_databases_searched ],
        [ sh:datatype xsd:integer ;
            sh:description "Total number of records retrieved before deduplication" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:total_records_retrieved ],
        [ sh:class revaise:ParticipantWorkload ;
            sh:description "Workload distribution among participants" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 13 ;
            sh:path revaise:base_participant_workloads ],
        [ sh:datatype xsd:date ;
            sh:description "Date the stage started" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:base_started_date ] ;
    sh:targetClass revaise:SearchStatistics .

revaise:SensitivityAnalysis a sh:NodeShape ;
    rdfs:comment "Sensitivity analysis to test robustness of results" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "Unique identifier for this sensitivity analysis" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:sensitivity_id ],
        [ sh:datatype xsd:string ;
            sh:description "Notes about the sensitivity analysis" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 10 ;
            sh:path revaise:sensitivity_notes ],
        [ sh:datatype xsd:string ;
            sh:description "Studies included in this analysis" ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:studies_included ],
        [ sh:datatype xsd:string ;
            sh:description "Studies excluded in this analysis" ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:studies_excluded ],
        [ sh:datatype xsd:float ;
            sh:description "Original effect size" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:original_effect ],
        [ sh:datatype xsd:float ;
            sh:description "Effect size after sensitivity analysis" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:sensitivity_effect ],
        [ sh:datatype xsd:float ;
            sh:description "Percentage change in effect" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path revaise:effect_change_percentage ],
        [ sh:datatype xsd:string ;
            sh:description "Description of what was tested" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:sensitivity_description ],
        [ sh:description "Type of sensitivity analysis" ;
            sh:in ( "EXCLUDE_HIGH_RISK" "EXCLUDE_LOW_QUALITY" "EXCLUDE_OUTLIERS" "EXCLUDE_SMALL_STUDIES" "EXCLUDE_INDUSTRY_FUNDED" "ALTERNATIVE_MODEL" "ALTERNATIVE_MEASURE" "ONE_STUDY_REMOVED" "PUBLICATION_YEAR" "STUDY_QUALITY" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:order 2 ;
            sh:path revaise:sensitivity_type ],
        [ sh:datatype xsd:string ;
            sh:description "ID of parent analysis" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:parent_analysis_id ],
        [ sh:datatype xsd:boolean ;
            sh:description "Whether conclusions changed" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 9 ;
            sh:path revaise:conclusion_changed ] ;
    sh:targetClass revaise:SensitivityAnalysis .

revaise:SessionEnvironment a sh:NodeShape ;
    rdfs:comment "Environment details for a work session" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "Location or setting of work" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:location ],
        [ sh:datatype xsd:string ;
            sh:description "Platform or system used" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:platform ],
        [ sh:datatype xsd:string ;
            sh:description "Browser used if applicable" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:browser ],
        [ sh:datatype xsd:string ;
            sh:description "Tools or software used during session" ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:tools_used ],
        [ sh:datatype xsd:string ;
            sh:description "Network connection quality" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:connection_quality ] ;
    sh:targetClass revaise:SessionEnvironment .

revaise:SignallingQuestionAssessment a sh:NodeShape ;
    rdfs:comment "Assessment of a risk-of-bias signalling question." ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "Supporting evidence for the signalling-question response" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:signalling_question_support ],
        [ sh:datatype xsd:string ;
            sh:description "Text of the signalling question" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:signalling_question_text ],
        [ sh:datatype xsd:string ;
            sh:description "Identifier for the signalling question" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:signalling_question_id ],
        [ sh:datatype xsd:string ;
            sh:description "Rationale for the signalling-question response" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:signalling_question_rationale ],
        [ sh:description "Response to the signalling question" ;
            sh:in ( "YES" "PROBABLY_YES" "PROBABLY_NO" "NO" "NO_INFORMATION" "NOT_APPLICABLE" ) ;
            sh:maxCount 1 ;
            sh:order 2 ;
            sh:path revaise:signalling_question_response ] ;
    sh:targetClass revaise:SignallingQuestionAssessment .

revaise:StageExecution a sh:NodeShape ;
    rdfs:comment "Base class for executing a specific stage of the review. Stages should extend this with their specific needs." ;
    sh:closed true ;
    sh:ignoredProperties ( revaise:overall_statistics revaise:extracted_studies revaise:extraction_forms revaise:subgroup_analyses revaise:synthesis_protocol revaise:reporting_approvals revaise:scoping_protocol revaise:synthesis_methods revaise:search_protocol revaise:sensitivity_analyses revaise:reporting_protocol revaise:rob_assessments revaise:rob_quality_control revaise:scoping_question_candidates revaise:registration_statistics revaise:screening_criteria revaise:scoping_decisions revaise:exploratory_searches revaise:search_queries revaise:narrative_synthesis revaise:current_registration_version rdf:type revaise:search_quality_control revaise:feasibility_assessment revaise:synthesis_statistics revaise:publication_bias_assessment revaise:scoping_outputs revaise:evidence_grading revaise:synthesis_quality_control revaise:publication_records revaise:registration_protocol revaise:screening_protocol revaise:synthesis_visualizations revaise:reporting_quality_control revaise:extraction_statistics revaise:search_statistics revaise:databases revaise:scoping_quality_control revaise:registrations revaise:rob_statistics revaise:screening_rounds revaise:meta_analyses revaise:stakeholder_inputs revaise:result_collections revaise:flow_diagram revaise:rob_protocol revaise:reporting_standards revaise:deduplication_process revaise:ai_assistance_config revaise:registration_policy revaise:reporting_checklists revaise:report_documents revaise:extraction_quality_control revaise:reporting_deviations revaise:scoping_statistics revaise:extraction_protocol revaise:reporting_statistics revaise:registration_quality_control ) ;
    sh:property [ sh:description "Completion status of this stage execution" ;
            sh:in ( "NOT_STARTED" "IN_PROGRESS" "COMPLETE" "SKIPPED" "NOT_APPLICABLE" ) ;
            sh:maxCount 1 ;
            sh:order 4 ;
            sh:path revaise:stage_status ],
        [ sh:class <https://open-and-sustainable.github.io/revaise-model/schema/objects/stage_output/StageOutput> ;
            sh:description "Input artifacts for this stage" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 7 ;
            sh:path revaise:inputs ],
        [ sh:description "Type of stage being executed" ;
            sh:in ( "scoping" "registration" "search" "deduplication" "screening_title_abstract" "screening_fulltext" "data_extraction" "risk_of_bias" "synthesis_meta_analysis" "synthesis_narrative" "reporting" "reporting_prisma" "reproducibility_pack" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:order 1 ;
            sh:path revaise:stage_type ],
        [ sh:datatype xsd:string ;
            sh:description "Concrete stage class this execution represents (e.g., SearchStage, ReportingStage). Auto-populated; enables deserialization of polymorphic stages to typed RDF." ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:stage_category ],
        [ sh:datatype xsd:string ;
            sh:description "Description of what was done in this stage" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:stage_description ],
        [ sh:class <https://open-and-sustainable.github.io/revaise-model/schema/objects/stage_output/StageOutput> ;
            sh:description "Output artifacts produced by this stage" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 8 ;
            sh:path revaise:outputs ],
        [ sh:datatype xsd:dateTime ;
            sh:description "When this stage ended" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:ended_at ],
        [ sh:datatype xsd:dateTime ;
            sh:description "When this stage started" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:started_at ],
        [ sh:datatype xsd:float ;
            sh:description "Estimated cost of this stage" ;
            sh:maxCount 1 ;
            sh:minInclusive 0 ;
            sh:nodeKind sh:Literal ;
            sh:order 9 ;
            sh:path revaise:cost ],
        [ sh:datatype xsd:string ;
            sh:description "Human-readable label for this stage execution" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:stage_label ] ;
    sh:targetClass revaise:StageExecution .

revaise:StakeholderInput a sh:NodeShape ;
    rdfs:comment "Input that informed scoping decisions." ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "Role of the stakeholder providing input" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:stakeholder_role ],
        [ sh:description "Type of stakeholder input" ;
            sh:in ( "PATIENT_PUBLIC" "CLINICAL" "POLICY" "METHODS" "LIBRARY" "DOMAIN_EXPERT" "OTHER" ) ;
            sh:maxCount 1 ;
            sh:order 2 ;
            sh:path revaise:stakeholder_input_type ],
        [ sh:datatype xsd:boolean ;
            sh:description "Whether the input influenced the review scope" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:stakeholder_input_used ],
        [ sh:datatype xsd:string ;
            sh:description "Identifier for stakeholder input" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:stakeholder_input_id ],
        [ sh:datatype xsd:string ;
            sh:description "Source or record of the input" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:stakeholder_input_source ],
        [ sh:datatype xsd:string ;
            sh:description "Summary of the input received" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:stakeholder_input_summary ],
        [ sh:datatype xsd:dateTime ;
            sh:description "Date and time when input was received" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:stakeholder_input_date ] ;
    sh:targetClass revaise:StakeholderInput .

revaise:StudyCharacteristics a sh:NodeShape ;
    rdfs:comment "Key characteristics of a study" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:description "Publication status of the study" ;
            sh:in ( "PUBLISHED" "PREPRINT" "GREY_LITERATURE" "UNPUBLISHED" "ABSTRACT_ONLY" "PROTOCOL_ONLY" "RETRACTED" ) ;
            sh:maxCount 1 ;
            sh:order 11 ;
            sh:path revaise:publication_status ],
        [ sh:datatype xsd:string ;
            sh:description "Clinical trial registration ID" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 10 ;
            sh:path revaise:study_registration_id ],
        [ sh:datatype xsd:string ;
            sh:description "Duration of the study" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:study_duration ],
        [ sh:datatype xsd:string ;
            sh:description "Countries where study was conducted" ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:study_country ],
        [ sh:datatype xsd:string ;
            sh:description "Outcome measures used" ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path revaise:outcome_measures ],
        [ sh:datatype xsd:string ;
            sh:description "Details of the comparator" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:comparator_details ],
        [ sh:datatype xsd:string ;
            sh:description "Details of the intervention" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:intervention_details ],
        [ sh:datatype xsd:string ;
            sh:description "Setting where study was conducted" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:study_setting ],
        [ sh:datatype xsd:integer ;
            sh:description "Total sample size" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:study_sample_size ],
        [ sh:description "Design of the study" ;
            sh:in ( "RCT" "CLUSTER_RCT" "NON_RANDOMIZED" "COHORT" "CASE_CONTROL" "CROSS_SECTIONAL" "CASE_SERIES" "CASE_REPORT" "QUALITATIVE" "MIXED_METHODS" "SYSTEMATIC_REVIEW" "META_ANALYSIS" "SCOPING_REVIEW" "NARRATIVE_REVIEW" "OTHER" ) ;
            sh:maxCount 1 ;
            sh:order 0 ;
            sh:path revaise:study_design ],
        [ sh:datatype xsd:string ;
            sh:description "Description of participants" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:participant_characteristics ],
        [ sh:datatype xsd:string ;
            sh:description "Source of study funding" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 9 ;
            sh:path revaise:funding_source ] ;
    sh:targetClass revaise:StudyCharacteristics .

revaise:StudyResult a sh:NodeShape ;
    rdfs:comment "A single result reported by a study for a specific outcome, with full numeric detail." ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "Name of the outcome this result refers to" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:result_outcome ],
        [ sh:datatype xsd:integer ;
            sh:description "Sample size in the comparator or unexposed group" ;
            sh:maxCount 1 ;
            sh:minInclusive 0 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:result_comparator_n ],
        [ sh:datatype xsd:integer ;
            sh:description "Total sample size contributing to this result" ;
            sh:maxCount 1 ;
            sh:minInclusive 0 ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path revaise:result_total_n ],
        [ sh:datatype xsd:float ;
            sh:description "Reported p-value for this result" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:result_p_value ],
        [ sh:datatype xsd:string ;
            sh:description "Additional notes on this result" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 9 ;
            sh:path revaise:result_notes ],
        [ sh:datatype xsd:integer ;
            sh:description "Sample size in the intervention or exposed group" ;
            sh:maxCount 1 ;
            sh:minInclusive 0 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:result_intervention_n ],
        [ sh:datatype xsd:float ;
            sh:description "Upper bound of the confidence interval" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:result_ci_upper ],
        [ sh:datatype xsd:float ;
            sh:description "Lower bound of the confidence interval" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:result_ci_lower ],
        [ sh:datatype xsd:string ;
            sh:description "Effect measure or statistic reported (e.g., odds ratio, risk ratio, mean difference)" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:result_measure ],
        [ sh:datatype xsd:float ;
            sh:description "Point estimate of the effect" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:result_effect_estimate ] ;
    sh:targetClass revaise:StudyResult .

revaise:SubgroupAnalysis a sh:NodeShape ;
    rdfs:comment "Subgroup analysis within meta-analysis" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "ID of parent meta-analysis" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:parent_analysis_id ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for this subgroup analysis" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:subgroup_id ],
        [ sh:datatype xsd:float ;
            sh:description "P-value for test of subgroup differences" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:interaction_test_p_value ],
        [ sh:datatype xsd:string ;
            sh:description "Categories within the subgroup variable" ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:subgroup_categories ],
        [ sh:class revaise:SubgroupResult ;
            sh:description "Results for each subgroup" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 4 ;
            sh:path revaise:subgroup_results ],
        [ sh:datatype xsd:string ;
            sh:description "Notes about the subgroup analysis" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:subgroup_notes ],
        [ sh:datatype xsd:string ;
            sh:description "Variable used for subgrouping" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:subgroup_variable ],
        [ sh:datatype xsd:float ;
            sh:description "Heterogeneity between subgroups" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:heterogeneity_between_groups ] ;
    sh:targetClass revaise:SubgroupAnalysis .

revaise:SubgroupResult a sh:NodeShape ;
    rdfs:comment "Result for a specific subgroup" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:float ;
            sh:description "Effect size for this subgroup" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:effect_size ],
        [ sh:datatype xsd:float ;
            sh:description "P-value for this subgroup" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:p_value ],
        [ sh:datatype xsd:float ;
            sh:description "Lower CI bound" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:confidence_interval_lower ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of studies in this subgroup" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:n_studies ],
        [ sh:datatype xsd:string ;
            sh:description "Name of the subgroup" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:subgroup_name ],
        [ sh:datatype xsd:float ;
            sh:description "I² for this subgroup" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:i_squared ],
        [ sh:datatype xsd:float ;
            sh:description "Upper CI bound" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:confidence_interval_upper ] ;
    sh:targetClass revaise:SubgroupResult .

revaise:SynthesisMethod a sh:NodeShape ;
    rdfs:comment "Specific method used for synthesis" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "Limitations of this method" ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:method_limitations ],
        [ sh:description "Type of synthesis method" ;
            sh:in ( "PAIRWISE_META_ANALYSIS" "NETWORK_META_ANALYSIS" "INDIVIDUAL_PATIENT_DATA" "CUMULATIVE_META_ANALYSIS" "META_REGRESSION" "BAYESIAN_META_ANALYSIS" "NARRATIVE_SUMMARY" "FRAMEWORK_SYNTHESIS" "TEXTUAL_NARRATIVE" "TABULATION" "GRAPHICAL_DISPLAY" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:order 1 ;
            sh:path revaise:method_type ],
        [ sh:datatype xsd:string ;
            sh:description "Reference for this method" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:method_reference ],
        [ sh:datatype xsd:string ;
            sh:description "Detailed description of the method" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:method_description ],
        [ sh:datatype xsd:string ;
            sh:description "Assumptions made by this method" ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:method_assumptions ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for this method" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:method_id ],
        [ sh:datatype xsd:string ;
            sh:description "Justification for using this method" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:method_justification ],
        [ sh:datatype xsd:string ;
            sh:description "Name of the specific method" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:method_name ] ;
    sh:targetClass revaise:SynthesisMethod .

revaise:SynthesisProtocol a sh:NodeShape ;
    rdfs:comment "Protocol defining synthesis approach and methods" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "Rules for transforming data for synthesis" ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:data_transformation_rules ],
        [ sh:description "Strategy for handling missing data" ;
            sh:in ( "COMPLETE_CASE" "IMPUTATION" "SENSITIVITY_ANALYSIS" "CONTACT_AUTHORS" "WORST_CASE" "BEST_CASE" "LAST_OBSERVATION" ) ;
            sh:maxCount 1 ;
            sh:order 5 ;
            sh:path revaise:missing_data_strategy ],
        [ sh:description "Effect measures to be synthesized" ;
            sh:in ( "MEAN_DIFFERENCE" "STANDARDIZED_MEAN_DIFFERENCE" "ODDS_RATIO" "RISK_RATIO" "RISK_DIFFERENCE" "HAZARD_RATIO" "INCIDENCE_RATE_RATIO" "CORRELATION" "PROPORTION" "PREVALENCE" "DIAGNOSTIC_ODDS_RATIO" "SENSITIVITY_SPECIFICITY" ) ;
            sh:order 2 ;
            sh:path revaise:effect_measures ],
        [ sh:datatype xsd:string ;
            sh:description "Approach to assessing heterogeneity" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:heterogeneity_assessment ],
        [ sh:datatype xsd:date ;
            sh:description "Date the protocol was finalized" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path revaise:base_protocol_date ],
        [ sh:class revaise:StageTrainingInfo ;
            sh:description "Training provided for this stage" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 14 ;
            sh:path revaise:base_protocol_training ],
        [ sh:datatype xsd:string ;
            sh:description "Planned comparisons and contrasts" ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:planned_comparisons ],
        [ sh:datatype xsd:string ;
            sh:description "Deviations from the planned protocol" ;
            sh:nodeKind sh:Literal ;
            sh:order 12 ;
            sh:path revaise:base_protocol_deviations ],
        [ sh:datatype xsd:string ;
            sh:description "Detailed description of the protocol" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 9 ;
            sh:path revaise:base_protocol_description ],
        [ sh:datatype xsd:string ;
            sh:description "Additional notes about the protocol" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 13 ;
            sh:path revaise:base_protocol_notes ],
        [ sh:class revaise:ExternalTool ;
            sh:description "Software packages used in this stage" ;
            sh:nodeKind sh:IRI ;
            sh:order 11 ;
            sh:path revaise:base_protocol_software ],
        [ sh:class revaise:ExternalTool ;
            sh:description "Tools used in this stage" ;
            sh:nodeKind sh:IRI ;
            sh:order 10 ;
            sh:path revaise:base_protocol_tools ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for this stage protocol" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:base_protocol_id ],
        [ sh:description "Overall approach to synthesis (narrative, quantitative, mixed)" ;
            sh:in ( "NARRATIVE" "QUANTITATIVE" "MIXED" "VOTE_COUNTING" "QUALITATIVE" "REALIST" "THEMATIC" ) ;
            sh:minCount 1 ;
            sh:order 0 ;
            sh:path revaise:synthesis_approach ],
        [ sh:datatype xsd:string ;
            sh:description "Version of the protocol" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:base_protocol_version ] ;
    sh:targetClass revaise:SynthesisProtocol .

revaise:SynthesisQualityControl a sh:NodeShape ;
    rdfs:comment "Quality control for synthesis process" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:boolean ;
            sh:description "Whether calibration exercises were performed" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 10 ;
            sh:path revaise:base_calibration_performed ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for quality control instance" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:base_qc_id ],
        [ sh:datatype xsd:string ;
            sh:description "Methods used to verify calculations" ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:calculation_verification ],
        [ sh:datatype xsd:string ;
            sh:description "Type of quality control (screening, extraction, synthesis, etc.)" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:base_qc_type ],
        [ sh:class revaise:ConflictResolution ;
            sh:description "Record of resolved discrepancies" ;
            sh:nodeKind sh:IRI ;
            sh:order 8 ;
            sh:path revaise:base_discrepancy_resolutions ],
        [ sh:datatype xsd:boolean ;
            sh:description "Whether analysis code was reviewed" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:code_review ],
        [ sh:datatype xsd:float ;
            sh:description "Proportion of items double-checked" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:base_double_checking_rate ],
        [ sh:datatype xsd:string ;
            sh:description "Measures taken to ensure transparency" ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:transparency_measures ],
        [ sh:datatype xsd:float ;
            sh:description "Proportion of items spot-checked" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 9 ;
            sh:path revaise:base_spot_check_rate ],
        [ sh:datatype xsd:string ;
            sh:description "Additional quality control notes" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 11 ;
            sh:path revaise:base_qc_notes ],
        [ sh:class revaise:AgreementMetrics ;
            sh:description "Inter-rater agreement metrics" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 7 ;
            sh:path revaise:base_agreement_metrics ],
        [ sh:datatype xsd:boolean ;
            sh:description "Whether external review was conducted" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:external_review ] ;
    sh:targetClass revaise:SynthesisQualityControl .

revaise:SynthesisStatistics a sh:NodeShape ;
    rdfs:comment "Statistics about the synthesis process" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:float ;
            sh:description "Proportion of items completed" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 12 ;
            sh:path revaise:base_completion_rate ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of sensitivity analyses" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:sensitivity_analyses_count ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for stage statistics" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:base_stats_id ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of outcomes analyzed" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:total_outcomes_analyzed ],
        [ sh:datatype xsd:date ;
            sh:description "Date the stage completed" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 9 ;
            sh:path revaise:base_completed_date ],
        [ sh:datatype xsd:float ;
            sh:description "Total hours spent on this stage" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 13 ;
            sh:path revaise:base_total_hours ],
        [ sh:class revaise:ParticipantWorkload ;
            sh:description "Workload distribution among participants" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 14 ;
            sh:path revaise:base_participant_workloads ],
        [ sh:datatype xsd:integer ;
            sh:description "Total participants across all studies" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:total_participants ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of items completed" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 11 ;
            sh:path revaise:base_items_completed ],
        [ sh:datatype xsd:integer ;
            sh:description "Total number of studies synthesized" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:total_studies_synthesized ],
        [ sh:datatype xsd:string ;
            sh:description "Additional notes about stage statistics" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 15 ;
            sh:path revaise:base_stats_notes ],
        [ sh:datatype xsd:integer ;
            sh:description "Total number of studies to synthesize" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 10 ;
            sh:path revaise:base_total_items ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of subgroup analyses" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:subgroup_analyses_count ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of meta-analyses performed" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:meta_analyses_count ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of narrative syntheses performed" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:narrative_syntheses_count ],
        [ sh:datatype xsd:date ;
            sh:description "Date the stage started" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path revaise:base_started_date ] ;
    sh:targetClass revaise:SynthesisStatistics .

revaise:SynthesisTheme a sh:NodeShape ;
    rdfs:comment "Theme identified in narrative synthesis" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "Study IDs supporting this theme" ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:supporting_studies ],
        [ sh:description "Strength of evidence for this theme" ;
            sh:in ( "VERY_STRONG" "STRONG" "MODERATE" "WEAK" "VERY_WEAK" "NO_EVIDENCE" ) ;
            sh:maxCount 1 ;
            sh:order 4 ;
            sh:path revaise:theme_strength ],
        [ sh:datatype xsd:string ;
            sh:description "Description of the theme" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:theme_description ],
        [ sh:datatype xsd:string ;
            sh:description "Additional notes about the theme" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:theme_notes ],
        [ sh:datatype xsd:string ;
            sh:description "Name of the theme" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:theme_name ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for this theme" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:theme_id ] ;
    sh:targetClass revaise:SynthesisTheme .

revaise:ToolParameter a sh:NodeShape ;
    rdfs:comment "Configuration parameter for a tool" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "Unique identifier for the parameter" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:param_id ],
        [ sh:datatype xsd:string ;
            sh:description "Description of what this parameter controls" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:param_description ],
        [ sh:datatype xsd:string ;
            sh:description "Category of parameter (e.g., search, AI, export, filtering)" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:param_category ],
        [ sh:datatype xsd:boolean ;
            sh:description "Whether this parameter is required" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:param_required ],
        [ sh:datatype xsd:string ;
            sh:description "Value of the parameter" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:param_value ],
        [ sh:description "Data type of the parameter" ;
            sh:in ( "STRING" "NUMBER" "BOOLEAN" "DATE" "URL" "FILE_PATH" "JSON" "LIST" "ENUM" ) ;
            sh:maxCount 1 ;
            sh:order 3 ;
            sh:path revaise:param_type ],
        [ sh:datatype xsd:string ;
            sh:description "Name of the parameter" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:param_name ],
        [ sh:datatype xsd:string ;
            sh:description "Default value if not specified" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:param_default ] ;
    sh:targetClass revaise:ToolParameter .

revaise:TrimFillResult a sh:NodeShape ;
    rdfs:comment "Result of trim and fill analysis" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:integer ;
            sh:description "Number of studies filled" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:studies_filled ],
        [ sh:datatype xsd:float ;
            sh:description "Adjusted effect size" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:adjusted_effect ],
        [ sh:datatype xsd:string ;
            sh:description "Direction of adjustment" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:adjustment_direction ],
        [ sh:datatype xsd:float ;
            sh:description "Adjusted upper CI" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:adjusted_ci_upper ],
        [ sh:datatype xsd:float ;
            sh:description "Adjusted lower CI" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:adjusted_ci_lower ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of studies trimmed" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:studies_trimmed ] ;
    sh:targetClass revaise:TrimFillResult .

revaise:ValidationRule a sh:NodeShape ;
    rdfs:comment "Validation rule for a field" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:description "Type of validation rule" ;
            sh:in ( "REQUIRED" "MIN_LENGTH" "MAX_LENGTH" "PATTERN" "MIN_VALUE" "MAX_VALUE" "DATE_RANGE" "EMAIL" "URL" "UNIQUE" "CUSTOM" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:order 0 ;
            sh:path revaise:rule_type ],
        [ sh:description "Severity of validation failure" ;
            sh:in ( "ERROR" "WARNING" "INFO" ) ;
            sh:maxCount 1 ;
            sh:order 3 ;
            sh:path revaise:severity ],
        [ sh:datatype xsd:string ;
            sh:description "Error message when validation fails" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:error_message ],
        [ sh:datatype xsd:string ;
            sh:description "Value or pattern for the rule" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:rule_value ] ;
    sh:targetClass revaise:ValidationRule .

<https://open-and-sustainable.github.io/revaise-model/schema/objects/protocol/Protocol> a sh:NodeShape ;
    rdfs:comment "Scoping and registration details of the review." ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "Primary research question" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path <https://open-and-sustainable.github.io/revaise-model/schema/objects/protocol/research_question> ],
        [ sh:datatype xsd:string ;
            sh:description "Inclusion and exclusion criteria" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path <https://open-and-sustainable.github.io/revaise-model/schema/objects/protocol/eligibility_criteria> ],
        [ sh:class <https://open-and-sustainable.github.io/revaise-model/schema/objects/protocol/Amendment> ;
            sh:description "Amendments to the protocol" ;
            sh:nodeKind sh:IRI ;
            sh:order 7 ;
            sh:path <https://open-and-sustainable.github.io/revaise-model/schema/objects/protocol/amendments> ],
        [ sh:description "URL to the registry entry" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 2 ;
            sh:path <https://open-and-sustainable.github.io/revaise-model/schema/objects/protocol/registration_url> ],
        [ sh:datatype xsd:string ;
            sh:description "Registry where the protocol is recorded" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path <https://open-and-sustainable.github.io/revaise-model/schema/objects/protocol/registry> ],
        [ sh:datatype xsd:string ;
            sh:description "Identifier assigned by the registry" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path <https://open-and-sustainable.github.io/revaise-model/schema/objects/protocol/registration_id> ],
        [ sh:datatype xsd:string ;
            sh:description "Population, Intervention, Comparison, Outcomes, Study design details" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path <https://open-and-sustainable.github.io/revaise-model/schema/objects/protocol/picos> ],
        [ sh:datatype xsd:date ;
            sh:description "Protocol registration date" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path <https://open-and-sustainable.github.io/revaise-model/schema/objects/protocol/protocol_start_date> ] ;
    sh:targetClass <https://open-and-sustainable.github.io/revaise-model/schema/objects/protocol/Protocol> .

<https://open-and-sustainable.github.io/revaise-model/schema/objects/software_env/SoftwareEnv> a sh:NodeShape ;
    rdfs:comment "Software environment configuration." ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:class <https://open-and-sustainable.github.io/revaise-model/schema/objects/stage_output/StageOutputRef> ;
            sh:description "Environment lockfiles" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 4 ;
            sh:path <https://open-and-sustainable.github.io/revaise-model/schema/objects/software_env/lockfiles> ],
        [ sh:class <https://open-and-sustainable.github.io/revaise-model/schema/objects/stage_output/StageOutputRef> ;
            sh:description "Container images used" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 3 ;
            sh:path <https://open-and-sustainable.github.io/revaise-model/schema/objects/software_env/containers> ],
        [ sh:datatype xsd:string ;
            sh:description "Python version" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path <https://open-and-sustainable.github.io/revaise-model/schema/objects/software_env/python_version> ],
        [ sh:datatype xsd:string ;
            sh:description "Operating system description" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path <https://open-and-sustainable.github.io/revaise-model/schema/objects/software_env/os> ],
        [ sh:datatype xsd:string ;
            sh:description "R version" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path <https://open-and-sustainable.github.io/revaise-model/schema/objects/software_env/r_version> ] ;
    sh:targetClass <https://open-and-sustainable.github.io/revaise-model/schema/objects/software_env/SoftwareEnv> .

revaise:Affiliation a sh:NodeShape ;
    rdfs:comment "Institutional affiliation" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "Name of the institution" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:institution_name ],
        [ sh:datatype xsd:string ;
            sh:description "Department or division" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:department ],
        [ sh:datatype xsd:string ;
            sh:description "Country" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:country ],
        [ sh:datatype xsd:string ;
            sh:description "City" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:city ],
        [ sh:datatype xsd:string ;
            sh:description "Research Organization Registry identifier" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:ror_id ;
            sh:pattern "^https://ror.org/0[a-z0-9]{8}$" ],
        [ sh:datatype xsd:string ;
            sh:description "Street address" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:address ] ;
    sh:targetClass revaise:Affiliation .

revaise:ConformanceAssertion a sh:NodeShape ;
    rdfs:comment "Stored result of checking a review or record against a declared protocol, including overall outcome and per-item results." ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:class revaise:ConformanceItemResult ;
            sh:description "Per-item or per-constraint results from the conformance check" ;
            sh:nodeKind sh:IRI ;
            sh:order 8 ;
            sh:path revaise:item_results ],
        [ sh:datatype xsd:string ;
            sh:description "Version of the SHACL shapes used for the check" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:shapes_version ],
        [ sh:datatype xsd:string ;
            sh:description "Version of the tool that performed the conformance check" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:conformance_tool_version ],
        [ sh:datatype xsd:dateTime ;
            sh:description "When the conformance check was performed" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:asserted_at ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for this conformance assertion" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:assertion_id ],
        [ sh:datatype xsd:string ;
            sh:description "Agent or person that performed the conformance check" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:asserted_by ],
        [ sh:description "Overall outcome of the conformance check" ;
            sh:in ( "CONFORMS" "DOES_NOT_CONFORM" "PARTIAL" "NOT_EVALUATED" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:order 7 ;
            sh:path revaise:conformance_result ],
        [ sh:datatype xsd:string ;
            sh:description "Name of the tool that performed the conformance check" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:conformance_tool_name ],
        [ sh:description "URI of the protocol this assertion was checked against" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 1 ;
            sh:path revaise:asserted_protocol ] ;
    sh:targetClass revaise:ConformanceAssertion .

revaise:ExtractedDataPoint a sh:NodeShape ;
    rdfs:comment "Individual data point extracted from a study" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "Notes from the extractor" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:extractor_notes ],
        [ sh:datatype xsd:boolean ;
            sh:description "Whether AI assisted in extraction" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 9 ;
            sh:path revaise:ai_assisted ],
        [ sh:datatype xsd:string ;
            sh:description "ID of the extractor (human or AI)" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path revaise:extractor_id ],
        [ sh:datatype xsd:float ;
            sh:description "AI confidence score if applicable" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 10 ;
            sh:path revaise:ai_confidence ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for this data point" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:datapoint_id ],
        [ sh:datatype xsd:string ;
            sh:description "The extracted value" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:extracted_value ],
        [ sh:datatype xsd:string ;
            sh:description "Direct quote from the source" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:quote ],
        [ sh:datatype xsd:string ;
            sh:description "Unit of measurement if applicable" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:extracted_unit ],
        [ sh:datatype xsd:dateTime ;
            sh:description "When extraction occurred" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:extraction_timestamp ],
        [ sh:description "Confidence in the extraction" ;
            sh:in ( "VERY_HIGH" "HIGH" "MODERATE" "LOW" "VERY_LOW" ) ;
            sh:maxCount 1 ;
            sh:order 3 ;
            sh:path revaise:extraction_confidence ],
        [ sh:datatype xsd:string ;
            sh:description "Page number(s) where data was found" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:page_number ] ;
    sh:targetClass revaise:ExtractedDataPoint .

revaise:FlowDiagram a sh:NodeShape ;
    rdfs:comment "Study selection flow diagram counts and artifact references." ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "Notes about the flow diagram" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path revaise:flow_diagram_notes ],
        [ sh:datatype xsd:string ;
            sh:description "Reporting standard the flow diagram conforms to" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:flow_standard ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of reports assessed for eligibility" ;
            sh:maxCount 1 ;
            sh:minInclusive 0 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:reports_assessed ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of studies included in the review" ;
            sh:maxCount 1 ;
            sh:minInclusive 0 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:total_included ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of reports sought for retrieval" ;
            sh:maxCount 1 ;
            sh:minInclusive 0 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:reports_sought ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of records identified" ;
            sh:maxCount 1 ;
            sh:minInclusive 0 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:records_identified ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of records screened" ;
            sh:maxCount 1 ;
            sh:minInclusive 0 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:records_screened ],
        [ sh:datatype xsd:string ;
            sh:description "Identifier for a flow diagram" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:flow_diagram_id ],
        [ sh:class <https://open-and-sustainable.github.io/revaise-model/schema/objects/stage_output/StageOutput> ;
            sh:description "Flow diagram artifact" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 7 ;
            sh:path revaise:flow_diagram_output ] ;
    sh:targetClass revaise:FlowDiagram .

revaise:LiteratureRecord a sh:NodeShape ;
    rdfs:comment "A literature record representing a publication that persists across review stages." ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "Type of publication" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 12 ;
            sh:path revaise:publication_type ],
        [ sh:datatype xsd:string ;
            sh:description "Language of publication" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 11 ;
            sh:path revaise:publication_language ],
        [ sh:datatype xsd:string ;
            sh:description "PubMed identifier" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:pmid ],
        [ sh:class revaise:ConformanceAssertion ;
            sh:description "Stored results of conformance checks against declared protocols" ;
            sh:nodeKind sh:IRI ;
            sh:order 20 ;
            sh:path revaise:conformance_assertions ],
        [ sh:datatype xsd:string ;
            sh:description "Keywords" ;
            sh:nodeKind sh:Literal ;
            sh:order 13 ;
            sh:path revaise:keywords ],
        [ sh:datatype xsd:string ;
            sh:description "Abstract of the publication" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:abstract ],
        [ sh:class revaise:ProtocolReference ;
            sh:description "Protocols or guidelines this review or record declares conformance to" ;
            sh:nodeKind sh:IRI ;
            sh:order 19 ;
            sh:path revaise:conforms_to ],
        [ sh:description "URL to full text" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 14 ;
            sh:path revaise:full_text_url ],
        [ sh:datatype xsd:string ;
            sh:description "Digital Object Identifier" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:doi ],
        [ sh:datatype xsd:dateTime ;
            sh:description "Last update timestamp" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 16 ;
            sh:path revaise:record_updated_at ],
        [ sh:datatype xsd:dateTime ;
            sh:description "When this record was created" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 15 ;
            sh:path revaise:record_created_at ],
        [ sh:datatype xsd:integer ;
            sh:description "Year of publication" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:publication_year ],
        [ sh:datatype xsd:string ;
            sh:description "Journal name" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:journal ],
        [ sh:datatype xsd:string ;
            sh:description "Title of the publication" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:title ],
        [ sh:class revaise:StudyResult ;
            sh:description "Per-outcome results reported by this study, with effect estimates and confidence intervals" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 18 ;
            sh:path revaise:study_results ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for this literature record" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:record_id ],
        [ sh:class revaise:QualityAssessment ;
            sh:description "Full risk-of-bias / quality assessment for this study, with per-domain judgements" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 17 ;
            sh:path revaise:risk_of_bias ],
        [ sh:datatype xsd:string ;
            sh:description "Issue number" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 9 ;
            sh:path revaise:issue ],
        [ sh:datatype xsd:string ;
            sh:description "Volume number" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path revaise:volume ],
        [ sh:class revaise:Author ;
            sh:description "Authors of the publication" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 2 ;
            sh:path revaise:authors ],
        [ sh:datatype xsd:string ;
            sh:description "Page range" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 10 ;
            sh:path revaise:pages ] ;
    sh:targetClass revaise:LiteratureRecord .

revaise:LiteratureRecordCollection a sh:NodeShape ;
    rdfs:comment "A collection of literature records" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:class revaise:LiteratureRecord ;
            sh:description "Literature records in this collection" ;
            sh:nodeKind sh:IRI ;
            sh:order 3 ;
            sh:path revaise:records ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of records in this collection" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:record_count ],
        [ sh:datatype xsd:string ;
            sh:description "Name of the collection" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:collection_name ],
        [ sh:datatype xsd:string ;
            sh:description "Description of this collection" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:collection_description ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for this collection" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:collection_id ],
        [ sh:datatype xsd:dateTime ;
            sh:description "When this collection was created" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:collection_created_at ] ;
    sh:targetClass revaise:LiteratureRecordCollection .

revaise:ProtocolReference a sh:NodeShape ;
    rdfs:comment "Reference to a versioned review protocol or guideline that a review or record declares conformance to (e.g., PRISMA 2020, ROBIS, RoB 2)." ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "Bibliographic citation for the protocol" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:protocol_citation ],
        [ sh:datatype xsd:string ;
            sh:description "Version of the protocol or guideline" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:protocol_version ],
        [ sh:datatype xsd:string ;
            sh:description "Human-readable name of the protocol or guideline" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:protocol_name ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for this protocol reference within the document" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:protocol_id ],
        [ sh:description "Review types the protocol applies to" ;
            sh:in ( "SYSTEMATIC_REVIEW" "META_ANALYSIS" "SCOPING_REVIEW" "RAPID_REVIEW" "UMBRELLA_REVIEW" "NARRATIVE_REVIEW" "LIVING_REVIEW" "MIXED_METHODS" "REALIST_REVIEW" ) ;
            sh:order 5 ;
            sh:path revaise:applicable_review_types ],
        [ sh:description "Category of the protocol" ;
            sh:in ( "REPORTING" "CONDUCT" "RISK_OF_BIAS" "APPRAISAL" "CERTAINTY" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:order 4 ;
            sh:path revaise:protocol_kind ],
        [ sh:description "Versioned URI identifying the external protocol specification" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 3 ;
            sh:path revaise:protocol_uri ] ;
    sh:targetClass revaise:ProtocolReference .

revaise:QualityAssessment a sh:NodeShape ;
    rdfs:comment "Quality or risk of bias assessment for a study or item" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:description "Assessed direction of bias if evaluated" ;
            sh:in ( "FAVORS_INTERVENTION" "FAVORS_COMPARATOR" "TOWARD_NULL" "AWAY_FROM_NULL" "UNPREDICTABLE" "NOT_ASSESSED" ) ;
            sh:maxCount 1 ;
            sh:order 14 ;
            sh:path revaise:rob_direction ],
        [ sh:datatype xsd:string ;
            sh:description "Outcome targeted by the assessment if outcome-specific" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:target_outcome ],
        [ sh:description "Tool used for quality assessment" ;
            sh:in ( "COCHRANE_ROB2" "COCHRANE_ROBINS_I" "ROBINS_E" "NEWCASTLE_OTTAWA" "JADAD" "GRADE" "CASP" "JBI" "AMSTAR" "QUADAS" "QUADAS_2" "QUADAS_C" "ROBIS" "OHAT_RISK_OF_BIAS" "SYRCLE" "AXIS" "MMAT" "MINORS" "STROBE" "CONSORT" "CUSTOM" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:order 4 ;
            sh:path revaise:assessment_tool ],
        [ sh:description "Overall risk-of-bias judgement" ;
            sh:in ( "LOW_RISK" "SOME_CONCERNS" "MODERATE_RISK" "SERIOUS_RISK" "HIGH_RISK" "CRITICAL_RISK" "NO_INFORMATION" "NOT_APPLICABLE" ) ;
            sh:maxCount 1 ;
            sh:order 8 ;
            sh:path revaise:overall_risk_of_bias ],
        [ sh:datatype xsd:string ;
            sh:description "ID of the item being assessed" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:item_id ],
        [ sh:description "Purpose of this assessment" ;
            sh:in ( "QUALITY_ASSESSMENT" "RISK_OF_BIAS" "CERTAINTY_ASSESSMENT" "REPORTING_QUALITY" "METHODS_APPRAISAL" ) ;
            sh:maxCount 1 ;
            sh:order 2 ;
            sh:path revaise:assessment_purpose ],
        [ sh:datatype xsd:string ;
            sh:description "Effect estimate, contrast, or estimand targeted by the assessment if applicable" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:target_effect ],
        [ sh:description "Unit at which the assessment is made" ;
            sh:in ( "STUDY" "OUTCOME" "RESULT" "DOMAIN" "REVIEW" ) ;
            sh:maxCount 1 ;
            sh:order 3 ;
            sh:path revaise:assessment_unit ],
        [ sh:description "Consensus status for the assessment" ;
            sh:in ( "SINGLE_ASSESSOR" "INDEPENDENT_ASSESSMENTS" "CONFLICT_UNRESOLVED" "CONSENSUS_REACHED" "ADJUDICATED" ) ;
            sh:maxCount 1 ;
            sh:order 12 ;
            sh:path revaise:rob_consensus_status ],
        [ sh:datatype xsd:dateTime ;
            sh:description "Date and time of assessment" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 17 ;
            sh:path revaise:assessment_date ],
        [ sh:datatype xsd:string ;
            sh:description "Version or variant of the risk-of-bias assessment tool" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 11 ;
            sh:path revaise:rob_assessment_version ],
        [ sh:class revaise:Participant ;
            sh:description "Person who performed the assessment" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 16 ;
            sh:path revaise:assessor ],
        [ sh:class revaise:RiskOfBiasDomainAssessment ;
            sh:description "Risk-of-bias domain judgements, including signalling questions" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 10 ;
            sh:path revaise:risk_of_bias_domains ],
        [ sh:description "Overall quality rating" ;
            sh:in ( "LOW_RISK" "SOME_CONCERNS" "HIGH_RISK" "CRITICAL_RISK" "NO_INFORMATION" "NOT_APPLICABLE" "GOOD" "FAIR" "POOR" ) ;
            sh:maxCount 1 ;
            sh:order 7 ;
            sh:path revaise:overall_quality ],
        [ sh:class revaise:DomainAssessment ;
            sh:description "Assessment of individual quality domains" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 9 ;
            sh:path revaise:domain_assessments ],
        [ sh:datatype xsd:string ;
            sh:description "Notes about the assessment" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 15 ;
            sh:path revaise:assessment_notes ],
        [ sh:description "Assessor's confidence in the assessment" ;
            sh:in ( "VERY_HIGH" "HIGH" "MODERATE" "LOW" "VERY_LOW" ) ;
            sh:maxCount 1 ;
            sh:order 19 ;
            sh:path revaise:confidence_rating ],
        [ sh:datatype xsd:float ;
            sh:description "Time taken to complete assessment in minutes" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 18 ;
            sh:path revaise:assessment_time_minutes ],
        [ sh:datatype xsd:string ;
            sh:description "Overall justification for the risk-of-bias judgement" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 13 ;
            sh:path revaise:rob_justification ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for this assessment" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:assessment_id ] ;
    sh:targetClass revaise:QualityAssessment .

revaise:RiskOfBiasDomainAssessment a sh:NodeShape ;
    rdfs:comment "Assessment of a specific risk-of-bias domain." ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "Identifier for the risk-of-bias domain" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:rob_domain_id ],
        [ sh:datatype xsd:string ;
            sh:description "Quotes supporting the assessment" ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:supporting_quotes ],
        [ sh:description "Assessed direction of bias for this domain if evaluated" ;
            sh:in ( "FAVORS_INTERVENTION" "FAVORS_COMPARATOR" "TOWARD_NULL" "AWAY_FROM_NULL" "UNPREDICTABLE" "NOT_ASSESSED" ) ;
            sh:maxCount 1 ;
            sh:order 5 ;
            sh:path revaise:rob_domain_direction ],
        [ sh:datatype xsd:string ;
            sh:description "Description of the risk-of-bias domain" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:rob_domain_description ],
        [ sh:datatype xsd:string ;
            sh:description "Name of the risk-of-bias domain" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:rob_domain_name ],
        [ sh:description "Risk-of-bias judgement for this domain" ;
            sh:in ( "LOW_RISK" "SOME_CONCERNS" "MODERATE_RISK" "SERIOUS_RISK" "HIGH_RISK" "CRITICAL_RISK" "NO_INFORMATION" "NOT_APPLICABLE" ) ;
            sh:maxCount 1 ;
            sh:order 4 ;
            sh:path revaise:rob_domain_judgement ],
        [ sh:datatype xsd:string ;
            sh:description "Page references for the assessment" ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path revaise:page_references ],
        [ sh:datatype xsd:string ;
            sh:description "Rationale for the domain judgement" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:rob_domain_rationale ],
        [ sh:class revaise:SignallingQuestionAssessment ;
            sh:description "Signalling-question assessments for this domain" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 3 ;
            sh:path revaise:signalling_questions ] ;
    sh:targetClass revaise:RiskOfBiasDomainAssessment .

revaise:StatisticalTestResult a sh:NodeShape ;
    rdfs:comment "Result of a statistical test" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:float ;
            sh:description "Upper CI bound" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:confidence_interval_upper ],
        [ sh:datatype xsd:float ;
            sh:description "Test statistic value" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:test_statistic ],
        [ sh:datatype xsd:float ;
            sh:description "Lower CI bound" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:confidence_interval_lower ],
        [ sh:datatype xsd:float ;
            sh:description "P-value" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:p_value ],
        [ sh:datatype xsd:string ;
            sh:description "Interpretation of the result" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:interpretation ] ;
    sh:targetClass revaise:StatisticalTestResult .

revaise:TemplateField a sh:NodeShape ;
    rdfs:comment "A field within a registration template." ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:boolean ;
            sh:description "Whether this field can have multiple values" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 11 ;
            sh:path revaise:is_repeatable ],
        [ sh:datatype xsd:string ;
            sh:description "Help text to guide users" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:template_field_help_text ],
        [ sh:datatype xsd:string ;
            sh:description "Field ID that this field depends on" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 12 ;
            sh:path revaise:conditional_on ],
        [ sh:datatype xsd:integer ;
            sh:description "Display order of the field" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 10 ;
            sh:path revaise:template_field_order ],
        [ sh:datatype xsd:string ;
            sh:description "Human-readable label for the field" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:template_field_label ],
        [ sh:description "Data type of the field" ;
            sh:in ( "TEXT" "TEXT_AREA" "NUMBER" "DATE" "DATETIME" "BOOLEAN" "SELECT" "MULTI_SELECT" "URL" "EMAIL" "FILE" "STRUCTURED" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:order 4 ;
            sh:path revaise:template_field_type ],
        [ sh:datatype xsd:string ;
            sh:description "Example value for this field" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path revaise:template_field_example ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for this field within the template" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:template_field_id ],
        [ sh:datatype xsd:string ;
            sh:description "Constraints on the field value" ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:template_field_constraints ],
        [ sh:datatype xsd:string ;
            sh:description "Technical name of the field" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:template_field_name ],
        [ sh:datatype xsd:string ;
            sh:description "Expected format for the field value" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:template_field_format ],
        [ sh:datatype xsd:string ;
            sh:description "Description of what should be entered in this field" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:template_field_description ],
        [ sh:datatype xsd:string ;
            sh:description "Section of the template this field belongs to" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 9 ;
            sh:path revaise:template_field_section ] ;
    sh:targetClass revaise:TemplateField .

<https://open-and-sustainable.github.io/revaise-model/schema/objects/protocol/Amendment> a sh:NodeShape ;
    rdfs:comment "A documented change or clarification to a review protocol." ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:description "Date of the amendment" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path <https://open-and-sustainable.github.io/revaise-model/schema/objects/protocol/amendment_date> ],
        [ sh:datatype xsd:string ;
            sh:description "Detailed description of what was changed" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path <https://open-and-sustainable.github.io/revaise-model/schema/objects/protocol/amendment_description> ],
        [ sh:datatype xsd:string ;
            sh:description "Human-readable reason for the amendment" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path <https://open-and-sustainable.github.io/revaise-model/schema/objects/protocol/amendment_reason> ],
        [ sh:class revaise:Author ;
            sh:description "Author who made the amendment" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 6 ;
            sh:path <https://open-and-sustainable.github.io/revaise-model/schema/objects/protocol/amendment_author> ],
        [ sh:description "Type of amendment" ;
            sh:in ( "CLARIFICATION" "CORRECTION" "PROTOCOL_CHANGE" "SCOPE_CHANGE" "METHODOLOGY_CHANGE" "TIMELINE_CHANGE" "TEAM_CHANGE" "ADMINISTRATIVE" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:order 2 ;
            sh:path <https://open-and-sustainable.github.io/revaise-model/schema/objects/protocol/amendment_type> ],
        [ sh:datatype xsd:string ;
            sh:description "Sections of the protocol affected by this amendment" ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path <https://open-and-sustainable.github.io/revaise-model/schema/objects/protocol/affected_sections> ],
        [ sh:description "Approval status of the amendment" ;
            sh:in ( "PENDING" "APPROVED" "REJECTED" "NOT_REQUIRED" ) ;
            sh:maxCount 1 ;
            sh:order 7 ;
            sh:path <https://open-and-sustainable.github.io/revaise-model/schema/objects/protocol/approval_status> ],
        [ sh:datatype xsd:string ;
            sh:description "Person or entity who approved the amendment" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 9 ;
            sh:path <https://open-and-sustainable.github.io/revaise-model/schema/objects/protocol/approver> ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for this amendment" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path <https://open-and-sustainable.github.io/revaise-model/schema/objects/protocol/amendment_id> ],
        [ sh:datatype xsd:dateTime ;
            sh:description "Date the amendment was approved" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path <https://open-and-sustainable.github.io/revaise-model/schema/objects/protocol/approval_date> ] ;
    sh:targetClass <https://open-and-sustainable.github.io/revaise-model/schema/objects/protocol/Amendment> .

<https://open-and-sustainable.github.io/revaise-model/schema/objects/stage_output/StageOutputRef> a sh:NodeShape ;
    rdfs:comment "Reference to a stage output in this or another RevAIse bundle." ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:description "URI locating the resource" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 0 ;
            sh:path <https://open-and-sustainable.github.io/revaise-model/schema/objects/stage_output/resource_uri> ],
        [ sh:datatype xsd:string ;
            sh:description "Human-readable label" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path <https://open-and-sustainable.github.io/revaise-model/schema/objects/stage_output/output_label> ],
        [ sh:datatype xsd:string ;
            sh:description "Checksum of the output file" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path <https://open-and-sustainable.github.io/revaise-model/schema/objects/stage_output/checksum> ] ;
    sh:targetClass <https://open-and-sustainable.github.io/revaise-model/schema/objects/stage_output/StageOutputRef> .

revaise:AISession a sh:NodeShape ;
    rdfs:comment "Session details for AI-assisted work" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "IDs of items processed in this session" ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:item_ids_processed ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for this AI session" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:ai_session_id ],
        [ sh:class revaise:HumanModification ;
            sh:description "Modifications made by humans to AI outputs" ;
            sh:nodeKind sh:IRI ;
            sh:order 8 ;
            sh:path revaise:human_modifications ],
        [ sh:datatype xsd:string ;
            sh:description "Errors encountered during the session" ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:errors_encountered ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of API calls made" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:api_calls ],
        [ sh:datatype xsd:float ;
            sh:description "Duration of the session in seconds" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:session_duration ],
        [ sh:datatype xsd:dateTime ;
            sh:description "When this AI session occurred" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:session_timestamp ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of tokens used (for LLM-based systems)" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:token_usage ],
        [ sh:datatype xsd:string ;
            sh:description "Reference to the AIAssistance configuration used" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:ai_config_id ] ;
    sh:targetClass revaise:AISession .

revaise:WorkSession a sh:NodeShape ;
    rdfs:comment "A work session by a participant on review tasks" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:class revaise:SessionEnvironment ;
            sh:description "Environment details for the session" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 11 ;
            sh:path revaise:session_environment ],
        [ sh:description "Type of work session" ;
            sh:in ( "SCREENING" "EXTRACTION" "QUALITY_ASSESSMENT" "CONFLICT_RESOLUTION" "VALIDATION" "TRAINING" "REVIEW" "PILOT" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:order 2 ;
            sh:path revaise:session_type ],
        [ sh:datatype xsd:dateTime ;
            sh:description "When the session ended" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:session_ended_at ],
        [ sh:datatype xsd:float ;
            sh:description "Total paused time in minutes" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:paused_duration ],
        [ sh:datatype xsd:string ;
            sh:description "IDs of items processed in this session" ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path revaise:session_item_ids ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for this session" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:session_id ],
        [ sh:class revaise:Participant ;
            sh:description "Participant conducting this session" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 1 ;
            sh:path revaise:participant ],
        [ sh:datatype xsd:float ;
            sh:description "Active working time in minutes" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:active_duration ],
        [ sh:description "Current status of the session" ;
            sh:in ( "PLANNED" "IN_PROGRESS" "PAUSED" "COMPLETED" "ABANDONED" "EXPIRED" "ERROR" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:order 10 ;
            sh:path revaise:session_status ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of items completed" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 9 ;
            sh:path revaise:items_completed ],
        [ sh:datatype xsd:string ;
            sh:description "Notes about the session" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 12 ;
            sh:path revaise:session_notes ],
        [ sh:datatype xsd:dateTime ;
            sh:description "When the session started" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:session_started_at ],
        [ sh:description "Review stage this session belongs to" ;
            sh:in ( "scoping" "registration" "search" "deduplication" "screening_title_abstract" "screening_fulltext" "data_extraction" "risk_of_bias" "synthesis_meta_analysis" "synthesis_narrative" "reporting" "reporting_prisma" "reproducibility_pack" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:order 3 ;
            sh:path revaise:stage_type ] ;
    sh:targetClass revaise:WorkSession .

revaise:AIAssistance a sh:NodeShape ;
    rdfs:comment "Configuration for AI assistance in any review stage" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:string ;
            sh:description "Unique identifier for this AI assistance configuration" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:ai_id ],
        [ sh:datatype xsd:string ;
            sh:description "Rules for validating AI outputs" ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path revaise:ai_validation_rules ],
        [ sh:description "Purposes for which AI is used" ;
            sh:in ( "CLASSIFICATION" "EXTRACTION" "GENERATION" "SUMMARIZATION" "TRANSLATION" "VALIDATION" "SUGGESTION" "QUALITY_CHECK" "ANOMALY_DETECTION" ) ;
            sh:minCount 1 ;
            sh:order 4 ;
            sh:path revaise:ai_purpose ],
        [ sh:datatype xsd:string ;
            sh:description "Description of training data or fine-tuning if applicable" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 10 ;
            sh:path revaise:ai_training_description ],
        [ sh:datatype xsd:string ;
            sh:description "Version of the AI model" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:ai_version ],
        [ sh:datatype xsd:string ;
            sh:description "Strategy for handling AI errors or failures" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 12 ;
            sh:path revaise:ai_error_handling ],
        [ sh:datatype xsd:float ;
            sh:description "Minimum confidence score for accepting AI outputs" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:ai_confidence_threshold ],
        [ sh:class revaise:AIPrompt ;
            sh:description "Prompts used to interact with the AI" ;
            sh:nodeKind sh:IRI ;
            sh:order 5 ;
            sh:path revaise:ai_prompts ],
        [ sh:description "Level of human review required" ;
            sh:in ( "FULL_REVIEW" "SAMPLE_REVIEW" "CONFIDENCE_BASED" "EXCEPTION_ONLY" "MINIMAL" "NONE" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:order 9 ;
            sh:path revaise:human_oversight_level ],
        [ sh:datatype xsd:string ;
            sh:description "AI service provider (e.g., OpenAI, Anthropic, Hugging Face)" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:ai_provider ],
        [ sh:class revaise:AIParameter ;
            sh:description "Model parameters and settings" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 6 ;
            sh:path revaise:ai_parameters ],
        [ sh:class revaise:AIPerformanceMetrics ;
            sh:description "Performance metrics for the AI assistance" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 11 ;
            sh:path revaise:ai_performance_metrics ],
        [ sh:datatype xsd:string ;
            sh:description "Name of the AI model (e.g., GPT-4, Claude, BERT)" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:ai_model ] ;
    sh:targetClass revaise:AIAssistance .

revaise:Participant a sh:NodeShape ;
    rdfs:comment "A person participating in the review process" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:integer ;
            sh:description "Number of items completed by this participant" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:completed_items_count ],
        [ sh:datatype xsd:string ;
            sh:description "Training or calibration exercises completed" ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:training_completed ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of items assigned to this participant" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:assigned_items_count ],
        [ sh:class revaise:Affiliation ;
            sh:description "Institutional affiliations" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 13 ;
            sh:path revaise:affiliations ],
        [ sh:description "Role(s) of the participant in the review" ;
            sh:in ( "LEAD_REVIEWER" "REVIEWER" "SCREENER" "DATA_EXTRACTOR" "QUALITY_ASSESSOR" "CONFLICT_RESOLVER" "STATISTICIAN" "METHODOLOGIST" "DOMAIN_EXPERT" "INFORMATION_SPECIALIST" "PROJECT_MANAGER" "EXTERNAL_REVIEWER" ) ;
            sh:minCount 1 ;
            sh:order 0 ;
            sh:path revaise:participant_role ],
        [ sh:datatype xsd:float ;
            sh:description "Average time spent per item (minutes)" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:participant_avg_time_per_item ],
        [ sh:datatype xsd:string ;
            sh:description "Contact email address" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 12 ;
            sh:path revaise:email ],
        [ sh:datatype xsd:string ;
            sh:description "Family/last name" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 10 ;
            sh:path revaise:family_name ],
        [ sh:datatype xsd:string ;
            sh:description "Additional notes about the participant" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:participant_notes ],
        [ sh:datatype xsd:string ;
            sh:description "Given/first name(s)" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 9 ;
            sh:path revaise:given_name ],
        [ sh:datatype xsd:boolean ;
            sh:description "Whether conflicts of interest were declared" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:conflict_of_interest_declared ],
        [ sh:datatype xsd:string ;
            sh:description "ORCID identifier" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 11 ;
            sh:path revaise:orcid ;
            sh:pattern "^\\d{4}-\\d{4}-\\d{4}-\\d{3}[\\dX]$" ],
        [ sh:datatype xsd:string ;
            sh:description "Full name of the author" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path revaise:name ],
        [ sh:datatype xsd:string ;
            sh:description "Areas of expertise relevant to the review" ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:expertise_areas ] ;
    sh:targetClass revaise:Participant .

revaise:Author a sh:NodeShape ;
    rdfs:comment "Author of a review or publication" ;
    sh:closed true ;
    sh:ignoredProperties ( revaise:participant_notes revaise:assigned_items_count revaise:expertise_areas revaise:training_completed revaise:participant_role revaise:participant_avg_time_per_item revaise:completed_items_count revaise:conflict_of_interest_declared rdf:type ) ;
    sh:property [ sh:class revaise:Affiliation ;
            sh:description "Institutional affiliations" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 5 ;
            sh:path revaise:affiliations ],
        [ sh:datatype xsd:string ;
            sh:description "Full name of the author" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:name ],
        [ sh:datatype xsd:string ;
            sh:description "Given/first name(s)" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:given_name ],
        [ sh:datatype xsd:string ;
            sh:description "Contact email address" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:email ],
        [ sh:datatype xsd:string ;
            sh:description "Family/last name" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:family_name ],
        [ sh:datatype xsd:string ;
            sh:description "ORCID identifier" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:orcid ;
            sh:pattern "^\\d{4}-\\d{4}-\\d{4}-\\d{3}[\\dX]$" ] ;
    sh:targetClass revaise:Author .

revaise:ConflictResolution a sh:NodeShape ;
    rdfs:comment "Resolution of conflicts or disagreements between reviewers" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:float ;
            sh:description "Confidence in the resolution" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 10 ;
            sh:path revaise:resolution_confidence ],
        [ sh:datatype xsd:string ;
            sh:description "Final resolved decision or value" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:final_decision ],
        [ sh:datatype xsd:string ;
            sh:description "IDs of items in conflict" ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:conflicting_items ],
        [ sh:datatype xsd:string ;
            sh:description "Notes about the resolution process" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 9 ;
            sh:path revaise:resolution_notes ],
        [ sh:datatype xsd:float ;
            sh:description "Time taken to resolve in minutes" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 8 ;
            sh:path revaise:resolution_duration ],
        [ sh:datatype xsd:dateTime ;
            sh:description "When the conflict was resolved" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:resolution_timestamp ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for this resolution" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:resolution_id ],
        [ sh:datatype xsd:string ;
            sh:description "Original conflicting decisions or values" ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:original_decisions ],
        [ sh:description "Type of conflict being resolved" ;
            sh:in ( "INCLUSION_EXCLUSION" "DATA_VALUE" "CLASSIFICATION" "QUALITY_RATING" "INTERPRETATION" "MISSING_DATA" "METHODOLOGICAL" "TECHNICAL" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:order 1 ;
            sh:path revaise:conflict_type ],
        [ sh:description "Method used to resolve the conflict" ;
            sh:in ( "CONSENSUS_DISCUSSION" "THIRD_REVIEWER" "SENIOR_REVIEWER" "MAJORITY_VOTE" "TEAM_MEETING" "STATISTICAL_METHOD" "PREDEFINED_RULE" "RE_REVIEW" "EXTERNAL_EXPERT" "AUTOMATED_RULE" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:order 4 ;
            sh:path revaise:resolution_method ],
        [ sh:class revaise:Participant ;
            sh:description "Person or process that resolved the conflict" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 6 ;
            sh:path revaise:resolver ] ;
    sh:targetClass revaise:ConflictResolution .

revaise:ParticipantWorkload a sh:NodeShape ;
    rdfs:comment "Workload statistics for a participant" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:float ;
            sh:description "Total time spent in hours" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:time_spent_hours ],
        [ sh:datatype xsd:date ;
            sh:description "Date of last item processed" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:last_item_date ],
        [ sh:datatype xsd:date ;
            sh:description "Date of first item processed" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:first_item_date ],
        [ sh:description "Stage of the review process" ;
            sh:in ( "scoping" "registration" "search" "deduplication" "screening_title_abstract" "screening_fulltext" "data_extraction" "risk_of_bias" "synthesis_meta_analysis" "synthesis_narrative" "reporting" "reporting_prisma" "reproducibility_pack" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:order 1 ;
            sh:path revaise:stage_type ],
        [ sh:datatype xsd:integer ;
            sh:description "Maximum items processed in a single day" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:peak_items_per_day ],
        [ sh:datatype xsd:string ;
            sh:description "Reference to the participant" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:participant_id ],
        [ sh:datatype xsd:integer ;
            sh:description "Total items processed" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:items_processed_count ],
        [ sh:datatype xsd:float ;
            sh:description "Average items processed per day" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:average_items_per_day ] ;
    sh:targetClass revaise:ParticipantWorkload .

revaise:StageTrainingInfo a sh:NodeShape ;
    rdfs:comment "Shared training information for review stages" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:float ;
            sh:description "Duration of training in hours" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:stage_training_duration_hours ],
        [ sh:description "URI to training materials" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 1 ;
            sh:path revaise:stage_training_materials_uri ],
        [ sh:datatype xsd:string ;
            sh:description "Additional notes about training" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:stage_training_notes ],
        [ sh:datatype xsd:boolean ;
            sh:description "Whether training was provided" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:stage_training_provided ],
        [ sh:datatype xsd:float ;
            sh:description "Proportion of team members who completed training" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:stage_training_completion_rate ] ;
    sh:targetClass revaise:StageTrainingInfo .

revaise:AgreementMetrics a sh:NodeShape ;
    rdfs:comment "Metrics for measuring agreement between reviewers/extractors" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:datatype xsd:float ;
            sh:description "Krippendorff's alpha reliability coefficient" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path revaise:krippendorff_alpha ],
        [ sh:class revaise:FieldAgreement ;
            sh:description "Agreement metrics for individual fields" ;
            sh:nodeKind sh:BlankNodeOrIRI ;
            sh:order 7 ;
            sh:path revaise:field_level_agreements ],
        [ sh:datatype xsd:float ;
            sh:description "Simple percentage agreement" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+02 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:percent_agreement ],
        [ sh:datatype xsd:float ;
            sh:description "Overall agreement rate across all items" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive 0e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:overall_agreement ],
        [ sh:datatype xsd:float ;
            sh:description "Fleiss' kappa for multiple raters" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive -1e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:fleiss_kappa ],
        [ sh:datatype xsd:float ;
            sh:description "Cohen's kappa for inter-rater agreement" ;
            sh:maxCount 1 ;
            sh:maxInclusive 1e+00 ;
            sh:minInclusive -1e+00 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:cohen_kappa ],
        [ sh:datatype xsd:integer ;
            sh:description "Total number of comparisons made" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 6 ;
            sh:path revaise:total_comparisons ],
        [ sh:datatype xsd:integer ;
            sh:description "Number of disagreements" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 5 ;
            sh:path revaise:disagreement_count ] ;
    sh:targetClass revaise:AgreementMetrics .

revaise:ExternalTool a sh:NodeShape ;
    rdfs:comment "External tool or platform used in the review process" ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:description "Type of license for the tool" ;
            sh:in ( "OPEN_SOURCE" "COMMERCIAL" "ACADEMIC" "FREEMIUM" "SUBSCRIPTION" "PERPETUAL" "TRIAL" "CUSTOM" ) ;
            sh:maxCount 1 ;
            sh:order 6 ;
            sh:path revaise:tool_license_type ],
        [ sh:description "Purpose(s) for which the tool was used" ;
            sh:in ( "SEARCH_MANAGEMENT" "DEDUPLICATION" "SCREENING_PLATFORM" "REFERENCE_MANAGER" "AI_SCREENING" "AI_EXTRACTION" "DATA_EXTRACTION" "TEXT_ANALYSIS" "CONFLICT_RESOLUTION" "QUALITY_ASSESSMENT" "META_ANALYSIS" "STATISTICS" "DATA_VISUALIZATION" "PROJECT_MANAGEMENT" "COLLABORATION" "PROTOCOL_REGISTRATION" "REPORTING" "PRISMA_FLOW" "API_INTEGRATION" "CUSTOM_AUTOMATION" "OTHER" ) ;
            sh:minCount 1 ;
            sh:order 5 ;
            sh:path revaise:tool_purpose ],
        [ sh:datatype xsd:string ;
            sh:description "Version of the API used" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 12 ;
            sh:path revaise:tool_api_version ],
        [ sh:datatype xsd:string ;
            sh:description "Specific features of the tool that were used" ;
            sh:nodeKind sh:Literal ;
            sh:order 15 ;
            sh:path revaise:tool_features_used ],
        [ sh:datatype xsd:string ;
            sh:description "Vendor or organization providing the tool" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path revaise:tool_vendor ],
        [ sh:description "URL to tool documentation" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 19 ;
            sh:path revaise:tool_documentation_url ],
        [ sh:description "API endpoint if accessed programmatically" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 11 ;
            sh:path revaise:tool_api_endpoint ],
        [ sh:description "URI to exported configuration file" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 8 ;
            sh:path revaise:tool_configuration_file ],
        [ sh:datatype xsd:string ;
            sh:description "Version of the tool used" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path revaise:tool_version ],
        [ sh:class revaise:ToolParameter ;
            sh:description "Tool-specific configuration parameters" ;
            sh:nodeKind sh:IRI ;
            sh:order 9 ;
            sh:path revaise:tool_configuration_parameters ],
        [ sh:datatype xsd:string ;
            sh:description "Name of the tool (e.g., Covidence, RevMan, Elicit, PrismaAI)" ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 1 ;
            sh:path revaise:tool_name ],
        [ sh:datatype xsd:string ;
            sh:description "Known limitations or issues encountered" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 17 ;
            sh:path revaise:tool_limitations ],
        [ sh:datatype xsd:string ;
            sh:description "Subscription level or plan used (if applicable)" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 7 ;
            sh:path revaise:tool_subscription_level ],
        [ sh:datatype xsd:string ;
            sh:description "Recommended citation for the tool" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 18 ;
            sh:path revaise:tool_citation ],
        [ sh:datatype xsd:string ;
            sh:description "Additional notes about tool usage" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 21 ;
            sh:path revaise:tool_notes ],
        [ sh:description "URL to access the tool or platform" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 3 ;
            sh:path revaise:tool_url ],
        [ sh:datatype xsd:string ;
            sh:description "Cost information (subscription, per-use, etc.)" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 20 ;
            sh:path revaise:tool_cost ],
        [ sh:datatype xsd:string ;
            sh:description "Data formats the tool can import" ;
            sh:nodeKind sh:Literal ;
            sh:order 14 ;
            sh:path revaise:tool_import_formats ],
        [ sh:datatype xsd:string ;
            sh:description "Data formats the tool can export" ;
            sh:nodeKind sh:Literal ;
            sh:order 13 ;
            sh:path revaise:tool_export_formats ],
        [ sh:datatype xsd:string ;
            sh:description "AI models used by the tool (if disclosed)" ;
            sh:nodeKind sh:Literal ;
            sh:order 16 ;
            sh:path revaise:tool_ai_models ],
        [ sh:datatype xsd:string ;
            sh:description "Unique identifier for the tool" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 0 ;
            sh:path revaise:tool_id ],
        [ sh:datatype xsd:string ;
            sh:description "General settings description or JSON configuration" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 10 ;
            sh:path revaise:tool_settings ] ;
    sh:targetClass revaise:ExternalTool .

<https://open-and-sustainable.github.io/revaise-model/schema/objects/stage_output/StageOutput> a sh:NodeShape ;
    rdfs:comment "Output file or log produced by a review stage (results, logs, code, visualizations)." ;
    sh:closed true ;
    sh:ignoredProperties ( rdf:type ) ;
    sh:property [ sh:description "Kind or type of stage output" ;
            sh:in ( "search_query" "search_log" "records_raw" "records_deduped" "screening_decisions" "inclusion_list" "exclusion_list" "fulltexts" "extraction_table" "rob_table" "meta_analysis_table" "forest_plot" "prisma_flow" "scoping_summary" "report_document" "reporting_checklist" "code_archive" "environment_lock" "model_card" "other" ) ;
            sh:maxCount 1 ;
            sh:order 0 ;
            sh:path <https://open-and-sustainable.github.io/revaise-model/schema/objects/stage_output/kind> ],
        [ sh:datatype xsd:dateTime ;
            sh:description "Creation timestamp" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 4 ;
            sh:path <https://open-and-sustainable.github.io/revaise-model/schema/objects/stage_output/output_created_at> ],
        [ sh:description "URI locating the resource" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:order 1 ;
            sh:path <https://open-and-sustainable.github.io/revaise-model/schema/objects/stage_output/resource_uri> ],
        [ sh:datatype xsd:string ;
            sh:description "File format or MIME type" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 2 ;
            sh:path <https://open-and-sustainable.github.io/revaise-model/schema/objects/stage_output/format> ],
        [ sh:datatype xsd:string ;
            sh:description "Checksum of the output file" ;
            sh:maxCount 1 ;
            sh:nodeKind sh:Literal ;
            sh:order 3 ;
            sh:path <https://open-and-sustainable.github.io/revaise-model/schema/objects/stage_output/checksum> ] ;
    sh:targetClass <https://open-and-sustainable.github.io/revaise-model/schema/objects/stage_output/StageOutput> .


