@prefix cacontology: <https://cacontology.projectvic.org#> .
@prefix cacontology-abduction: <https://cacontology.projectvic.org/abduction#> .
@prefix cacontology-ai: <https://cacontology.projectvic.org/ai-generated#> .
@prefix cacontology-analyst: <https://cacontology.projectvic.org/analyst-wellbeing#> .
@prefix cacontology-asset-forfeiture: <https://cacontology.projectvic.org/asset-forfeiture#> .
@prefix cacontology-athletic: <https://cacontology.projectvic.org/athletic#> .
@prefix cacontology-case: <https://cacontology.projectvic.org/case-management#> .
@prefix cacontology-coord: <https://cacontology.projectvic.org/investigation-coordination#> .
@prefix cacontology-corruption: <https://cacontology.projectvic.org/law-enforcement-corruption#> .
@prefix cacontology-corruption-shapes: <https://cacontology.projectvic.org/law-enforcement-corruption/shapes#> .
@prefix cacontology-custodial: <https://cacontology.projectvic.org/custodial#> .
@prefix cacontology-detection: <https://cacontology.projectvic.org/detection#> .
@prefix cacontology-educational: <https://cacontology.projectvic.org/educational#> .
@prefix cacontology-educational-shapes: <https://ontology.caseontology.org/icac/educational-exploitation/shapes/> .
@prefix cacontology-educational1: <https://ontology.caseontology.org/icac/educational-exploitation/> .
@prefix cacontology-enterprises: <https://cacontology.projectvic.org/extremist-enterprises#> .
@prefix cacontology-forensics: <https://cacontology.projectvic.org/forensics#> .
@prefix cacontology-grooming: <https://cacontology.projectvic.org/grooming#> .
@prefix cacontology-gufo: <https://cacontology.projectvic.org/gufo#> .
@prefix cacontology-hotlines: <https://cacontology.projectvic.org/hotlines/core#> .
@prefix cacontology-impact: <https://cacontology.projectvic.org/victim-impact#> .
@prefix cacontology-infrastructure: <https://cacontology.projectvic.org/infrastructure#> .
@prefix cacontology-infrastructure-shapes: <https://cacontology.projectvic.org/infrastructure/shapes#> .
@prefix cacontology-institutional: <https://cacontology.projectvic.org/institutional-exploitation#> .
@prefix cacontology-international: <https://cacontology.projectvic.org/international#> .
@prefix cacontology-legal: <https://cacontology.projectvic.org/legal-harmonization#> .
@prefix cacontology-legal-shapes: <https://cacontology.projectvic.org/legal-harmonization/shapes#> .
@prefix cacontology-multi: <https://cacontology.projectvic.org/multi-jurisdiction#> .
@prefix cacontology-partnerships: <https://cacontology.projectvic.org/partnerships#> .
@prefix cacontology-partnerships-shapes: <https://cacontology.projectvic.org/partnerships/shapes#> .
@prefix cacontology-physical: <https://cacontology.projectvic.org/physical#> .
@prefix cacontology-physical-shapes: <https://cacontology.projectvic.org/physical-evidence/shapes#> .
@prefix cacontology-physical1: <https://cacontology.projectvic.org/physical-evidence#> .
@prefix cacontology-platforms: <https://cacontology.projectvic.org/platforms#> .
@prefix cacontology-prevention: <https://cacontology.projectvic.org/prevention#> .
@prefix cacontology-production: <https://cacontology.projectvic.org/production#> .
@prefix cacontology-recruitment: <https://cacontology.projectvic.org/recruitment-networks#> .
@prefix cacontology-recruitment-shapes: <https://cacontology.projectvic.org/recruitment-networks/shapes#> .
@prefix cacontology-registry: <https://cacontology.projectvic.org/sex-offender-registry#> .
@prefix cacontology-sentencing: <https://cacontology.projectvic.org/sentencing#> .
@prefix cacontology-sextortion: <https://cacontology.projectvic.org/sextortion#> .
@prefix cacontology-soe: <https://cacontology.projectvic.org/soe#> .
@prefix cacontology-specialized: <https://cacontology.projectvic.org/specialized-units#> .
@prefix cacontology-stranger: <https://cacontology.projectvic.org/stranger-abduction#> .
@prefix cacontology-strategy: <https://cacontology.projectvic.org/gufo-strategy#> .
@prefix cacontology-street: <https://cacontology.projectvic.org/street#> .
@prefix cacontology-synthesis: <https://cacontology.projectvic.org/synthesis#> .
@prefix cacontology-synthesis-shapes: <https://cacontology.projectvic.org/synthesis/shapes#> .
@prefix cacontology-tactical: <https://cacontology.projectvic.org/tactical#> .
@prefix cacontology-taskforce: <https://cacontology.projectvic.org/taskforce#> .
@prefix cacontology-temporal: <https://cacontology.projectvic.org/temporal#> .
@prefix cacontology-temporal-shapes: <https://cacontology.projectvic.org/temporal/shapes#> .
@prefix cacontology-trafficking: <https://cacontology.projectvic.org/trafficking#> .
@prefix cacontology-trafficking-shapes: <https://cacontology.projectvic.org/trafficking/shapes#> .
@prefix cacontology-training: <https://cacontology.projectvic.org/training#> .
@prefix cacontology-undercover: <https://cacontology.projectvic.org/undercover#> .
@prefix cacontology-us-ncmec: <https://cacontology.projectvic.org/us/ncmec#> .
@prefix cacontology-us-ncmec1: <https://cacontology.projectvic.org/us/ncmec/2.11.0#> .
@prefix cacontology-usa-federal: <https://cacontology.projectvic.org/usa-federal-law#> .
@prefix cacontology-usa-leg: <https://cacontology.projectvic.org/usa-legislative#> .
@prefix cacontology-usa-leg-shapes: <https://cacontology.projectvic.org/usa-legislative/shapes#> .
@prefix cacontology1: <https://cacontology.projectvic.org/2.11.0#> .
@prefix case-investigation: <https://ontology.caseontology.org/case/investigation/> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix gufo: <http://purl.org/nemo/gufo#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix sh: <http://www.w3.org/ns/shacl#> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix uco-action: <https://ontology.unifiedcyberontology.org/uco/action/> .
@prefix uco-channel: <https://ontology.unifiedcyberontology.org/uco/channel/> .
@prefix uco-core: <https://ontology.unifiedcyberontology.org/uco/core/> .
@prefix uco-identity: <https://ontology.unifiedcyberontology.org/uco/identity/> .
@prefix uco-location: <https://ontology.unifiedcyberontology.org/uco/location/> .
@prefix uco-observable: <https://ontology.unifiedcyberontology.org/uco/observable/> .
@prefix uco-pattern: <https://ontology.unifiedcyberontology.org/uco/pattern/> .
@prefix uco-role: <https://ontology.unifiedcyberontology.org/uco/role/> .
@prefix uco-tool: <https://ontology.unifiedcyberontology.org/uco/tool/> .
@prefix uco-types: <https://ontology.unifiedcyberontology.org/uco/types/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

cacontology:AnalysisPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Analysis Phase"@en ;
    rdfs:comment "Phase focused on detailed analysis of evidence and cybertip information."@en ;
    rdfs:subClassOf cacontology:CACInvestigation .

cacontology:AnalystRole a gufo:Role,
        owl:Class ;
    rdfs:label "Analyst Role"@en ;
    rdfs:comment "Role of professional analyzing cybertips and digital evidence. Modeled as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf uco-role:Role .

cacontology:ConclusionPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Conclusion Phase"@en ;
    rdfs:comment "Final phase involving case closure or prosecution referral."@en ;
    rdfs:subClassOf cacontology:CACInvestigation .

cacontology:ConspiracyLeaderRole a owl:Class ;
    rdfs:label "Conspiracy Leader Role"@en ;
    rdfs:comment "Leadership role within criminal conspiracy, directing and coordinating activities."@en ;
    rdfs:subClassOf cacontology:ConspiracyRole .

cacontology:ConspiracyMemberRole a owl:Class ;
    rdfs:label "Conspiracy Member Role"@en ;
    rdfs:comment "Member role within criminal conspiracy, participating in coordinated activities."@en ;
    rdfs:subClassOf cacontology:ConspiracyRole .

cacontology:CoordinatedOffensePattern a owl:Class ;
    rdfs:label "Coordinated Offense Pattern"@en ;
    rdfs:comment "Pattern of coordinated criminal activities involving multiple perpetrators working together across time and locations."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology:CriminalEnterprise a owl:Class ;
    rdfs:label "Criminal Enterprise"@en ;
    rdfs:comment "Organized criminal group conducting systematic child exploitation activities with defined roles and structure."@en ;
    rdfs:subClassOf uco-identity:Organization .

cacontology:DigitallyGeneratedCSAMIncident a owl:Class ;
    rdfs:label "Digitally Generated CSAM Incident"@en ;
    rdfs:comment "Incidents involving digitally generated or manipulated child sexual abuse material."@en ;
    rdfs:subClassOf cacontology:CSAMIncident .

cacontology:EvidencePhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Evidence Phase"@en ;
    rdfs:comment "Phase focused on evidence collection, analysis, and curation."@en ;
    rdfs:subClassOf cacontology:CACInvestigation .

cacontology:EvidenceReviewAction a owl:Class ;
    rdfs:label "Evidence Review Action"@en ;
    rdfs:comment "The action of reviewing and analyzing digital evidence using forensic tools."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology:GroomingSolicitation a owl:Class ;
    rdfs:label "Grooming and Solicitation"@en ;
    rdfs:comment "Incidents involving grooming or solicitation of children for sexual purposes."@en ;
    rdfs:subClassOf cacontology:ChildSexualAbuseEvent .

cacontology:InitialPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Initial Investigation Phase"@en ;
    rdfs:comment "Initial phase of CAC investigation involving cybertip receipt and preliminary review."@en ;
    rdfs:subClassOf cacontology:CACInvestigation .

cacontology:InvestigationLifecycleSituation a owl:Class ;
    rdfs:label "Investigation Lifecycle Situation"@en ;
    rdfs:comment "Overall situation encompassing the complete CAC investigation lifecycle."@en ;
    rdfs:subClassOf gufo:Situation .

cacontology:InvestigatorRole a gufo:Role,
        owl:Class ;
    rdfs:label "Investigator Role"@en ;
    rdfs:comment "Role of law enforcement officer or analyst conducting CAC investigation. Modeled as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf uco-role:Role .

cacontology:LegalProcessPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Legal Process Phase"@en ;
    rdfs:comment "Phase involving legal processes such as search warrants and subpoenas."@en ;
    rdfs:subClassOf cacontology:CACInvestigation .

cacontology:LiveStreamingCSA a owl:Class ;
    rdfs:label "Live Streaming Child Sexual Abuse"@en ;
    rdfs:comment "Incidents involving live streaming of child sexual abuse."@en ;
    rdfs:subClassOf cacontology:ChildSexualAbuseEvent .

cacontology:ReceiveCybertipAction a owl:Class ;
    rdfs:label "Receive Cybertip Action"@en ;
    rdfs:comment "The initial action of receiving a cybertip report from a reporting entity (e.g., NCMEC, INHOPE)."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action ;
    owl:equivalentClass cacontology-gufo:CriminalEvent .

cacontology:RescuerRole a gufo:Role,
        owl:Class ;
    rdfs:label "Rescuer Role"@en ;
    rdfs:comment "Role of a person involved in rescuing or protecting victims (e.g., law enforcement, NGO worker). Modeled as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf uco-role:Role .

cacontology:ReviewCybertipAction a owl:Class ;
    rdfs:label "Review Cybertip Action"@en ;
    rdfs:comment "The action of reviewing and analyzing a cybertip report by an analyst."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology:VictimPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Victim Phase"@en ;
    rdfs:comment "Phase focused on victim identification, rescue, and support."@en ;
    rdfs:subClassOf cacontology:CACInvestigation .

cacontology:conspiracyDuration a owl:DatatypeProperty ;
    rdfs:label "conspiracy duration"@en ;
    rdfs:comment "Duration of criminal conspiracy from start to disruption."@en ;
    rdfs:domain cacontology:ConspiracyToCommitCSA ;
    rdfs:range xsd:duration .

cacontology:conspiracyMemberCount a owl:DatatypeProperty ;
    rdfs:label "conspiracy member count"@en ;
    rdfs:comment "Number of individuals involved in criminal conspiracy (e.g., 8 defendants)."@en ;
    rdfs:domain cacontology:ConspiracyToCommitCSA ;
    rdfs:range xsd:nonNegativeInteger .

cacontology:currentPhase a owl:ObjectProperty ;
    rdfs:label "current phase"@en ;
    rdfs:comment "The current active phase of the investigation."@en ;
    rdfs:domain cacontology:CACInvestigation ;
    rdfs:range gufo:Phase .

cacontology:depictsChild a owl:ObjectProperty ;
    rdfs:label "depicts child"@en ;
    rdfs:comment "Links a digital artifact to a child depicted in it."@en ;
    rdfs:domain uco-observable:DigitalArtifact ;
    rdfs:range uco-identity:Person .

cacontology:hasAgeSituation a owl:ObjectProperty ;
    rdfs:label "has age situation"@en ;
    rdfs:comment "Links a person to an Age At Time Situation that attributes a concrete age value to them over a time-bounded interval. This is the primary bridge from identity data into the gUFO-based age modeling pattern."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range cacontology-temporal:AgeAtTimeSituation .

cacontology:hasOffenderAgeSituation a owl:ObjectProperty ;
    rdfs:label "has offender age situation"@en ;
    rdfs:comment "Convenience link from a child sexual abuse event to an Age At Time Situation describing the offender’s age at or during that event, enabling age-gap and Romeo-and-Juliet style analyses."@en ;
    rdfs:domain cacontology:ChildSexualAbuseEvent ;
    rdfs:range cacontology-temporal:AgeAtTimeSituation .

cacontology:hasPhase a owl:ObjectProperty ;
    rdfs:label "has phase"@en ;
    rdfs:comment "Links investigation to its current or historical phases."@en ;
    rdfs:domain cacontology:CACInvestigation ;
    rdfs:range gufo:Phase .

cacontology:hasPhaseBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has phase begin point"@en ;
    rdfs:comment "Temporal begin point for investigation phase."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology:hasPhaseEndPoint a owl:DatatypeProperty ;
    rdfs:label "has phase end point"@en ;
    rdfs:comment "Temporal end point for investigation phase."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology:hasRoleBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has role begin point"@en ;
    rdfs:comment "Temporal begin point for CAC role."@en ;
    rdfs:domain gufo:Role ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology:hasRoleEndPoint a owl:DatatypeProperty ;
    rdfs:label "has role end point"@en ;
    rdfs:comment "Temporal end point for CAC role."@en ;
    rdfs:domain gufo:Role ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology:hasVictimAgeSituation a owl:ObjectProperty ;
    rdfs:label "has victim age situation"@en ;
    rdfs:comment "Convenience link from a child sexual abuse event to an Age At Time Situation describing the victim’s age at or during that event. Implementations MAY infer or materialize this from person-level age situations and event timepoints."@en ;
    rdfs:domain cacontology:ChildSexualAbuseEvent ;
    rdfs:range cacontology-temporal:AgeAtTimeSituation .

cacontology:indictmentCounts a owl:DatatypeProperty ;
    rdfs:label "indictment counts"@en ;
    rdfs:comment "Number of criminal counts in indictment (e.g., 19 counts in superseding indictment)."@en ;
    rdfs:domain cacontology:MultiDefendantIndictment ;
    rdfs:range xsd:nonNegativeInteger .

cacontology:investigationStatus a owl:DatatypeProperty ;
    rdfs:label "investigation status"@en ;
    rdfs:comment "Current status of CAC investigation (active, suspended, closed, referred)."@en ;
    rdfs:domain cacontology:CACInvestigation ;
    rdfs:range xsd:string .

cacontology:involvesOffender a owl:ObjectProperty ;
    rdfs:label "involves offender"@en ;
    rdfs:comment "Links an event to an offender role."@en ;
    rdfs:domain cacontology:ChildSexualAbuseEvent ;
    rdfs:range cacontology:OffenderRole .

cacontology:involvesVictim a owl:ObjectProperty ;
    rdfs:label "involves victim"@en ;
    rdfs:comment "Links an event to a victim role."@en ;
    rdfs:domain cacontology:ChildSexualAbuseEvent ;
    rdfs:range cacontology:VictimRole .

cacontology:leadsConspiracy a owl:ObjectProperty ;
    rdfs:label "leads conspiracy"@en ;
    rdfs:comment "Links individual to conspiracy they lead or direct."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range cacontology:ConspiracyToCommitCSA .

cacontology:legalInstrument a owl:ObjectProperty ;
    rdfs:label "legal instrument"@en ;
    rdfs:comment "Links a legal process action to its legal instrument (e.g., search warrant, subpoena)."@en ;
    rdfs:domain cacontology:LegalProcessAction .

cacontology:occursDuringPhase a owl:ObjectProperty ;
    rdfs:label "occurs during phase"@en ;
    rdfs:comment "Links an action to the investigation phase during which it occurs."@en ;
    rdfs:domain uco-action:Action ;
    rdfs:range gufo:Phase .

cacontology:participatesInConspiracy a owl:ObjectProperty ;
    rdfs:label "participates in conspiracy"@en ;
    rdfs:comment "Links individual to conspiracy they participate in."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range cacontology:ConspiracyToCommitCSA .

cacontology:phaseDuration a owl:DatatypeProperty ;
    rdfs:label "phase duration"@en ;
    rdfs:comment "Duration of investigation phase."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:duration .

cacontology:phaseProgress a owl:DatatypeProperty ;
    rdfs:label "phase progress"@en ;
    rdfs:comment "Progress percentage within current investigation phase (0.0-1.0)."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:decimal .

cacontology:producesArtifact a owl:ObjectProperty ;
    rdfs:label "produces artifact"@en ;
    rdfs:comment "Links an event to a digital artifact it produces."@en ;
    rdfs:domain cacontology:ChildSexualAbuseEvent ;
    rdfs:range uco-observable:DigitalArtifact .

cacontology:rescuedVictim a owl:ObjectProperty ;
    rdfs:label "rescued victim"@en ;
    rdfs:comment "Links a victim rescue action to the rescued victim."@en ;
    rdfs:domain cacontology:VictimRescueAction ;
    rdfs:range uco-identity:Person .

cacontology:resultsinIndictment a owl:ObjectProperty ;
    rdfs:label "results in indictment"@en ;
    rdfs:comment "Links conspiracy to indictment resulting from investigation."@en ;
    rdfs:domain cacontology:ConspiracyToCommitCSA ;
    rdfs:range cacontology:MultiDefendantIndictment .

cacontology:severityLevel a owl:DatatypeProperty ;
    rdfs:label "severity level"@en ;
    rdfs:comment "The severity level of an incident (0-3, mapping to NorRating/EUROPOL scales)."@en ;
    rdfs:domain cacontology:ChildSexualAbuseEvent ;
    rdfs:range xsd:integer .

cacontology:submittedTo a owl:ObjectProperty ;
    rdfs:label "submitted to"@en ;
    rdfs:comment "Links an unknown victim submission to the target database."@en ;
    rdfs:domain cacontology:UnknownVictimSubmission .

cacontology:targetsService a owl:ObjectProperty ;
    rdfs:label "targets service"@en ;
    rdfs:comment "Links a legal process action to the digital service it targets."@en ;
    rdfs:domain cacontology:LegalProcessAction ;
    rdfs:range uco-channel:DigitalService .

cacontology:transitionsTo a owl:ObjectProperty ;
    rdfs:label "transitions to"@en ;
    rdfs:comment "Links one investigation phase to the next phase in sequence."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range gufo:Phase .

cacontology:usesChannel a owl:ObjectProperty ;
    rdfs:label "uses channel"@en ;
    rdfs:comment "Links an event to a digital service or communication channel."@en ;
    rdfs:domain cacontology:ChildSexualAbuseEvent ;
    rdfs:range uco-channel:DigitalService .

cacontology:usesClassification a owl:ObjectProperty ;
    rdfs:label "uses classification"@en ;
    rdfs:comment "Links a CSAM curation action to the classification system used."@en ;
    rdfs:domain cacontology:CSAMCurationAction .

cacontology-abduction:AgeBasedVulnerability a owl:Class ;
    rdfs:label "Age Based Vulnerability"@en ;
    rdfs:comment "Exploitation of victim's young age and limited ability to resist or escape."@en ;
    rdfs:subClassOf cacontology-abduction:VulnerabilityExploitation .

cacontology-abduction:ApartmentIsolation a owl:Class ;
    rdfs:label "Apartment Isolation"@en ;
    rdfs:comment "Use of apartment or residential unit for victim isolation and exploitation."@en ;
    rdfs:subClassOf cacontology-abduction:LocationIsolation .

cacontology-abduction:BluntObjectThreats a owl:Class ;
    rdfs:label "Blunt Object Threats"@en ;
    rdfs:comment "Use of blunt objects as weapons to threaten and control victim."@en ;
    rdfs:subClassOf cacontology-abduction:WeaponBasedCoercion .

cacontology-abduction:ClothingDisguise a owl:Class ;
    rdfs:label "Clothing Disguise"@en ;
    rdfs:comment "Use of specific clothing to alter appearance or blend into environment."@en ;
    rdfs:subClassOf cacontology-abduction:DisguiseBasedConcealment .

cacontology-abduction:ComplianceEnforcement a owl:Class ;
    rdfs:label "Compliance Enforcement"@en ;
    rdfs:comment "Methods used to enforce victim compliance with perpetrator demands."@en ;
    rdfs:subClassOf cacontology-abduction:VictimControlMechanism .

cacontology-abduction:ControlledEnvironmentExploitation a owl:Class ;
    rdfs:label "Controlled Environment Exploitation"@en ;
    rdfs:comment "Exploitation in environment controlled by perpetrator to prevent escape or discovery."@en ;
    rdfs:subClassOf cacontology-abduction:LocationBasedExploitation .

cacontology-abduction:DelayedDisclosure a owl:Class ;
    rdfs:label "Delayed Disclosure"@en ;
    rdfs:comment "Delayed disclosure due to trauma, threats, or other factors."@en ;
    rdfs:subClassOf cacontology-abduction:PostAbductionReporting .

cacontology-abduction:EscapeAttempt a owl:Class ;
    rdfs:label "Escape Attempt"@en ;
    rdfs:comment "Victim's attempts to escape during or after abduction."@en ;
    rdfs:subClassOf cacontology-abduction:VictimAbductionResponse .

cacontology-abduction:ExploitationSceneEvidence a owl:Class ;
    rdfs:label "Exploitation Scene Evidence"@en ;
    rdfs:comment "Physical evidence collected from exploitation location."@en ;
    rdfs:subClassOf uco-observable:ObservableObject .

cacontology-abduction:FireEscapeEntry a owl:Class ;
    rdfs:label "Fire Escape Entry"@en ;
    rdfs:comment "Forcing victim to climb fire escapes to enter buildings through windows."@en ;
    rdfs:subClassOf cacontology-abduction:ForcedLocationEntry .

cacontology-abduction:FirearmThreats a owl:Class ;
    rdfs:label "Firearm Threats"@en ;
    rdfs:comment "Use of firearm to threaten and control victim during abduction."@en ;
    rdfs:subClassOf cacontology-abduction:WeaponBasedCoercion .

cacontology-abduction:HoodedConcealment a owl:Class ;
    rdfs:label "Hooded Concealment"@en ;
    rdfs:comment "Use of hooded clothing to partially conceal identity."@en ;
    rdfs:subClassOf cacontology-abduction:FacialConcealment .

cacontology-abduction:HumiliationBasedExploitation a owl:Class ;
    rdfs:label "Humiliation Based Exploitation"@en ;
    rdfs:comment "Exploitation designed to humiliate and degrade victim beyond sexual assault."@en ;
    rdfs:subClassOf cacontology-abduction:AbductionExploitationPattern .

cacontology-abduction:ImmediateDisclosure a owl:Class ;
    rdfs:label "Immediate Disclosure"@en ;
    rdfs:comment "Immediate disclosure of abduction and assault upon release or escape."@en ;
    rdfs:subClassOf cacontology-abduction:PostAbductionReporting .

cacontology-abduction:ImmediateExploitation a owl:Class ;
    rdfs:label "Immediate Exploitation"@en ;
    rdfs:comment "Sexual exploitation occurring immediately following abduction without delay."@en ;
    rdfs:subClassOf cacontology-abduction:AbductionExploitationPattern .

cacontology-abduction:ImpliedWeaponThreats a owl:Class ;
    rdfs:label "Implied Weapon Threats"@en ;
    rdfs:comment "Threats suggesting weapon possession without displaying actual weapon."@en ;
    rdfs:subClassOf cacontology-abduction:WeaponBasedCoercion .

cacontology-abduction:IsolatedChildTargeting a owl:Class ;
    rdfs:label "Isolated Child Targeting"@en ;
    rdfs:comment "Targeting children who are alone without adult supervision or companions."@en ;
    rdfs:subClassOf cacontology-abduction:VictimTargetingPattern .

cacontology-abduction:IsolationVulnerability a owl:Class ;
    rdfs:label "Isolation Vulnerability"@en ;
    rdfs:comment "Exploitation of victim being alone without potential helpers or witnesses."@en ;
    rdfs:subClassOf cacontology-abduction:VulnerabilityExploitation .

cacontology-abduction:KnifeThreats a owl:Class ;
    rdfs:label "Knife Threats"@en ;
    rdfs:comment "Use of knife or bladed weapon to threaten and control victim."@en ;
    rdfs:subClassOf cacontology-abduction:WeaponBasedCoercion .

cacontology-abduction:MaskConcealment a owl:Class ;
    rdfs:label "Mask Concealment"@en ;
    rdfs:comment "Use of masks or face coverings to hide identity."@en ;
    rdfs:subClassOf cacontology-abduction:FacialConcealment .

cacontology-abduction:MovementRestriction a owl:Class ;
    rdfs:label "Movement Restriction"@en ;
    rdfs:comment "Physical or psychological restriction of victim movement and escape attempts."@en ;
    rdfs:subClassOf cacontology-abduction:VictimControlMechanism .

cacontology-abduction:PhysicalForceWithWeapon a owl:Class ;
    rdfs:label "Physical Force with Weapon"@en ;
    rdfs:comment "Combination of physical force and weapon use to control victim."@en ;
    rdfs:subClassOf cacontology-abduction:WeaponBasedCoercion .

cacontology-abduction:PhysicalIntimidation a owl:Class ;
    rdfs:label "Physical Intimidation"@en ;
    rdfs:comment "Use of physical presence and intimidation to control victim behavior."@en ;
    rdfs:subClassOf cacontology-abduction:VictimControlMechanism .

cacontology-abduction:PublicSpaceAbduction a owl:Class ;
    rdfs:label "Public Space Abduction"@en ;
    rdfs:comment "Abduction occurring in public spaces such as parks, playgrounds, or commercial areas."@en ;
    rdfs:subClassOf cacontology-abduction:StrangerAbduction .

cacontology-abduction:RandomVictimSelection a owl:Class ;
    rdfs:label "Random Victim Selection"@en ;
    rdfs:comment "Selection of victim based on opportunity rather than specific targeting or grooming."@en ;
    rdfs:subClassOf cacontology-abduction:OpportunisticPredation .

cacontology-abduction:RitualizedExploitation a owl:Class ;
    rdfs:label "Ritualized Exploitation"@en ;
    rdfs:comment "Exploitation following specific ritualized patterns (forced showering, specific commands)."@en ;
    rdfs:subClassOf cacontology-abduction:AbductionExploitationPattern .

cacontology-abduction:RoutineActivityTargeting a owl:Class ;
    rdfs:label "Routine Activity Targeting"@en ;
    rdfs:comment "Targeting children during predictable routine activities (school, recreation, errands)."@en ;
    rdfs:subClassOf cacontology-abduction:VictimTargetingPattern .

cacontology-abduction:SchoolRouteAbduction a owl:Class ;
    rdfs:label "School Route Abduction"@en ;
    rdfs:comment "Abduction of child while traveling to or from school or educational activities."@en ;
    rdfs:subClassOf cacontology-abduction:StreetLevelAbduction .

cacontology-abduction:SchoolRouteTargeting a owl:Class ;
    rdfs:label "School Route Targeting"@en ;
    rdfs:comment "Targeting children on routes to or from school when they are alone and vulnerable."@en ;
    rdfs:subClassOf cacontology-abduction:VictimTargetingPattern .

cacontology-abduction:SecondaryLocationControl a owl:Class ;
    rdfs:label "Secondary Location Control"@en ;
    rdfs:comment "Movement of victim to secondary location for enhanced control and exploitation."@en ;
    rdfs:subClassOf cacontology-abduction:LocationIsolation .

cacontology-abduction:SilenceEnforcement a owl:Class ;
    rdfs:label "Silence Enforcement"@en ;
    rdfs:comment "Specific threats or actions to prevent victim from calling for help."@en ;
    rdfs:subClassOf cacontology-abduction:ThreatBasedControl .

cacontology-abduction:SizeBasedVulnerability a owl:Class ;
    rdfs:label "Size Based Vulnerability"@en ;
    rdfs:comment "Exploitation of victim's small physical size relative to perpetrator."@en ;
    rdfs:subClassOf cacontology-abduction:VulnerabilityExploitation .

cacontology-abduction:SkiMaskConcealment a owl:Class ;
    rdfs:label "Ski Mask Concealment"@en ;
    rdfs:comment "Use of ski mask or balaclava to conceal identity during approach."@en ;
    rdfs:subClassOf cacontology-abduction:FacialConcealment .

cacontology-abduction:SurveillanceEvidence a owl:Class ;
    rdfs:label "Surveillance Evidence"@en ;
    rdfs:comment "Video or photographic surveillance evidence of abduction or related activity."@en ;
    rdfs:subClassOf uco-observable:ObservableObject .

cacontology-abduction:SurvivalBehavior a owl:Class ;
    rdfs:label "Survival Behavior"@en ;
    rdfs:comment "Victim behavior focused on survival and minimizing harm."@en ;
    rdfs:subClassOf cacontology-abduction:VictimAbductionResponse .

cacontology-abduction:UnconventionalEntry a owl:Class ;
    rdfs:label "Unconventional Entry"@en ;
    rdfs:comment "Use of non-standard entry methods to avoid detection or surveillance."@en ;
    rdfs:subClassOf cacontology-abduction:ForcedLocationEntry .

cacontology-abduction:VehicleConcealment a owl:Class ;
    rdfs:label "Vehicle Concealment"@en ;
    rdfs:comment "Use of vehicles to conceal approach or provide mobile concealment."@en ;
    rdfs:subClassOf cacontology-abduction:DisguiseBasedConcealment .

cacontology-abduction:VerbalThreats a owl:Class ;
    rdfs:label "Verbal Threats"@en ;
    rdfs:comment "Use of verbal threats to maintain victim compliance."@en ;
    rdfs:subClassOf cacontology-abduction:ThreatBasedControl .

cacontology-abduction:WeaponDisplayIntimidation a owl:Class ;
    rdfs:label "Weapon Display Intimidation"@en ;
    rdfs:comment "Display of weapon to intimidate victim into compliance without direct threats."@en ;
    rdfs:subClassOf cacontology-abduction:WeaponBasedCoercion .

cacontology-abduction:WindowEntry a owl:Class ;
    rdfs:label "Window Entry"@en ;
    rdfs:comment "Forcing victim to enter location through windows rather than doors."@en ;
    rdfs:subClassOf cacontology-abduction:ForcedLocationEntry .

cacontology-abduction:WitnessEvidence a owl:Class ;
    rdfs:label "Witness Evidence"@en ;
    rdfs:comment "Witness testimony regarding abduction or suspicious activity."@en ;
    rdfs:subClassOf uco-observable:ObservableObject .

cacontology-abduction:abductionDuration a owl:DatatypeProperty ;
    rdfs:label "abduction duration"@en ;
    rdfs:comment "Duration of abduction from initial contact to victim release in hours."@en ;
    rdfs:domain cacontology-abduction:StrangerAbduction ;
    rdfs:range xsd:decimal .

cacontology-abduction:abductionLocation a owl:DatatypeProperty ;
    rdfs:label "abduction location"@en ;
    rdfs:comment "Specific location where abduction occurred."@en ;
    rdfs:domain cacontology-abduction:StrangerAbduction ;
    rdfs:range xsd:string .

cacontology-abduction:accessDifficulty a owl:DatatypeProperty ;
    rdfs:label "access difficulty"@en ;
    rdfs:comment "Difficulty of accessing exploitation location (easy, moderate, difficult)."@en ;
    rdfs:domain cacontology-abduction:ForcedLocationEntry ;
    rdfs:range xsd:string .

cacontology-abduction:approachMethod a owl:DatatypeProperty ;
    rdfs:label "approach method"@en ;
    rdfs:comment "Method used to approach victim (direct_confrontation, deception, force)."@en ;
    rdfs:domain cacontology-abduction:StrangerAbduction ;
    rdfs:range xsd:string .

cacontology-abduction:complianceReason a owl:DatatypeProperty ;
    rdfs:label "compliance reason"@en ;
    rdfs:comment "Primary reason for victim compliance (fear, weapon_threat, physical_force)."@en ;
    rdfs:domain cacontology-abduction:ComplianceUnderThreat ;
    rdfs:range xsd:string .

cacontology-abduction:concealmentLevel a owl:DatatypeProperty ;
    rdfs:label "concealment level"@en ;
    rdfs:comment "Level of identity concealment (partial, full, complete)."@en ;
    rdfs:domain cacontology-abduction:DisguiseBasedConcealment ;
    rdfs:range xsd:string .

cacontology-abduction:concealsIdentityWith a owl:ObjectProperty ;
    rdfs:label "conceals identity with"@en ;
    rdfs:comment "Links perpetrator to disguise items used for concealment."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range cacontology-abduction:DisguiseEvidence .

cacontology-abduction:disclosesTo a owl:ObjectProperty ;
    rdfs:label "discloses to"@en ;
    rdfs:comment "Links disclosure to person or agency receiving disclosure."@en ;
    rdfs:domain cacontology-abduction:PostAbductionReporting ;
    rdfs:range uco-identity:Person .

cacontology-abduction:disclosureMethod a owl:DatatypeProperty ;
    rdfs:label "disclosure method"@en ;
    rdfs:comment "Method of disclosure (family, police, school, medical)."@en ;
    rdfs:domain cacontology-abduction:PostAbductionReporting ;
    rdfs:range xsd:string .

cacontology-abduction:disguiseEffectiveness a owl:DatatypeProperty ;
    rdfs:label "disguise effectiveness"@en ;
    rdfs:comment "Effectiveness of disguise in preventing identification."@en ;
    rdfs:domain cacontology-abduction:DisguiseBasedConcealment ;
    rdfs:range xsd:string .

cacontology-abduction:disguiseType a owl:DatatypeProperty ;
    rdfs:label "disguise type"@en ;
    rdfs:comment "Type of disguise used (ski_mask, hood, mask, clothing, vehicle)."@en ;
    rdfs:domain cacontology-abduction:DisguiseBasedConcealment ;
    rdfs:range xsd:string .

cacontology-abduction:documentsAbduction a owl:ObjectProperty ;
    rdfs:label "documents abduction"@en ;
    rdfs:comment "Links evidence to abduction it documents."@en ;
    rdfs:domain uco-observable:ObservableObject ;
    rdfs:range cacontology-abduction:StrangerAbduction .

cacontology-abduction:employsCoercion a owl:ObjectProperty ;
    rdfs:label "employs coercion"@en ;
    rdfs:comment "Links abduction to coercion methods employed."@en ;
    rdfs:domain cacontology-abduction:StrangerAbduction ;
    rdfs:range cacontology-abduction:WeaponBasedCoercion .

cacontology-abduction:entryMethod a owl:DatatypeProperty ;
    rdfs:label "entry method"@en ;
    rdfs:comment "Method used to enter exploitation location (fire_escape, window, door, roof)."@en ;
    rdfs:domain cacontology-abduction:ForcedLocationEntry ;
    rdfs:range xsd:string .

cacontology-abduction:escalatesTo a owl:ObjectProperty ;
    rdfs:label "escalates to"@en ;
    rdfs:comment "Links abduction to exploitation pattern that follows."@en ;
    rdfs:domain cacontology-abduction:StrangerAbduction ;
    rdfs:range cacontology-abduction:AbductionExploitationPattern .

cacontology-abduction:escapeRoutes a owl:DatatypeProperty ;
    rdfs:label "escape routes"@en ;
    rdfs:comment "Number and accessibility of potential escape routes from location."@en ;
    rdfs:domain cacontology-abduction:LocationIsolation ;
    rdfs:range xsd:string .

cacontology-abduction:evidenceRecoveryRate a owl:DatatypeProperty ;
    rdfs:label "evidence recovery rate"@en ;
    rdfs:comment "Percentage of expected evidence successfully recovered."@en ;
    rdfs:domain cacontology-abduction:StrangerAbductionInvestigation ;
    rdfs:range xsd:decimal .

cacontology-abduction:exercisesControl a owl:ObjectProperty ;
    rdfs:label "exercises control"@en ;
    rdfs:comment "Links perpetrator to control mechanisms they employ."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range cacontology-abduction:VictimControlMechanism .

cacontology-abduction:exhibitsVulnerability a owl:ObjectProperty ;
    rdfs:label "exhibits vulnerability"@en ;
    rdfs:comment "Links victim to vulnerability they exhibit."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range cacontology-abduction:VulnerabilityExploitation .

cacontology-abduction:exploitsVulnerability a owl:ObjectProperty ;
    rdfs:label "exploits vulnerability"@en ;
    rdfs:comment "Links abduction to victim vulnerability being exploited."@en ;
    rdfs:domain cacontology-abduction:StrangerAbduction ;
    rdfs:range cacontology-abduction:VulnerabilityExploitation .

cacontology-abduction:facilitatesExploitation a owl:ObjectProperty ;
    rdfs:label "facilitates exploitation"@en ;
    rdfs:comment "Links abduction methods to exploitation they facilitate."@en ;
    rdfs:domain cacontology-abduction:StrangerAbduction ;
    rdfs:range cacontology-abduction:AbductionExploitationPattern .

cacontology-abduction:forcesEntryTo a owl:ObjectProperty ;
    rdfs:label "forces entry to"@en ;
    rdfs:comment "Links abduction to forced entry into exploitation location."@en ;
    rdfs:domain cacontology-abduction:StrangerAbduction ;
    rdfs:range cacontology-abduction:ForcedLocationEntry .

cacontology-abduction:investigatesAbduction a owl:ObjectProperty ;
    rdfs:label "investigates abduction"@en ;
    rdfs:comment "Links investigation to abduction being investigated."@en ;
    rdfs:domain cacontology-abduction:StrangerAbductionInvestigation ;
    rdfs:range cacontology-abduction:StrangerAbduction .

cacontology-abduction:investigationDuration a owl:DatatypeProperty ;
    rdfs:label "investigation duration"@en ;
    rdfs:comment "Duration of investigation from report to resolution in days."@en ;
    rdfs:domain cacontology-abduction:StrangerAbductionInvestigation ;
    rdfs:range xsd:decimal .

cacontology-abduction:isolatesAt a owl:ObjectProperty ;
    rdfs:label "isolates at"@en ;
    rdfs:comment "Links abduction to location used for victim isolation."@en ;
    rdfs:domain cacontology-abduction:StrangerAbduction ;
    rdfs:range cacontology-abduction:LocationIsolation .

cacontology-abduction:locationIsolationLevel a owl:DatatypeProperty ;
    rdfs:label "location isolation level"@en ;
    rdfs:comment "Level of isolation of exploitation location (high, moderate, low)."@en ;
    rdfs:domain cacontology-abduction:LocationIsolation ;
    rdfs:range xsd:string .

cacontology-abduction:occursAt a owl:ObjectProperty ;
    rdfs:label "occurs at"@en ;
    rdfs:comment "Links abduction to location where it occurs."@en ;
    rdfs:domain cacontology-abduction:StrangerAbduction ;
    rdfs:range uco-location:Location .

cacontology-abduction:opportunityWindow a owl:DatatypeProperty ;
    rdfs:label "opportunity window"@en ;
    rdfs:comment "Duration of opportunity window for abduction in minutes."@en ;
    rdfs:domain cacontology-abduction:OpportunityBasedTargeting ;
    rdfs:range xsd:decimal .

cacontology-abduction:perpetratesAbduction a owl:ObjectProperty ;
    rdfs:label "perpetrates abduction"@en ;
    rdfs:comment "Links perpetrator to stranger abduction they commit."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range cacontology-abduction:StrangerAbduction .

cacontology-abduction:recoveredFrom a owl:ObjectProperty ;
    rdfs:label "recovered from"@en ;
    rdfs:comment "Links evidence to location where it was recovered."@en ;
    rdfs:domain uco-observable:ObservableObject ;
    rdfs:range uco-location:Location .

cacontology-abduction:reportingDelay a owl:DatatypeProperty ;
    rdfs:label "reporting delay"@en ;
    rdfs:comment "Time delay between incident and reporting in hours."@en ;
    rdfs:domain cacontology-abduction:PostAbductionReporting ;
    rdfs:range xsd:decimal .

cacontology-abduction:reportsAbduction a owl:ObjectProperty ;
    rdfs:label "reports abduction"@en ;
    rdfs:comment "Links victim to abduction reporting they make."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range cacontology-abduction:PostAbductionReporting .

cacontology-abduction:resistanceLevel a owl:DatatypeProperty ;
    rdfs:label "resistance level"@en ;
    rdfs:comment "Level of victim resistance (none, minimal, moderate, strong)."@en ;
    rdfs:domain cacontology-abduction:VictimAbductionResponse ;
    rdfs:range xsd:string .

cacontology-abduction:resistsAbduction a owl:ObjectProperty ;
    rdfs:label "resists abduction"@en ;
    rdfs:comment "Links victim to resistance efforts against abduction."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range cacontology-abduction:InitialResistance .

cacontology-abduction:respondsTo a owl:ObjectProperty ;
    rdfs:label "responds to"@en ;
    rdfs:comment "Links victim response to abduction they are responding to."@en ;
    rdfs:domain cacontology-abduction:VictimAbductionResponse ;
    rdfs:range cacontology-abduction:StrangerAbduction .

cacontology-abduction:supportsCharge a owl:ObjectProperty ;
    rdfs:label "supports charge"@en ;
    rdfs:comment "Links abduction evidence to criminal charges it supports."@en ;
    rdfs:domain cacontology-abduction:AbductionSceneEvidence ;
    rdfs:range uco-observable:ObservableObject .

cacontology-abduction:surveillanceDuration a owl:DatatypeProperty ;
    rdfs:label "surveillance duration"@en ;
    rdfs:comment "Duration of pre-abduction surveillance if any, in days."@en ;
    rdfs:domain cacontology-abduction:VictimTargetingPattern ;
    rdfs:range xsd:decimal .

cacontology-abduction:targetingCriteria a owl:DatatypeProperty ;
    rdfs:label "targeting criteria"@en ;
    rdfs:comment "Criteria used for victim selection (age, size, isolation, opportunity)."@en ;
    rdfs:domain cacontology-abduction:VictimTargetingPattern ;
    rdfs:range xsd:string .

cacontology-abduction:targetsVictim a owl:ObjectProperty ;
    rdfs:label "targets victim"@en ;
    rdfs:comment "Links targeting pattern to victim being targeted."@en ;
    rdfs:domain cacontology-abduction:VictimTargetingPattern ;
    rdfs:range uco-identity:Person .

cacontology-abduction:threatEffectiveness a owl:DatatypeProperty ;
    rdfs:label "threat effectiveness"@en ;
    rdfs:comment "Effectiveness of threats in controlling victim behavior."@en ;
    rdfs:domain cacontology-abduction:WeaponBasedCoercion ;
    rdfs:range xsd:string .

cacontology-abduction:threatSpecificity a owl:DatatypeProperty ;
    rdfs:label "threat specificity"@en ;
    rdfs:comment "Specificity of threats made (vague, specific, detailed, graphic)."@en ;
    rdfs:domain cacontology-abduction:WeaponBasedCoercion ;
    rdfs:range xsd:string .

cacontology-abduction:threatensWith a owl:ObjectProperty ;
    rdfs:label "threatens with"@en ;
    rdfs:comment "Links perpetrator to weapon used for threats."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range cacontology-abduction:WeaponEvidence .

cacontology-abduction:timeOfDay a owl:DatatypeProperty ;
    rdfs:label "time of day"@en ;
    rdfs:comment "Time of day when abduction occurred (morning, afternoon, evening, night)."@en ;
    rdfs:domain cacontology-abduction:StrangerAbduction ;
    rdfs:range xsd:string .

cacontology-abduction:transitionsTo a owl:ObjectProperty ;
    rdfs:label "transitions to"@en ;
    rdfs:comment "Links abduction location to exploitation location."@en ;
    rdfs:domain uco-location:Location ;
    rdfs:range uco-location:Location .

cacontology-abduction:triggersInvestigation a owl:ObjectProperty ;
    rdfs:label "triggers investigation"@en ;
    rdfs:comment "Links victim reporting to investigation it triggers."@en ;
    rdfs:domain cacontology-abduction:PostAbductionReporting ;
    rdfs:range cacontology-abduction:StrangerAbductionInvestigation .

cacontology-abduction:usesDisguise a owl:ObjectProperty ;
    rdfs:label "uses disguise"@en ;
    rdfs:comment "Links abduction to disguise methods used."@en ;
    rdfs:domain cacontology-abduction:StrangerAbduction ;
    rdfs:range cacontology-abduction:DisguiseBasedConcealment .

cacontology-abduction:usesWeapon a owl:ObjectProperty ;
    rdfs:label "uses weapon"@en ;
    rdfs:comment "Links abduction to weapon used for coercion."@en ;
    rdfs:domain cacontology-abduction:StrangerAbduction ;
    rdfs:range cacontology-abduction:WeaponEvidence .

cacontology-abduction:victimActivity a owl:DatatypeProperty ;
    rdfs:label "victim activity"@en ;
    rdfs:comment "Activity victim was engaged in when abducted (walking_to_school, playing, shopping)."@en ;
    rdfs:domain cacontology-abduction:StrangerAbduction ;
    rdfs:range xsd:string .

cacontology-abduction:victimsOf a owl:ObjectProperty ;
    rdfs:label "victims of"@en ;
    rdfs:comment "Links victim to stranger abduction they experience."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range cacontology-abduction:StrangerAbduction .

cacontology-abduction:weaponDisplayed a owl:DatatypeProperty ;
    rdfs:label "weapon displayed"@en ;
    rdfs:comment "Whether weapon was visibly displayed to victim."@en ;
    rdfs:domain cacontology-abduction:WeaponBasedCoercion ;
    rdfs:range xsd:boolean .

cacontology-abduction:weaponType a owl:DatatypeProperty ;
    rdfs:label "weapon type"@en ;
    rdfs:comment "Type of weapon used for coercion (knife, firearm, blunt_object, implied)."@en ;
    rdfs:domain cacontology-abduction:WeaponBasedCoercion ;
    rdfs:range xsd:string .

cacontology-abduction:witnessCount a owl:DatatypeProperty ;
    rdfs:label "witness count"@en ;
    rdfs:comment "Number of witnesses identified during investigation."@en ;
    rdfs:domain cacontology-abduction:StrangerAbductionInvestigation ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-ai:AICSAMInvestigationShape a sh:NodeShape ;
    rdfs:label "AI-CSAM Investigation Shape"@en ;
    rdfs:comment "Enhanced validation shape for AI-CSAM investigation instances with comprehensive gUFO Event and Situation validation."@en ;
    sh:property [ sh:hasValue gufo:Event ;
            sh:message "AI-CSAM investigations must be instances of gUFO Event"@en ;
            sh:path rdf:type ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "AI-CSAM investigation must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ],
        [ sh:datatype xsd:string ;
            sh:in ( "low" "moderate" "high" "extreme" ) ;
            sh:maxCount 1 ;
            sh:message "Investigation challenge level must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-ai:investigationChallengeLevel ],
        [ sh:datatype xsd:string ;
            sh:in ( "none" "low" "moderate" "high" "impossible" ) ;
            sh:maxCount 1 ;
            sh:message "Victim identification difficulty must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-ai:victimIdentificationDifficulty ],
        [ sh:datatype xsd:string ;
            sh:in ( "legislation_gaps" "jurisdiction_issues" "evidence_admissibility" "prosecution_complexity" "international_cooperation" ) ;
            sh:maxCount 5 ;
            sh:message "Legal framework challenges must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-ai:legalFrameworkChallenges ],
        [ sh:datatype xsd:string ;
            sh:in ( "low" "moderate" "high" "extreme" ) ;
            sh:maxCount 1 ;
            sh:message "Prosecution difficulty must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-ai:prosecutionDifficulty ] ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-ai:SituationInvolvementError . }
            WHERE {
                $this a cacontology-ai:AICSAMInvestigation .
                $this cacontology-ai:investigationChallengeLevel ?level .
                FILTER(?level IN ("high", "extreme"))
                FILTER NOT EXISTS { 
                    $this cacontology-ai:involvesSituation ?situation .
                    ?situation a gufo:Situation .
                }
            }
        """ ;
            sh:message "Complex AI-CSAM investigations should involve gUFO Situations"@en ;
            sh:prefixes cacontology-ai: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-ai:AICSAMInvestigation .

cacontology-ai:AIContentDetectionShape a sh:NodeShape ;
    rdfs:label "AI Content Detection Shape"@en ;
    rdfs:comment "Enhanced validation shape for AI content detection instances with comprehensive gUFO Event validation."@en ;
    sh:property [ sh:hasValue gufo:Event ;
            sh:message "AI content detection must be instances of gUFO Event"@en ;
            sh:path rdf:type ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "AI content detection must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Detection confidence must be between 0.0 and 1.0."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-ai:detectionConfidence ],
        [ sh:datatype xsd:string ;
            sh:in ( "neural_network" "statistical_analysis" "artifact_detection" "metadata_analysis" "hybrid_approach" ) ;
            sh:maxCount 1 ;
            sh:message "Detection method must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-ai:detectionMethod ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 3600.0 ;
            sh:message "Processing time must be between 0.1 and 3600 seconds."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.1 ;
            sh:path cacontology-ai:processingTime ],
        [ sh:datatype xsd:string ;
            sh:in ( "accepted" "challenged" "rejected" "unclear" ) ;
            sh:maxCount 1 ;
            sh:message "Evidence admissibility must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-ai:evidenceAdmissibility ],
        [ sh:datatype xsd:dateTime ;
            sh:message "Detection must have timestamp using gUFO temporal framework"@en ;
            sh:minCount 1 ;
            sh:path cacontology-gufo:detectionTimePoint ] ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-ai:RoleValidationError . }
            WHERE {
                $this a cacontology-ai:AIContentDetection .
                $this uco-action:performer ?performer .
                FILTER NOT EXISTS { 
                    ?performer cacontology-ai:playsRole ?role .
                    ?role a gufo:Role .
                    ?role rdfs:subClassOf* cacontology-ai:AIForensicAnalyst .
                }
            }
        """ ;
            sh:message "AI detection must be performed by entities with appropriate gUFO Roles"@en ;
            sh:prefixes cacontology-ai: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-ai:AIContentDetection .

cacontology-ai:AIContentGenerationShape a sh:NodeShape ;
    rdfs:label "AI Content Generation Shape"@en ;
    rdfs:comment "Enhanced validation shape for AI content generation instances with comprehensive gUFO Event validation."@en ;
    sh:property [ sh:hasValue gufo:Event ;
            sh:message "AI content generation must be instances of gUFO Event"@en ;
            sh:path rdf:type ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "AI content generation must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "AI content generation may specify end time."@en ;
            sh:minCount 0 ;
            sh:path uco-core:endTime ],
        [ sh:datatype xsd:string ;
            sh:in ( "text-to-image" "image-to-image" "style_transfer" "face_swap" "age_progression" "video_generation" ) ;
            sh:maxCount 1 ;
            sh:message "Generation technique must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-ai:generationTechnique ],
        [ sh:datatype xsd:string ;
            sh:in ( "basic" "intermediate" "advanced" "expert" ) ;
            sh:maxCount 1 ;
            sh:message "Generation complexity must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-ai:generationComplexity ],
        [ sh:datatype xsd:string ;
            sh:in ( "basic" "intermediate" "advanced" "expert" ) ;
            sh:maxCount 1 ;
            sh:message "Technical expertise required must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-ai:technicalExpertiseRequired ],
        [ sh:datatype xsd:duration ;
            sh:maxCount 1 ;
            sh:message "Generation duration should use gUFO temporal framework"@en ;
            sh:minCount 0 ;
            sh:path cacontology-gufo:generationDuration ] ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-ai:TemporalInconsistencyError . }
            WHERE {
                $this uco-core:startTime ?start .
                $this uco-core:endTime ?end .
                FILTER(?end <= ?start)
            }
        """ ;
            sh:message "Generation end time must be after start time"@en ;
            sh:prefixes cacontology-ai: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-ai:AIContentGeneration .

cacontology-ai:AIContentInvestigationSituationShape a sh:NodeShape ;
    rdfs:label "AI Content Investigation Situation Shape"@en ;
    rdfs:comment "SHACL shape for AI content investigation situations with comprehensive gUFO Situation validation."@en ;
    sh:property [ sh:hasValue gufo:Situation ;
            sh:message "AI content investigation situations must be instances of gUFO Situation"@en ;
            sh:path rdf:type ] ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-ai:StakeholderValidationError . }
            WHERE {
                $this a cacontology-ai:AIContentInvestigationSituation .
                {
                    SELECT $this (COUNT(?participant) AS ?participantCount) WHERE {
                        $this cacontology-ai:hasParticipant ?participant .
                    } GROUP BY $this
                }
                FILTER(?participantCount < 2)
            }
        """ ;
            sh:message "Investigation situations must involve multiple stakeholders"@en ;
            sh:prefixes cacontology-ai: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-ai:AIContentInvestigationSituation .

cacontology-ai:AIDetectionPhaseShape a sh:NodeShape ;
    rdfs:label "AI Detection Phase Shape"@en ;
    rdfs:comment "SHACL shape for AI detection phases with anti-rigid gUFO Phase validation."@en ;
    sh:property [ sh:hasValue gufo:Phase ;
            sh:message "AI detection phases must be instances of anti-rigid gUFO Phase"@en ;
            sh:path rdf:type ],
        [ sh:datatype xsd:dateTime ;
            sh:message "Detection phases must have begin timestamps"@en ;
            sh:minCount 1 ;
            sh:path cacontology-gufo:beginTimePoint ] ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-ai:AntiRigidityError . }
            WHERE {
                $this a cacontology-ai:AIDetectionPhase .
                FILTER NOT EXISTS { 
                    $this cacontology-gufo:hasAntiRigidityConstraint ?constraint .
                }
            }
        """ ;
            sh:message "AI detection phases must demonstrate anti-rigidity (can change based on detection results)"@en ;
            sh:prefixes cacontology-ai: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-ai:AIDetectionPhase .

cacontology-ai:AIDetectionToolShape a sh:NodeShape ;
    rdfs:label "AI Detection Tool Shape"@en ;
    rdfs:comment "Enhanced validation shape for AI detection tool instances with gUFO Object validation."@en ;
    sh:property [ sh:hasValue gufo:Object ;
            sh:message "AI detection tools must be instances of gUFO Object"@en ;
            sh:path rdf:type ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 100 ;
            sh:message "AI detection tool must have a name (2-100 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 2 ;
            sh:path uco-core:name ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:message "Tool version must follow semantic versioning pattern (e.g., '1.0', '2.1.3')."@en ;
            sh:minCount 0 ;
            sh:path uco-tool:version ;
            sh:pattern "^[0-9]+\\.[0-9]+(\\.[0-9]+)?$" ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "False positive rate must be between 0.0 and 1.0."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-ai:falsePositiveRate ] ;
    sh:targetClass cacontology-ai:AIDetectionTool .

cacontology-ai:AIForensicAnalystShape a sh:NodeShape ;
    rdfs:label "AI Forensic Analyst Shape"@en ;
    rdfs:comment "SHACL shape for AI forensic analyst roles with anti-rigid gUFO Role validation."@en ;
    sh:property [ sh:hasValue gufo:Role ;
            sh:message "AI forensic analysts must be instances of anti-rigid gUFO Role"@en ;
            sh:path rdf:type ] ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-ai:CompetencyValidationError . }
            WHERE {
                $this a cacontology-ai:AIForensicAnalyst .
                FILTER NOT EXISTS { 
                    $this cacontology-ai:hasCompetency ?competency .
                    ?competency cacontology-ai:competencyType "ai_content_analysis" .
                }
            }
        """ ;
            sh:message "AI forensic analysts must demonstrate specialized competencies"@en ;
            sh:prefixes cacontology-ai: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-ai:AIForensicAnalyst .

cacontology-ai:AIGeneratedCSAMShape a sh:NodeShape ;
    rdfs:label "AI-Generated CSAM Shape"@en ;
    rdfs:comment "Enhanced validation shape for AI-generated CSAM instances with comprehensive gUFO Object validation."@en ;
    sh:property [ sh:hasValue gufo:Object ;
            sh:message "AI-generated CSAM must be instances of gUFO Object"@en ;
            sh:path rdf:type ],
        [ sh:datatype xsd:string ;
            sh:in ( "fully_synthetic" "partially_altered" "minimally_modified" "hybrid" ) ;
            sh:maxCount 1 ;
            sh:message "Artificialness level must be from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-ai:artificialnessLevel ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Must specify whether real victim is depicted."@en ;
            sh:minCount 1 ;
            sh:path cacontology-ai:realVictimDepicted ],
        [ sh:datatype xsd:string ;
            sh:in ( "low" "medium" "high" "photorealistic" ) ;
            sh:maxCount 1 ;
            sh:message "Rendering quality must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-ai:renderingQuality ],
        [ sh:datatype xsd:string ;
            sh:in ( "Stable Diffusion" "GAN" "VAE" "Transformer" "DALL-E" "Midjourney" "Custom Model" "Unknown" ) ;
            sh:maxCount 1 ;
            sh:message "AI model used must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-ai:aiModelUsed ],
        [ sh:datatype xsd:dateTime ;
            sh:message "AI-generated content must have creation timestamp using gUFO temporal framework"@en ;
            sh:minCount 1 ;
            sh:path cacontology-gufo:creationTimePoint ] ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-ai:GenerationProcessError . }
            WHERE {
                $this a cacontology-ai:AIGeneratedCSAM .
                FILTER NOT EXISTS { 
                    $this cacontology-ai:generatedUsing ?generation .
                    ?generation a gufo:Event .
                }
            }
        """ ;
            sh:message "AI-generated CSAM must be linked to a gUFO Event generation process"@en ;
            sh:prefixes cacontology-ai: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-ai:AIGeneratedCSAM .

cacontology-ai:AIGenerationCrossReferenceShape a sh:NodeShape ;
    rdfs:label "AI Generation Cross Reference Shape"@en ;
    rdfs:comment "Enhanced validation that AI-generated content has associated gUFO Event generation processes."@en ;
    sh:sparql [ sh:message "AI-generated CSAM should have an associated gUFO Event generation process."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-ai:AIGeneratedCSAM .
                FILTER NOT EXISTS {
                    $this cacontology-ai:generatedUsing ?generation .
                    ?generation a cacontology-ai:AIContentGeneration .
                    ?generation a gufo:Event .
                }
            }
        """ ] ;
    sh:targetClass cacontology-ai:AIGeneratedCSAM .

cacontology-ai:AIModelAnalyst a owl:Class ;
    rdfs:label "AI Model Analyst"@en ;
    rdfs:comment "Anti-rigid role of specialist identifying and analyzing AI models used for content generation."@en ;
    rdfs:subClassOf gufo:Role,
        cacontology-ai:AIForensicAnalyst .

cacontology-ai:AgeProgression a owl:Class ;
    rdfs:label "Age Progression"@en ;
    rdfs:comment "AI technique for artificially aging or de-aging subjects in content, potentially creating illegal material from legal content. Enhanced as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-ai:AIContentGeneration .

cacontology-ai:AntiRigidityValidationShape a sh:NodeShape ;
    rdfs:label "Anti-Rigidity Validation Shape"@en ;
    rdfs:comment "Validation of anti-rigidity constraints for gUFO Phases in AI-CSAM contexts."@en ;
    sh:sparql [ sh:message "Anti-rigid phases must demonstrate changeability based on context"@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a gufo:Phase .
                ?this rdfs:subClassOf* cacontology-ai:AIDetectionPhase .
                FILTER NOT EXISTS { 
                    $this cacontology-gufo:hasAntiRigidityConstraint ?constraint .
                }
            }
        """ ] ;
    sh:targetClass cacontology-ai:AIDetectionPhase,
        cacontology-ai:ContentGenerationPhase,
        cacontology-ai:ForensicAnalysisPhase .

cacontology-ai:BiometricInconsistencyAnalysis a owl:Class ;
    rdfs:label "Biometric Inconsistency Analysis"@en ;
    rdfs:comment "Analysis of biometric inconsistencies in AI-generated content, such as unnatural eye movements or facial feature distortions. Enhanced as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-ai:SyntheticMediaAnalysis .

cacontology-ai:ContentGenerationPhaseShape a sh:NodeShape ;
    rdfs:label "Content Generation Phase Shape"@en ;
    rdfs:comment "SHACL shape for content generation phases with anti-rigid gUFO Phase validation."@en ;
    sh:property [ sh:hasValue gufo:Phase ;
            sh:message "Content generation phases must be instances of anti-rigid gUFO Phase"@en ;
            sh:path rdf:type ] ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-ai:PhaseSequenceError . }
            WHERE {
                $this a cacontology-ai:ContentGenerationPhase .
                ?nextPhase cacontology-ai:followsPhase $this .
                ?nextPhase a cacontology-ai:AIDetectionPhase .
                $this cacontology-gufo:endTimePoint ?thisEnd .
                ?nextPhase cacontology-gufo:beginTimePoint ?nextStart .
                FILTER(?nextStart <= ?thisEnd)
            }
        """ ;
            sh:message "Generation phases must follow logical sequence"@en ;
            sh:prefixes cacontology-ai: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-ai:ContentGenerationPhase .

cacontology-ai:CrossPlatformDetectionSituation a owl:Class ;
    rdfs:label "Cross-Platform Detection Situation"@en ;
    rdfs:comment "Situation involving detection and analysis of AI-generated content across multiple platforms and technologies."@en ;
    rdfs:subClassOf gufo:Situation,
        cacontology-ai:AIContentInvestigationSituation .

cacontology-ai:DeepfakeCSAMShape a sh:NodeShape ;
    rdfs:label "Deepfake CSAM Shape"@en ;
    rdfs:comment "Enhanced validation shape for deepfake CSAM instances with gUFO Object validation and manipulation tracking."@en ;
    sh:property [ sh:hasValue true ;
            sh:message "Deepfake CSAM must involve real victim imagery."@en ;
            sh:path cacontology-ai:realVictimDepicted ],
        [ sh:datatype xsd:dateTime ;
            sh:message "Deepfake content must have manipulation timestamp"@en ;
            sh:minCount 1 ;
            sh:path cacontology-gufo:manipulationTimePoint ] ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-ai:TemporalInconsistencyError . }
            WHERE {
                $this cacontology-gufo:manipulationTimePoint ?manipTime .
                $this cacontology-gufo:creationTimePoint ?createTime .
                FILTER(?manipTime <= ?createTime)
            }
        """ ;
            sh:message "Manipulation time must be after original content creation"@en ;
            sh:prefixes cacontology-ai: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-ai:DeepfakeCSAM .

cacontology-ai:DeepfakeDetection a owl:Class ;
    rdfs:label "Deepfake Detection"@en ;
    rdfs:comment "Specialized analysis for detecting deepfake technology use in content, including face replacement and manipulation. Enhanced as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-ai:AIContentDetection .

cacontology-ai:DeepfakeDetectionSpecialist a owl:Class ;
    rdfs:label "Deepfake Detection Specialist"@en ;
    rdfs:comment "Anti-rigid role of specialist focused on detecting and analyzing deepfake technology use."@en ;
    rdfs:subClassOf gufo:Role,
        cacontology-ai:AIForensicAnalyst .

cacontology-ai:DeepfakeDetectionTool a owl:Class ;
    rdfs:label "Deepfake Detection Tool"@en ;
    rdfs:comment "Tool specifically designed to identify deepfake content and face manipulation techniques. Enhanced as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        cacontology-ai:AIDetectionTool .

cacontology-ai:DetectionSequenceValidationShape a sh:NodeShape ;
    rdfs:label "Detection Sequence Validation Shape"@en ;
    rdfs:comment "Enhanced validation that detection gUFO Events occur after content generation gUFO Events."@en ;
    sh:sparql [ sh:message "AI content detection gUFO Events should occur after content generation gUFO Events."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-ai:AIContentDetection ;
                      a gufo:Event ;
                      cacontology-gufo:detectionTimePoint ?detectionTime .
                ?content cacontology-ai:detectedBy $this ;
                         cacontology-ai:generatedUsing ?generation .
                ?generation a gufo:Event ;
                           cacontology-gufo:aiGenerationTimePoint ?generationTime .
                FILTER (?detectionTime < ?generationTime)
            }
        """ ] ;
    sh:targetClass cacontology-ai:AIContentDetection .

cacontology-ai:DetectionToolCrossReferenceShape a sh:NodeShape ;
    rdfs:label "Detection Tool Cross Reference Shape"@en ;
    rdfs:comment "Enhanced validation that AI detection processes use appropriate gUFO Object tools."@en ;
    sh:sparql [ sh:message "AI content detection should use gUFO Object detection tools."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-ai:AIContentDetection .
                FILTER NOT EXISTS {
                    $this cacontology-ai:usesDetectionTool ?tool .
                    ?tool a cacontology-ai:AIDetectionTool .
                    ?tool a gufo:Object .
                }
            }
        """ ] ;
    sh:targetClass cacontology-ai:AIContentDetection .

cacontology-ai:FaceSwapping a owl:Class ;
    rdfs:label "Face Swapping"@en ;
    rdfs:comment "AI technique for replacing faces in existing content with different faces, potentially placing victims in abusive scenarios. Enhanced as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-ai:AIContentGeneration .

cacontology-ai:ForensicIntegrityValidationShape a sh:NodeShape ;
    rdfs:label "Forensic Integrity Validation Shape"@en ;
    rdfs:comment "Validation of forensic integrity for AI content detection processes."@en ;
    sh:sparql [ sh:message "High-confidence AI detection must use multiple detection methods for forensic integrity"@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-ai:detectionConfidence ?confidence .
                FILTER(?confidence > 0.9)
                {
                    SELECT $this (COUNT(?method) AS ?methodCount) WHERE {
                        $this cacontology-ai:detectionMethod ?method .
                    } GROUP BY $this
                }
                FILTER(?methodCount < 2)
            }
        """ ] ;
    sh:targetClass cacontology-ai:AIContentDetection .

cacontology-ai:GUFODataQualityShape a sh:NodeShape ;
    rdfs:label "gUFO Data Quality Shape"@en ;
    rdfs:comment "Enhanced data quality validation for AI-related gUFO entities with foundational ontology compliance."@en ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-ai:FoundationalTypeError . }
            WHERE {
                $this a ?aiType .
                ?aiType rdfs:subClassOf* cacontology-ai:AIGeneratedCSAM .
                FILTER NOT EXISTS { 
                    $this a ?gufoType .
                    ?gufoType rdfs:subClassOf* gufo:Object .
                }
            }
        """ ;
            sh:message "AI entities must be properly typed as gUFO foundational entities"@en ;
            sh:prefixes cacontology-ai: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-ai:AICSAMInvestigation,
        cacontology-ai:AIContentDetection,
        cacontology-ai:AIContentGeneration,
        cacontology-ai:AIDetectionTool,
        cacontology-ai:AIGeneratedCSAM .

cacontology-ai:GUFOTemporalValidationShape a sh:NodeShape ;
    rdfs:label "gUFO Temporal Validation Shape"@en ;
    rdfs:comment "Enhanced temporal consistency validation for AI-related gUFO Events using gUFO temporal framework."@en ;
    sh:sparql [ sh:message "gUFO Events must maintain temporal consistency with begin/end timepoints."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a gufo:Event .
                $this cacontology-gufo:beginTimePoint ?begin .
                $this cacontology-gufo:endTimePoint ?end .
                FILTER (?begin >= ?end)
            }
        """ ] ;
    sh:targetClass cacontology-ai:AICSAMInvestigation,
        cacontology-ai:AIContentDetection,
        cacontology-ai:AIContentGeneration,
        cacontology-ai:GenerationSourceTracking,
        cacontology-ai:ModelIdentification,
        cacontology-ai:TrainingDataAnalysis .

cacontology-ai:HybridCSAMShape a sh:NodeShape ;
    rdfs:label "Hybrid CSAM Shape"@en ;
    rdfs:comment "Enhanced validation shape for hybrid CSAM instances with gUFO Object composition validation."@en ;
    sh:property [ sh:hasValue "hybrid" ;
            sh:message "Hybrid CSAM must have hybrid artificialness level."@en ;
            sh:path cacontology-ai:artificialnessLevel ] ;
    sh:targetClass cacontology-ai:HybridCSAM .

cacontology-ai:ImageGeneration a owl:Class ;
    rdfs:label "Image Generation"@en ;
    rdfs:comment "Generation of static images using AI models such as diffusion models, GANs, or other generative techniques. Enhanced as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-ai:AIContentGeneration .

cacontology-ai:MetadataAnalysisTool a owl:Class ;
    rdfs:label "Metadata Analysis Tool"@en ;
    rdfs:comment "Tool for analyzing metadata patterns that may indicate AI generation or manipulation. Enhanced as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        cacontology-ai:AIDetectionTool .

cacontology-ai:ModelTrainingShape a sh:NodeShape ;
    rdfs:label "Model Training Shape"@en ;
    rdfs:comment "Enhanced validation shape for model training instances with gUFO Event validation and training phases."@en ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-ai:PhaseValidationError . }
            WHERE {
                $this a cacontology-ai:ModelTraining .
                FILTER NOT EXISTS { 
                    $this cacontology-ai:hasPhase ?phase .
                    ?phase a cacontology-ai:ContentGenerationPhase .
                }
            }
        """ ;
            sh:message "Model training should involve generation phases"@en ;
            sh:prefixes cacontology-ai: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-ai:ModelTraining .

cacontology-ai:NudificationShape a sh:NodeShape ;
    rdfs:label "Nudification Shape"@en ;
    rdfs:comment "Validation shape for nudification actions producing synthetic nudity, consistent with AI generation process modeling."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:message "Nudification technique, if present, must be a string."@en ;
            sh:minCount 0 ;
            sh:path cacontology-ai:nudificationTechnique ],
        [ sh:message "Nudification action should produce at least one result via uco-action:result."@en ;
            sh:minCount 1 ;
            sh:path uco-action:result ] ;
    sh:targetClass cacontology-ai:Nudification .

cacontology-ai:NudificationToolShape a sh:NodeShape ;
    rdfs:label "Nudification Tool Shape"@en ;
    rdfs:comment "Validation shape for tools capable of AI-enabled nudification (synthetic nudity)."@en ;
    sh:targetClass cacontology-ai:NudificationTool .

cacontology-ai:NudifiedCSAMShape a sh:NodeShape ;
    rdfs:label "Nudified CSAM Shape"@en ;
    rdfs:comment "Validation shape for nudified CSAM outputs."@en ;
    sh:property [ sh:maxCount 1 ;
            sh:message "Nudified content may link to at most one source media via cacontology-ai:nudifiedFrom."@en ;
            sh:minCount 0 ;
            sh:path cacontology-ai:nudifiedFrom ] ;
    sh:targetClass cacontology-ai:NudifiedCSAM .

cacontology-ai:SyntheticImageDetector a owl:Class ;
    rdfs:label "Synthetic Image Detector"@en ;
    rdfs:comment "Tool for detecting synthetically generated images using machine learning classifiers. Enhanced as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        cacontology-ai:AIDetectionTool .

cacontology-ai:SyntheticMediaAnalysisShape a sh:NodeShape ;
    rdfs:label "Synthetic Media Analysis Shape"@en ;
    rdfs:comment "Enhanced validation shape for synthetic media analysis instances with gUFO Event and specialist role validation."@en ;
    sh:property [ sh:class uco-identity:Person ;
            sh:maxCount 1 ;
            sh:message "Synthetic media analysis must specify performing analyst."@en ;
            sh:minCount 1 ;
            sh:path uco-action:performer ],
        [ sh:datatype xsd:dateTime ;
            sh:message "Analysis completion should use gUFO temporal framework"@en ;
            sh:minCount 0 ;
            sh:path cacontology-gufo:analysisCompletionTimePoint ] ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-ai:SpecialistQualificationError . }
            WHERE {
                $this a cacontology-ai:SyntheticMediaAnalysis .
                $this uco-action:performer ?performer .
                FILTER NOT EXISTS { 
                    ?performer cacontology-ai:playsRole cacontology-ai:SyntheticMediaExaminer .
                }
            }
        """ ;
            sh:message "Synthetic media analysis must be performed by qualified specialists"@en ;
            sh:prefixes cacontology-ai: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-ai:SyntheticMediaAnalysis .

cacontology-ai:SyntheticMediaCSAMShape a sh:NodeShape ;
    rdfs:label "Synthetic Media CSAM Shape"@en ;
    rdfs:comment "Enhanced validation shape for synthetic media CSAM instances with gUFO Object validation."@en ;
    sh:property [ sh:hasValue "fully_synthetic" ;
            sh:message "Synthetic media CSAM must be fully synthetic."@en ;
            sh:path cacontology-ai:artificialnessLevel ] ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-ai:SyntheticContentError . }
            WHERE {
                $this cacontology-ai:artificialnessLevel "fully_synthetic" .
                $this cacontology-ai:realVictimDepicted true .
            }
        """ ;
            sh:message "Fully synthetic content cannot depict real victims"@en ;
            sh:prefixes cacontology-ai: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-ai:SyntheticMediaCSAM .

cacontology-ai:SyntheticMediaExaminerShape a sh:NodeShape ;
    rdfs:label "Synthetic Media Examiner Shape"@en ;
    rdfs:comment "SHACL shape for synthetic media examiner roles with specialized gUFO Role validation."@en ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-ai:SpecializedCompetencyError . }
            WHERE {
                $this a cacontology-ai:SyntheticMediaExaminer .
                FILTER NOT EXISTS { 
                    $this cacontology-ai:hasCompetency ?competency .
                    ?competency cacontology-ai:competencyType "synthetic_media_analysis" .
                }
            }
        """ ;
            sh:message "Synthetic media examiners must have synthetic media analysis competency"@en ;
            sh:prefixes cacontology-ai: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-ai:SyntheticMediaExaminer .

cacontology-ai:TechnicalAnalysisSituationShape a sh:NodeShape ;
    rdfs:label "Technical Analysis Situation Shape"@en ;
    rdfs:comment "SHACL shape for technical analysis situations with coordination validation."@en ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-ai:CoordinationValidationError . }
            WHERE {
                $this a cacontology-ai:TechnicalAnalysisSituation .
                FILTER NOT EXISTS { 
                    $this cacontology-ai:hasParticipant ?expert .
                    ?expert cacontology-ai:playsRole ?role .
                    ?role rdfs:subClassOf* cacontology-ai:AIForensicAnalyst .
                }
                FILTER NOT EXISTS { 
                    $this cacontology-ai:hasParticipant ?legal .
                    ?legal cacontology-ai:playsRole ?legalRole .
                    ?legalRole cacontology-ai:roleType "legal_specialist" .
                }
            }
        """ ;
            sh:message "Technical analysis situations must coordinate between experts and legal teams"@en ;
            sh:prefixes cacontology-ai: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-ai:TechnicalAnalysisSituation .

cacontology-ai:VideoGeneration a owl:Class ;
    rdfs:label "Video Generation"@en ;
    rdfs:comment "Generation of video content using AI models capable of creating temporal sequences and motion. Enhanced as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-ai:AIContentGeneration .

cacontology-ai:analyzesTrainingData a owl:ObjectProperty ;
    rdfs:label "analyzes training data"@en ;
    rdfs:comment "Links investigation to training data analysis performed."@en ;
    rdfs:domain cacontology-ai:AICSAMInvestigation ;
    rdfs:range cacontology-ai:TrainingDataAnalysis .

cacontology-ai:artifactsDetected a owl:DatatypeProperty ;
    rdfs:label "artifacts detected"@en ;
    rdfs:comment "Specific artifacts indicating AI generation (compression_anomalies, facial_inconsistencies, lighting_errors)."@en ;
    rdfs:domain cacontology-ai:ArtifactAnalysis ;
    rdfs:range xsd:string .

cacontology-ai:basedOnModel a owl:ObjectProperty ;
    rdfs:label "based on model"@en ;
    rdfs:comment "Links generation process to the AI model used."@en ;
    rdfs:domain cacontology-ai:AIContentGeneration ;
    rdfs:range uco-observable:ObservableObject .

cacontology-ai:challengesLegalFramework a owl:ObjectProperty ;
    rdfs:label "challenges legal framework"@en ;
    rdfs:comment "Links AI-CSAM to legal framework challenges it creates."@en ;
    rdfs:domain cacontology-ai:AIGeneratedCSAM ;
    rdfs:range uco-observable:ObservableObject .

cacontology-ai:complicatesVictimIdentification a owl:ObjectProperty ;
    rdfs:label "complicates victim identification"@en ;
    rdfs:comment "Links AI-generated content to victim identification processes it affects."@en ;
    rdfs:domain cacontology-ai:AIGeneratedCSAM ;
    rdfs:range uco-action:Action .

cacontology-ai:detectedBy a owl:ObjectProperty ;
    rdfs:label "detected by"@en ;
    rdfs:comment "Links AI-generated content to detection analysis performed."@en ;
    rdfs:domain cacontology-ai:AIGeneratedCSAM ;
    rdfs:range cacontology-ai:AIContentDetection .

cacontology-ai:generatedUsing a owl:ObjectProperty ;
    rdfs:label "generated using"@en ;
    rdfs:comment "Links AI-generated content to the generation process used."@en ;
    rdfs:domain cacontology-ai:AIGeneratedCSAM ;
    rdfs:range cacontology-ai:AIContentGeneration .

cacontology-ai:requiresSpecializedProsecution a owl:ObjectProperty ;
    rdfs:label "requires specialized prosecution"@en ;
    rdfs:comment "Links AI-CSAM investigation to specialized prosecution approaches needed."@en ;
    rdfs:domain cacontology-ai:AICSAMInvestigation ;
    rdfs:range uco-action:Action .

cacontology-ai:revealsArtifacts a owl:ObjectProperty ;
    rdfs:label "reveals artifacts"@en ;
    rdfs:comment "Links detection analysis to artifacts discovered."@en ;
    rdfs:domain cacontology-ai:AIContentDetection ;
    rdfs:range uco-observable:ObservableObject .

cacontology-ai:sourceTraceability a owl:DatatypeProperty ;
    rdfs:label "source traceability"@en ;
    rdfs:comment "Degree to which generation source can be traced (untraceable, limited, moderate, high)."@en ;
    rdfs:domain cacontology-ai:GenerationSourceTracking ;
    rdfs:range xsd:string .

cacontology-ai:subjectOfInvestigation a owl:ObjectProperty ;
    rdfs:label "subject of investigation"@en ;
    rdfs:comment "Links AI-generated content to investigations examining it."@en ;
    rdfs:domain cacontology-ai:AIGeneratedCSAM ;
    rdfs:range cacontology-ai:AICSAMInvestigation .

cacontology-ai:tracesToSource a owl:ObjectProperty ;
    rdfs:label "traces to source"@en ;
    rdfs:comment "Links source tracking to identified origin or creator."@en ;
    rdfs:domain cacontology-ai:GenerationSourceTracking ;
    rdfs:range uco-identity:Identity .

cacontology-ai:usesDetectionTool a owl:ObjectProperty ;
    rdfs:label "uses detection tool"@en ;
    rdfs:comment "Links detection process to tools used for analysis."@en ;
    rdfs:domain cacontology-ai:AIContentDetection ;
    rdfs:range cacontology-ai:AIDetectionTool .

cacontology-ai:usesNudificationTool a owl:ObjectProperty ;
    rdfs:label "uses nudification tool"@en ;
    dcterms:source "Community & Intelligence Beyond Detection (Global Emancipation Network), 2026-02-10."@en ;
    rdfs:comment "Links a nudification process to the nudification tool/functionality used."@en ;
    rdfs:domain cacontology-ai:Nudification ;
    rdfs:range cacontology-ai:NudificationTool ;
    rdfs:seeAlso <https://www.linkedin.com/pulse/community-intelligence-beyond-detection-global-emancipation-network-xvemc/> ;
    rdfs:subPropertyOf cacontology-ai:utilizesTool .

cacontology-analyst:ExposureMitigationMeasureShape a sh:NodeShape ;
    rdfs:label "Exposure Mitigation Measure Shape"@en ;
    rdfs:comment "Validates exposure mitigation measures with a controlled mitigationType vocabulary."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "hash_only_review" "blurred_preview" "progressive_reveal" "frame_sampling" "audio_removed" "other" ) ;
            sh:maxCount 1 ;
            sh:message "Exposure mitigation measure must have mitigationType from allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-analyst:mitigationType ] ;
    sh:targetClass cacontology-analyst:ExposureMitigationMeasure .

cacontology-analyst:ManualClassificationExposureMitigationShape a sh:NodeShape ;
    rdfs:label "Manual Classification Exposure Mitigation Shape"@en ;
    rdfs:comment "Ensures that any exposure mitigation referenced from manual classification actions is properly typed."@en ;
    sh:property [ sh:class cacontology-analyst:ExposureMitigationMeasure ;
            sh:message "usesExposureMitigation values must be ExposureMitigationMeasure instances."@en ;
            sh:minCount 0 ;
            sh:path cacontology-analyst:usesExposureMitigation ] ;
    sh:targetClass cacontology-detection:ManualClassificationAction .

cacontology-analyst:OccupationalHarmShape a sh:NodeShape ;
    rdfs:label "Occupational Harm Shape"@en ;
    rdfs:comment "Validates occupational harm situations with optional harmSeverity."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "low" "medium" "high" "unknown" ) ;
            sh:maxCount 1 ;
            sh:message "Occupational harm severity must be from allowed list when present."@en ;
            sh:minCount 0 ;
            sh:path cacontology-analyst:harmSeverity ] ;
    sh:targetClass cacontology-analyst:OccupationalHarm .

cacontology-analyst:PersonOccupationalHarmShape a sh:NodeShape ;
    rdfs:label "Person Occupational Harm Shape"@en ;
    rdfs:comment "Ensures that any occupational harm referenced from persons is properly typed."@en ;
    sh:property [ sh:class cacontology-analyst:OccupationalHarm ;
            sh:message "experiencesOccupationalHarm values must be OccupationalHarm instances."@en ;
            sh:minCount 0 ;
            sh:path cacontology-analyst:experiencesOccupationalHarm ] ;
    sh:targetClass uco-identity:Person .

cacontology-analyst:SecondaryTraumaticStress a owl:Class ;
    rdfs:label "Secondary Traumatic Stress"@en ;
    dcterms:source "Community & Intelligence Beyond Detection (Global Emancipation Network), 2026-02-10."@en ;
    rdfs:comment "Occupational stress reactions arising from indirect exposure to others' trauma, including exposure through content review and investigative materials."@en ;
    rdfs:seeAlso <https://www.linkedin.com/pulse/community-intelligence-beyond-detection-global-emancipation-network-xvemc/> ;
    rdfs:subClassOf cacontology-analyst:OccupationalHarm .

cacontology-analyst:VicariousTrauma a owl:Class ;
    rdfs:label "Vicarious Trauma"@en ;
    dcterms:source "Community & Intelligence Beyond Detection (Global Emancipation Network), 2026-02-10."@en ;
    rdfs:comment "A form of occupational harm in which repeated exposure to traumatic material produces trauma-like impacts in the reviewer."@en ;
    rdfs:seeAlso <https://www.linkedin.com/pulse/community-intelligence-beyond-detection-global-emancipation-network-xvemc/> ;
    rdfs:subClassOf cacontology-analyst:OccupationalHarm .

cacontology-asset-forfeiture:AntiRigidityValidationShape a sh:NodeShape ;
    rdfs:label "Anti-Rigidity Validation Shape"@en ;
    rdfs:comment "Validation of anti-rigidity constraints for gUFO Phases in asset forfeiture contexts."@en ;
    sh:sparql [ sh:message "Anti-rigid phases must demonstrate changeability based on forfeiture context"@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a gufo:Phase .
                ?this rdfs:subClassOf* cacontology-asset-forfeiture:AssetIdentificationPhase .
                FILTER NOT EXISTS { 
                    $this cacontology-gufo:hasAntiRigidityConstraint ?constraint .
                }
            }
        """ ] ;
    sh:targetClass cacontology-asset-forfeiture:AssetIdentificationPhase,
        cacontology-asset-forfeiture:LegalProceedingsPhase,
        cacontology-asset-forfeiture:RecoveryPhase,
        cacontology-asset-forfeiture:RestraintPhase .

cacontology-asset-forfeiture:AssetForfeitureActionShape a sh:NodeShape ;
    rdfs:label "Asset Forfeiture Action Shape"@en ;
    rdfs:comment "Enhanced validation shape for asset forfeiture actions with comprehensive gUFO Event validation."@en ;
    sh:property [ sh:hasValue gufo:Event ;
            sh:message "Asset forfeiture actions must be instances of gUFO Event"@en ;
            sh:path rdf:type ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Asset forfeiture action must specify begin time using gUFO temporal framework"@en ;
            sh:minCount 1 ;
            sh:path cacontology-gufo:forfeitureBeginTime ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Asset forfeiture action may specify end time using gUFO temporal framework"@en ;
            sh:minCount 0 ;
            sh:path cacontology-gufo:forfeitureEndTime ],
        [ sh:class uco-observable:ObservableObject ;
            sh:message "Asset forfeiture action must target at least one asset"@en ;
            sh:minCount 1 ;
            sh:path cacontology-asset-forfeiture:targetedAsset ],
        [ sh:class cacontology-asset-forfeiture:CriminalAssetsConfiscationTaskforce ;
            sh:maxCount 1 ;
            sh:message "Asset forfeiture action may involve CACT"@en ;
            sh:minCount 0 ;
            sh:path cacontology-asset-forfeiture:involvesTaskforce ],
        [ sh:message "Asset forfeiture action must be related to criminal charges"@en ;
            sh:minCount 1 ;
            sh:path cacontology-asset-forfeiture:relatedCriminalCharges ],
        [ sh:class gufo:Phase ;
            sh:maxCount 1 ;
            sh:message "Asset forfeiture action may specify current operational phase"@en ;
            sh:minCount 0 ;
            sh:path cacontology-asset-forfeiture:currentPhase ] ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-asset-forfeiture:TemporalInconsistencyError . }
            WHERE {
                $this cacontology-gufo:forfeitureBeginTime ?begin .
                $this cacontology-gufo:forfeitureEndTime ?end .
                FILTER(?end <= ?begin)
            }
        """ ;
            sh:message "Forfeiture end time must be after begin time"@en ;
            sh:prefixes cacontology-asset-forfeiture: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-asset-forfeiture:AssetForfeitureAction .

cacontology-asset-forfeiture:AssetForfeitureOfficerShape a sh:NodeShape ;
    rdfs:label "Asset Forfeiture Officer Shape"@en ;
    rdfs:comment "SHACL shape for asset forfeiture officer roles with anti-rigid gUFO Role validation."@en ;
    sh:property [ sh:hasValue gufo:Role ;
            sh:message "Asset forfeiture officers must be instances of anti-rigid gUFO Role"@en ;
            sh:path rdf:type ] ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-asset-forfeiture:CompetencyValidationError . }
            WHERE {
                $this a cacontology-asset-forfeiture:AssetForfeitureOfficer .
                FILTER NOT EXISTS { 
                    $this cacontology-asset-forfeiture:hasCompetency ?competency .
                    ?competency cacontology-asset-forfeiture:competencyType "asset_forfeiture" .
                }
            }
        """ ;
            sh:message "Asset forfeiture officers must have appropriate training and certification"@en ;
            sh:prefixes cacontology-asset-forfeiture: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-asset-forfeiture:AssetForfeitureOfficer .

cacontology-asset-forfeiture:AssetIdentificationPhaseShape a sh:NodeShape ;
    rdfs:label "Asset Identification Phase Shape"@en ;
    rdfs:comment "SHACL shape for asset identification phases with anti-rigid gUFO Phase validation."@en ;
    sh:property [ sh:hasValue gufo:Phase ;
            sh:message "Asset identification phases must be instances of anti-rigid gUFO Phase"@en ;
            sh:path rdf:type ],
        [ sh:datatype xsd:dateTime ;
            sh:message "Phase may specify transition times"@en ;
            sh:minCount 0 ;
            sh:path cacontology-gufo:phaseTransitionTime ] ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-asset-forfeiture:AntiRigidityError . }
            WHERE {
                $this a cacontology-asset-forfeiture:AssetIdentificationPhase .
                FILTER NOT EXISTS { 
                    $this cacontology-gufo:hasAntiRigidityConstraint ?constraint .
                }
            }
        """ ;
            sh:message "Asset identification phases must demonstrate anti-rigidity (duration varies based on complexity)"@en ;
            sh:prefixes cacontology-asset-forfeiture: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-asset-forfeiture:AssetIdentificationPhase .

cacontology-asset-forfeiture:AssetTargetingCrossReferenceShape a sh:NodeShape ;
    rdfs:label "Asset Targeting Cross Reference Shape"@en ;
    rdfs:comment "Enhanced validation that asset forfeiture actions target appropriate gUFO Object assets."@en ;
    sh:sparql [ sh:message "Asset forfeiture actions should target gUFO Object assets with established ownership."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-asset-forfeiture:AssetForfeitureAction .
                $this cacontology-asset-forfeiture:targetedAsset ?asset .
                FILTER NOT EXISTS {
                    ?asset a gufo:Object .
                    ?asset uco-observable:propertyOwner ?owner .
                }
            }
        """ ] ;
    sh:targetClass cacontology-asset-forfeiture:AssetForfeitureAction .

cacontology-asset-forfeiture:AssetValuationExpertShape a sh:NodeShape ;
    rdfs:label "Asset Valuation Expert Shape"@en ;
    rdfs:comment "SHACL shape for asset valuation expert roles with specialized gUFO Role validation."@en ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-asset-forfeiture:QualificationError . }
            WHERE {
                $this a cacontology-asset-forfeiture:AssetValuationExpert .
                FILTER NOT EXISTS { 
                    $this cacontology-asset-forfeiture:hasQualification ?qualification .
                    ?qualification cacontology-asset-forfeiture:qualificationType "professional_valuation" .
                }
            }
        """ ;
            sh:message "Asset valuation experts must have professional qualifications"@en ;
            sh:prefixes cacontology-asset-forfeiture: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-asset-forfeiture:AssetValuationExpert .

cacontology-asset-forfeiture:CACTInvestigationShape a sh:NodeShape ;
    rdfs:label "CACT Investigation Shape"@en ;
    rdfs:comment "Enhanced validation shape for CACT investigations with gUFO Event validation and investigation phases."@en ;
    sh:property [ sh:hasValue gufo:Event ;
            sh:message "CACT investigations must be instances of gUFO Event"@en ;
            sh:path rdf:type ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "CACT investigation must specify begin time"@en ;
            sh:minCount 1 ;
            sh:path cacontology-gufo:investigationBeginTime ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "CACT investigation may specify end time"@en ;
            sh:minCount 0 ;
            sh:path cacontology-gufo:investigationEndTime ],
        [ sh:class cacontology-asset-forfeiture:CriminalAssetsConfiscationTaskforce ;
            sh:maxCount 1 ;
            sh:message "CACT investigation must be performed by CACT"@en ;
            sh:minCount 1 ;
            sh:path uco-action:performer ] ;
    sh:targetClass cacontology-asset-forfeiture:CACTInvestigation .

cacontology-asset-forfeiture:CompleteForfeitureShape a sh:NodeShape ;
    rdfs:label "Complete Forfeiture Shape"@en ;
    rdfs:comment "Enhanced validation shape for complete forfeiture with gUFO Object validation."@en ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-asset-forfeiture:CourtAuthorizationError . }
            WHERE {
                $this a cacontology-asset-forfeiture:CompleteForfeiture .
                FILTER NOT EXISTS { 
                    $this cacontology-asset-forfeiture:hasCourtAuthorization ?authorization .
                    ?authorization cacontology-asset-forfeiture:authorizationType "complete_forfeiture" .
                }
            }
        """ ;
            sh:message "Complete forfeiture must have court authorization"@en ;
            sh:prefixes cacontology-asset-forfeiture: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-asset-forfeiture:CompleteForfeiture .

cacontology-asset-forfeiture:ConsentOrder a owl:Class ;
    rdfs:label "Consent Order"@en ;
    rdfs:comment "Court order agreed to by parties for financial penalty payment. Enhanced as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        cacontology-asset-forfeiture:ForfeitureOutcome .

cacontology-asset-forfeiture:CriminalAssetsConfiscationTaskforceShape a sh:NodeShape ;
    rdfs:label "Criminal Assets Confiscation Taskforce Shape"@en ;
    rdfs:comment "Enhanced validation shape for CACT with gUFO Organization validation and operational framework validation."@en ;
    sh:property [ sh:hasValue gufo:Organization ;
            sh:message "CACT must be instance of gUFO Organization"@en ;
            sh:path rdf:type ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "CACT must have a name (5-200 characters)"@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path uco-core:name ] ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-asset-forfeiture:AuthorityValidationError . }
            WHERE {
                $this a cacontology-asset-forfeiture:CriminalAssetsConfiscationTaskforce .
                FILTER NOT EXISTS { 
                    $this cacontology-asset-forfeiture:hasLegalAuthority ?authority .
                    ?authority cacontology-asset-forfeiture:authorityType "asset_confiscation" .
                }
            }
        """ ;
            sh:message "CACT must have appropriate legal authority for asset confiscation"@en ;
            sh:prefixes cacontology-asset-forfeiture: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-asset-forfeiture:CriminalAssetsConfiscationTaskforce .

cacontology-asset-forfeiture:FinancialAccountShape a sh:NodeShape ;
    rdfs:label "Financial Account Shape"@en ;
    rdfs:comment "Enhanced validation shape for financial accounts with gUFO Object validation and financial verification."@en ;
    sh:property [ sh:hasValue gufo:Object ;
            sh:message "Financial account must be instance of gUFO Object"@en ;
            sh:path rdf:type ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:message "Account funds must be non-negative"@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-asset-forfeiture:accountFunds ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:message "Financial account must specify institution"@en ;
            sh:minCount 1 ;
            sh:minLength 2 ;
            sh:path cacontology-asset-forfeiture:financialInstitution ] ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-asset-forfeiture:FinancialVerificationError . }
            WHERE {
                $this a cacontology-asset-forfeiture:FinancialAccount .
                FILTER NOT EXISTS { 
                    $this cacontology-asset-forfeiture:hasVerification ?verification .
                    ?verification cacontology-asset-forfeiture:verificationType "institutional_records" .
                }
            }
        """ ;
            sh:message "Financial accounts must be verified through financial institution records"@en ;
            sh:prefixes cacontology-asset-forfeiture: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-asset-forfeiture:FinancialAccount .

cacontology-asset-forfeiture:FinancialPenaltyActionShape a sh:NodeShape ;
    rdfs:label "Financial Penalty Action Shape"@en ;
    rdfs:comment "Enhanced validation shape for financial penalty actions with gUFO Event penalty modeling."@en ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:message "Financial penalty amount must be positive"@en ;
            sh:minCount 1 ;
            sh:minExclusive 0.0 ;
            sh:path cacontology-asset-forfeiture:financialPenaltyAmount ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Financial penalty action must specify imposition time"@en ;
            sh:minCount 1 ;
            sh:path cacontology-gufo:penaltyImpositionTime ] ;
    sh:targetClass cacontology-asset-forfeiture:FinancialPenaltyAction .

cacontology-asset-forfeiture:ForensicAccountantShape a sh:NodeShape ;
    rdfs:label "Forensic Accountant Shape"@en ;
    rdfs:comment "SHACL shape for forensic accountant roles with specialized gUFO Role validation."@en ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-asset-forfeiture:ExpertiseValidationError . }
            WHERE {
                $this a cacontology-asset-forfeiture:ForensicAccountant .
                FILTER NOT EXISTS { 
                    $this cacontology-asset-forfeiture:hasExpertise ?expertise .
                    ?expertise cacontology-asset-forfeiture:expertiseType "financial_analysis" .
                }
            }
        """ ;
            sh:message "Forensic accountants must have financial analysis expertise"@en ;
            sh:prefixes cacontology-asset-forfeiture: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-asset-forfeiture:ForensicAccountant .

cacontology-asset-forfeiture:GUFODataQualityShape a sh:NodeShape ;
    rdfs:label "gUFO Data Quality Shape"@en ;
    rdfs:comment "Enhanced data quality validation for asset forfeiture gUFO entities with foundational ontology compliance."@en ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-asset-forfeiture:FoundationalTypeError . }
            WHERE {
                $this a ?assetType .
                ?assetType rdfs:subClassOf* cacontology-asset-forfeiture:AssetForfeitureAction .
                FILTER NOT EXISTS { 
                    $this a ?gufoType .
                    ?gufoType rdfs:subClassOf* gufo:Event .
                }
            }
        """ ;
            sh:message "Asset forfeiture entities must be properly typed as gUFO foundational entities"@en ;
            sh:prefixes cacontology-asset-forfeiture: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-asset-forfeiture:AssetForfeitureAction,
        cacontology-asset-forfeiture:CriminalAssetsConfiscationTaskforce,
        cacontology-asset-forfeiture:FinancialAccount,
        cacontology-asset-forfeiture:ResidentialProperty,
        cacontology-asset-forfeiture:TechnicalEquipment .

cacontology-asset-forfeiture:GUFOTemporalValidationShape a sh:NodeShape ;
    rdfs:label "gUFO Temporal Validation Shape"@en ;
    rdfs:comment "Enhanced temporal consistency validation for asset forfeiture gUFO Events using gUFO temporal framework."@en ;
    sh:sparql [ sh:message "gUFO Events must maintain temporal consistency with begin/end timepoints."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a gufo:Event .
                $this cacontology-gufo:forfeitureBeginTime ?begin .
                $this cacontology-gufo:forfeitureEndTime ?end .
                FILTER (?begin >= ?end)
            }
        """ ] ;
    sh:targetClass cacontology-asset-forfeiture:AssetAssessmentAction,
        cacontology-asset-forfeiture:AssetForfeitureAction,
        cacontology-asset-forfeiture:CACTInvestigation .

cacontology-asset-forfeiture:InstrumentOfOffense a owl:Class ;
    rdfs:label "Instrument of Offense"@en ;
    rdfs:comment "Assets used as instruments in the commission of child exploitation offenses. Enhanced as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        cacontology-asset-forfeiture:LegalBasisForForfeiture .

cacontology-asset-forfeiture:JurisdictionalCoordinationShape a sh:NodeShape ;
    rdfs:label "Jurisdictional Coordination Shape"@en ;
    rdfs:comment "SHACL shape for jurisdictional coordination situations with comprehensive gUFO Situation validation."@en ;
    sh:property [ sh:hasValue gufo:Situation ;
            sh:message "Jurisdictional coordination must be instance of gUFO Situation"@en ;
            sh:path rdf:type ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Jurisdictional coordination must specify begin time"@en ;
            sh:minCount 1 ;
            sh:path cacontology-gufo:coordinationBeginTime ] ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-asset-forfeiture:CoordinationValidationError . }
            WHERE {
                $this a cacontology-asset-forfeiture:JurisdictionalCoordination .
                {
                    SELECT $this (COUNT(?authority) AS ?authorityCount) WHERE {
                        $this cacontology-asset-forfeiture:hasParticipant ?authority .
                        ?authority a gufo:Organization .
                        ?authority cacontology-asset-forfeiture:organizationType "legal_authority" .
                    } GROUP BY $this
                }
                FILTER(?authorityCount < 2)
            }
        """ ;
            sh:message "Jurisdictional coordination must involve multiple legal authorities"@en ;
            sh:prefixes cacontology-asset-forfeiture: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-asset-forfeiture:JurisdictionalCoordination .

cacontology-asset-forfeiture:LegalCounsel a owl:Class ;
    rdfs:label "Legal Counsel"@en ;
    rdfs:comment "Legal counsel specialized in asset forfeiture law and proceedings. Enhanced as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf gufo:Role,
        uco-role:Role ;
    cacontology-gufo:hasAntiRigidityConstraint "Role assignment changes based on jurisdictional requirements and case complexity" .

cacontology-asset-forfeiture:LegalIntegrityValidationShape a sh:NodeShape ;
    rdfs:label "Legal Integrity Validation Shape"@en ;
    rdfs:comment "Validation of legal integrity for asset forfeiture proceedings."@en ;
    sh:sparql [ sh:message "High-value asset forfeiture must have proper legal authorization and documentation"@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-asset-forfeiture:targetedAsset ?asset .
                ?asset cacontology-asset-forfeiture:estimatedValue ?value .
                FILTER(?value > 100000)
                FILTER NOT EXISTS {
                    $this cacontology-asset-forfeiture:hasLegalAuthorization ?authorization .
                    ?authorization cacontology-asset-forfeiture:authorizationType "court_order" .
                }
            }
        """ ] ;
    sh:targetClass cacontology-asset-forfeiture:AssetForfeitureAction .

cacontology-asset-forfeiture:LegalProceedingsPhaseShape a sh:NodeShape ;
    rdfs:label "Legal Proceedings Phase Shape"@en ;
    rdfs:comment "SHACL shape for legal proceedings phases with anti-rigid gUFO Phase validation."@en ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-asset-forfeiture:CourtInvolvementError . }
            WHERE {
                $this a cacontology-asset-forfeiture:LegalProceedingsPhase .
                FILTER NOT EXISTS { 
                    $this cacontology-asset-forfeiture:involvesCourtProceeding ?proceeding .
                    ?proceeding a cacontology-asset-forfeiture:LegalProceedingsSituation .
                }
            }
        """ ;
            sh:message "Legal proceedings phase must involve court proceedings"@en ;
            sh:prefixes cacontology-asset-forfeiture: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-asset-forfeiture:LegalProceedingsPhase .

cacontology-asset-forfeiture:LegalProceedingsSituationShape a sh:NodeShape ;
    rdfs:label "Legal Proceedings Situation Shape"@en ;
    rdfs:comment "SHACL shape for legal proceedings situations with multi-party validation."@en ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-asset-forfeiture:LegalParticipationError . }
            WHERE {
                $this a cacontology-asset-forfeiture:LegalProceedingsSituation .
                FILTER NOT EXISTS { 
                    $this cacontology-asset-forfeiture:hasParticipant ?court .
                    ?court a cacontology-asset-forfeiture:StateSupremeCourt .
                }
                FILTER NOT EXISTS { 
                    $this cacontology-asset-forfeiture:hasParticipant ?counsel .
                    ?counsel cacontology-asset-forfeiture:playsRole cacontology-asset-forfeiture:LegalCounsel .
                }
            }
        """ ;
            sh:message "Legal proceedings must involve courts, legal counsel, and enforcement agencies"@en ;
            sh:prefixes cacontology-asset-forfeiture: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-asset-forfeiture:LegalProceedingsSituation .

cacontology-asset-forfeiture:MultiStateForfeitureShape a sh:NodeShape ;
    rdfs:label "Multi-State Forfeiture Shape"@en ;
    rdfs:comment "Enhanced validation shape for multi-state forfeiture with gUFO Situation validation and jurisdictional coordination."@en ;
    sh:property [ sh:hasValue gufo:Situation ;
            sh:message "Multi-state forfeiture must be instance of gUFO Situation"@en ;
            sh:path rdf:type ] ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-asset-forfeiture:JurisdictionalError . }
            WHERE {
                $this a cacontology-asset-forfeiture:MultiStateForfeiture .
                {
                    SELECT $this (COUNT(DISTINCT ?jurisdiction) AS ?jurisdictionCount) WHERE {
                        $this cacontology-asset-forfeiture:involvesJurisdiction ?jurisdiction .
                    } GROUP BY $this
                }
                FILTER(?jurisdictionCount < 2)
            }
        """ ;
            sh:message "Multi-state forfeiture must involve multiple jurisdictions"@en ;
            sh:prefixes cacontology-asset-forfeiture: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-asset-forfeiture:MultiStateForfeiture .

cacontology-asset-forfeiture:NonProfitOffenderAssets a owl:Class ;
    rdfs:label "Non-Profit Offender Assets"@en ;
    rdfs:comment "Assets of offenders who were not accused of profiting from their crimes, representing first-of-kind forfeiture precedent. Enhanced as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        cacontology-asset-forfeiture:LegalBasisForForfeiture .

cacontology-asset-forfeiture:PartialForfeitureShape a sh:NodeShape ;
    rdfs:label "Partial Forfeiture Shape"@en ;
    rdfs:comment "Enhanced validation shape for partial forfeiture with gUFO Object validation and percentage constraints."@en ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxExclusive 100.0 ;
            sh:message "Forfeiture percentage must be between 0 and 100"@en ;
            sh:minCount 1 ;
            sh:minExclusive 0.0 ;
            sh:path cacontology-asset-forfeiture:forfeiturePercentage ] ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-asset-forfeiture:JustificationError . }
            WHERE {
                $this a cacontology-asset-forfeiture:PartialForfeiture .
                FILTER NOT EXISTS { 
                    $this cacontology-asset-forfeiture:hasLegalJustification ?justification .
                    ?justification cacontology-asset-forfeiture:justificationType "partial_forfeiture" .
                }
            }
        """ ;
            sh:message "Partial forfeiture must have legal justification for percentage"@en ;
            sh:prefixes cacontology-asset-forfeiture: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-asset-forfeiture:PartialForfeiture .

cacontology-asset-forfeiture:PhaseSequenceValidationShape a sh:NodeShape ;
    rdfs:label "Phase Sequence Validation Shape"@en ;
    rdfs:comment "Enhanced validation that asset forfeiture gUFO Events follow logical phase sequences."@en ;
    sh:sparql [ sh:message "Asset forfeiture actions should follow logical phase sequences with proper temporal ordering."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-asset-forfeiture:AssetForfeitureAction .
                $this cacontology-asset-forfeiture:currentPhase ?currentPhase .
                $this cacontology-asset-forfeiture:previousPhase ?prevPhase .
                ?currentPhase cacontology-gufo:phaseTransitionTime ?currentTime .
                ?prevPhase cacontology-gufo:phaseTransitionTime ?prevTime .
                FILTER (?currentTime <= ?prevTime)
            }
        """ ] ;
    sh:targetClass cacontology-asset-forfeiture:AssetForfeitureAction .

cacontology-asset-forfeiture:PrecedentValidationShape a sh:NodeShape ;
    rdfs:label "Precedent Validation Shape"@en ;
    rdfs:comment "Validation of precedent-setting asset forfeiture cases."@en ;
    sh:sparql [ sh:message "Precedent-setting cases must have enhanced documentation and legal review"@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-asset-forfeiture:precedentSetting true .
                FILTER NOT EXISTS {
                    $this cacontology-asset-forfeiture:hasEnhancedDocumentation ?documentation .
                    ?documentation cacontology-asset-forfeiture:documentationType "precedent_analysis" .
                }
            }
        """ ] ;
    sh:targetClass cacontology-asset-forfeiture:AssetForfeitureAction .

cacontology-asset-forfeiture:ProceedsOfCrime a owl:Class ;
    rdfs:label "Proceeds of Crime"@en ;
    rdfs:comment "Assets that are proceeds or benefits derived from child exploitation offenses. Enhanced as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        cacontology-asset-forfeiture:LegalBasisForForfeiture .

cacontology-asset-forfeiture:PropertyForfeitureActionShape a sh:NodeShape ;
    rdfs:label "Property Forfeiture Action Shape"@en ;
    rdfs:comment "Enhanced validation shape for property forfeiture actions with gUFO Event completion validation."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Property forfeiture action must specify completion time"@en ;
            sh:minCount 1 ;
            sh:path cacontology-gufo:forfeitureCompletionTime ],
        [ sh:class cacontology-asset-forfeiture:ForfeitureOutcome ;
            sh:maxCount 1 ;
            sh:message "Property forfeiture action must specify outcome"@en ;
            sh:minCount 1 ;
            sh:path cacontology-asset-forfeiture:forfeitureOutcome ] ;
    sh:targetClass cacontology-asset-forfeiture:PropertyForfeitureAction .

cacontology-asset-forfeiture:PropertyManager a owl:Class ;
    rdfs:label "Property Manager"@en ;
    rdfs:comment "Specialist responsible for managing restrained and forfeited property. Enhanced as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf gufo:Role,
        uco-role:Role ;
    cacontology-gufo:hasAntiRigidityConstraint "Role changes based on property type and management requirements" .

cacontology-asset-forfeiture:PropertyRestraintActionShape a sh:NodeShape ;
    rdfs:label "Property Restraint Action Shape"@en ;
    rdfs:comment "Enhanced validation shape for property restraint actions with gUFO Event validation and restraint temporal modeling."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Property restraint action must specify restraint begin time"@en ;
            sh:minCount 1 ;
            sh:path cacontology-gufo:restraintBeginTime ] ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-asset-forfeiture:PhaseTransitionError . }
            WHERE {
                $this a cacontology-asset-forfeiture:PropertyRestraintAction .
                FILTER NOT EXISTS { 
                    $this cacontology-asset-forfeiture:currentPhase ?phase .
                    ?phase a cacontology-asset-forfeiture:RestraintPhase .
                }
            }
        """ ;
            sh:message "Property restraint should transition to restraint phase"@en ;
            sh:prefixes cacontology-asset-forfeiture: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-asset-forfeiture:PropertyRestraintAction .

cacontology-asset-forfeiture:RecoveryPhaseShape a sh:NodeShape ;
    rdfs:label "Recovery Phase Shape"@en ;
    rdfs:comment "SHACL shape for recovery phases with anti-rigid gUFO Phase validation."@en ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-asset-forfeiture:LegalCompletionError . }
            WHERE {
                $this a cacontology-asset-forfeiture:RecoveryPhase .
                ?action cacontology-asset-forfeiture:currentPhase $this .
                FILTER NOT EXISTS { 
                    ?action cacontology-asset-forfeiture:previousPhase ?prev .
                    ?prev a cacontology-asset-forfeiture:LegalProceedingsPhase .
                    ?prev cacontology-asset-forfeiture:phaseStatus "completed" .
                }
            }
        """ ;
            sh:message "Recovery phase must have completed legal proceedings"@en ;
            sh:prefixes cacontology-asset-forfeiture: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-asset-forfeiture:RecoveryPhase .

cacontology-asset-forfeiture:ResidentialPropertyShape a sh:NodeShape ;
    rdfs:label "Residential Property Shape"@en ;
    rdfs:comment "Enhanced validation shape for residential property with gUFO Object validation and property assessment."@en ;
    sh:property [ sh:hasValue gufo:Object ;
            sh:message "Residential property must be instance of gUFO Object"@en ;
            sh:path rdf:type ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:message "Market value must be positive"@en ;
            sh:minCount 0 ;
            sh:minExclusive 0.0 ;
            sh:path cacontology-asset-forfeiture:marketValue ],
        [ sh:class uco-identity:Person ;
            sh:message "Residential property must have at least one owner"@en ;
            sh:minCount 1 ;
            sh:path uco-observable:propertyOwner ] ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-asset-forfeiture:AssessmentRecommendation . }
            WHERE {
                $this cacontology-asset-forfeiture:marketValue ?value .
                FILTER(?value > 500000)
                FILTER NOT EXISTS { 
                    $this cacontology-asset-forfeiture:hasAssessment ?assessment .
                    ?assessment cacontology-asset-forfeiture:assessmentType "professional" .
                }
            }
        """ ;
            sh:message "High-value residential property should have professional assessment"@en ;
            sh:prefixes cacontology-asset-forfeiture: ;
            sh:severity sh:Warning ] ;
    sh:targetClass cacontology-asset-forfeiture:ResidentialProperty .

cacontology-asset-forfeiture:RestraintPhaseShape a sh:NodeShape ;
    rdfs:label "Restraint Phase Shape"@en ;
    rdfs:comment "SHACL shape for restraint phases with anti-rigid gUFO Phase validation."@en ;
    sh:property [ sh:hasValue gufo:Phase ;
            sh:message "Restraint phases must be instances of anti-rigid gUFO Phase"@en ;
            sh:path rdf:type ] ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-asset-forfeiture:PhaseSequenceError . }
            WHERE {
                $this a cacontology-asset-forfeiture:RestraintPhase .
                ?action cacontology-asset-forfeiture:currentPhase $this .
                FILTER NOT EXISTS { 
                    ?action cacontology-asset-forfeiture:previousPhase ?prev .
                    ?prev a cacontology-asset-forfeiture:AssetIdentificationPhase .
                }
            }
        """ ;
            sh:message "Restraint phase should follow asset identification phase"@en ;
            sh:prefixes cacontology-asset-forfeiture: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-asset-forfeiture:RestraintPhase .

cacontology-asset-forfeiture:StateSupremeCourt a owl:Class ;
    rdfs:label "State Supreme Court"@en ;
    rdfs:comment "State Supreme Court with jurisdiction over forfeiture proceedings. Enhanced as gUFO Organization for judicial institution modeling."@en,
        "gUFO Organization: Judicial institutions with authoritative legal powers and procedural frameworks."@en ;
    rdfs:subClassOf gufo:Organization,
        uco-identity:Organization .

cacontology-asset-forfeiture:TaskforceInvolvementCrossReferenceShape a sh:NodeShape ;
    rdfs:label "Taskforce Involvement Cross Reference Shape"@en ;
    rdfs:comment "Enhanced validation that asset forfeiture actions involve appropriate gUFO Organization taskforces."@en ;
    sh:sparql [ sh:message "Asset forfeiture actions should involve active gUFO Organization taskforces."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-asset-forfeiture:AssetForfeitureAction .
                $this cacontology-asset-forfeiture:involvesTaskforce ?taskforce .
                FILTER NOT EXISTS {
                    ?taskforce a gufo:Organization .
                    ?taskforce cacontology-asset-forfeiture:organizationStatus "active" .
                }
            }
        """ ] ;
    sh:targetClass cacontology-asset-forfeiture:AssetForfeitureAction .

cacontology-asset-forfeiture:TechnicalEquipmentShape a sh:NodeShape ;
    rdfs:label "Technical Equipment Shape"@en ;
    rdfs:comment "Enhanced validation shape for technical equipment with gUFO Object validation and forensic verification."@en ;
    sh:property [ sh:hasValue gufo:Object ;
            sh:message "Technical equipment must be instance of gUFO Object"@en ;
            sh:path rdf:type ],
        [ sh:datatype xsd:string ;
            sh:in ( "camera_equipment" "drone" "scuba_diving_gear" "computer_equipment" "mobile_device" "storage_device" "other" ) ;
            sh:maxCount 1 ;
            sh:message "Equipment type must be from the allowed list"@en ;
            sh:minCount 1 ;
            sh:path cacontology-asset-forfeiture:equipmentType ] ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-asset-forfeiture:ForensicVerificationError . }
            WHERE {
                $this a cacontology-asset-forfeiture:TechnicalEquipment .
                FILTER NOT EXISTS { 
                    $this cacontology-asset-forfeiture:hasForensicVerification ?verification .
                    ?verification cacontology-asset-forfeiture:verificationType "equipment_analysis" .
                }
            }
        """ ;
            sh:message "Technical equipment must have forensic verification for forfeiture"@en ;
            sh:prefixes cacontology-asset-forfeiture: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-asset-forfeiture:TechnicalEquipment .

cacontology-asset-forfeiture:Vehicle a owl:Class ;
    rdfs:label "Vehicle"@en ;
    rdfs:comment "Vehicle used in or purchased with proceeds from child exploitation offenses. Enhanced as gUFO Object for vehicle asset modeling."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:ObservableObject .

cacontology-asset-forfeiture:assignedRole a owl:ObjectProperty ;
    rdfs:label "assigned role"@en ;
    rdfs:comment "Links a person to their assigned forfeiture role. gUFO Role modeling for dynamic assignment."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range gufo:Role .

cacontology-asset-forfeiture:courtJurisdiction a owl:DatatypeProperty ;
    rdfs:label "court jurisdiction"@en ;
    rdfs:comment "Court jurisdiction for forfeiture proceedings (e.g., 'NSW', 'VIC', 'SA'). Enhanced with gUFO Situation context."@en ;
    rdfs:range xsd:string ;
    cacontology-gufo:hasValidationConstraint "Jurisdiction must be valid Australian state or territory code" .

cacontology-asset-forfeiture:estimatedValue a owl:DatatypeProperty ;
    rdfs:label "estimated value"@en ;
    rdfs:comment "Estimated total value of restrained assets (e.g., $30,000). Enhanced with gUFO Object aggregation."@en ;
    rdfs:range xsd:decimal ;
    cacontology-gufo:hasValidationConstraint "Estimated value should be based on professional assessment" .

cacontology-asset-forfeiture:forfeitureDate a owl:DatatypeProperty ;
    rdfs:label "forfeiture date"@en ;
    rdfs:comment "Use cacontology-gufo:forfeitureCompletionTime for gUFO temporal consistency",
        "Date when property was forfeited to the Commonwealth. Superseded by gUFO temporal framework."@en ;
    rdfs:domain cacontology-asset-forfeiture:PropertyForfeitureAction ;
    rdfs:range xsd:dateTime ;
    owl:deprecated true .

cacontology-asset-forfeiture:hasPhaseTransition a owl:ObjectProperty ;
    rdfs:label "has phase transition"@en ;
    rdfs:comment "Links asset forfeiture action to phase transition events."@en ;
    rdfs:domain cacontology-asset-forfeiture:AssetForfeitureAction ;
    rdfs:range gufo:Event .

cacontology-asset-forfeiture:involvesCoordination a owl:ObjectProperty ;
    rdfs:label "involves coordination"@en ;
    rdfs:comment "Links forfeiture action to coordination situations involving multiple jurisdictions."@en ;
    rdfs:domain cacontology-asset-forfeiture:AssetForfeitureAction ;
    rdfs:range cacontology-asset-forfeiture:JurisdictionalCoordination .

cacontology-asset-forfeiture:itemCount a owl:DatatypeProperty ;
    rdfs:label "item count"@en ;
    rdfs:comment "Number of household items forfeited (e.g., 48 household items). Enhanced with gUFO Object quantification."@en ;
    rdfs:domain cacontology-asset-forfeiture:HouseholdItems ;
    rdfs:range xsd:nonNegativeInteger ;
    cacontology-gufo:hasValidationConstraint "Item count must be verified through inventory documentation" .

cacontology-asset-forfeiture:playsRole a owl:ObjectProperty ;
    rdfs:label "plays role"@en ;
    rdfs:comment "Links an entity to a role it plays in forfeiture operations."@en ;
    rdfs:range gufo:Role .

cacontology-asset-forfeiture:precedentSetting a owl:DatatypeProperty ;
    rdfs:label "precedent setting"@en ;
    rdfs:comment "Indicates whether this forfeiture set a legal precedent (e.g., first restraint of non-profit offender home). Enhanced with gUFO precedential significance."@en ;
    rdfs:domain cacontology-asset-forfeiture:AssetForfeitureAction ;
    rdfs:range xsd:boolean ;
    cacontology-gufo:hasValidationConstraint "Precedent status must be legally verified and documented" .

cacontology-asset-forfeiture:restraintDate a owl:DatatypeProperty ;
    rdfs:label "restraint date"@en ;
    rdfs:comment "Use cacontology-gufo:restraintBeginTime for gUFO temporal consistency",
        "Date when property restraint order was issued. Superseded by gUFO temporal framework."@en ;
    rdfs:domain cacontology-asset-forfeiture:PropertyRestraintAction ;
    rdfs:range xsd:dateTime ;
    owl:deprecated true .

cacontology-athletic:AnatomyFocusedExploitation a owl:Class ;
    rdfs:label "Anatomy Focused Exploitation"@en ;
    rdfs:comment "Exploitation focused on body parts and anatomy under guise of athletic training. Enhanced as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-athletic:SexualEducationExploitation .

cacontology-athletic:AntiRigidityValidationShape a sh:NodeShape ;
    rdfs:label "Anti-Rigidity Validation Shape"@en ;
    rdfs:comment "Validation of anti-rigidity constraints for gUFO Phases in athletic exploitation contexts."@en ;
    sh:sparql [ sh:message "Anti-rigid phases must demonstrate changeability based on athletic exploitation context"@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a gufo:Phase .
                {
                    { $this a cacontology-athletic:GroomingPhase . } UNION
                    { $this a cacontology-athletic:AuthorityEstablishmentPhase . } UNION
                    { $this a cacontology-athletic:PhysicalCoercionPhase . } UNION
                    { $this a cacontology-athletic:ExploitationPhase . } UNION
                    { $this a cacontology-athletic:DiscoveryPhase . }
                }
                FILTER NOT EXISTS { 
                    $this cacontology-gufo:hasAntiRigidityConstraint ?constraint .
                }
            }
        """ ] ;
    sh:targetClass cacontology-athletic:AuthorityEstablishmentPhase,
        cacontology-athletic:DiscoveryPhase,
        cacontology-athletic:ExploitationPhase,
        cacontology-athletic:GroomingPhase,
        cacontology-athletic:PhysicalCoercionPhase .

cacontology-athletic:AssistantCoachRole a owl:Class ;
    rdfs:label "Assistant Coach Role"@en ;
    rdfs:comment "Assistant coaching role with delegated authority over specific training aspects. Enhanced as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf gufo:Role,
        cacontology-athletic:AthleticCoachRole ;
    cacontology-gufo:hasAntiRigidityConstraint "Role scope varies based on delegation and specialization areas" .

cacontology-athletic:AthleticCoachRoleShape a sh:NodeShape ;
    rdfs:label "Athletic Coach Role Shape"@en ;
    rdfs:comment "Enhanced validation shape for athletic coach roles with anti-rigid gUFO Role validation."@en ;
    sh:property [ sh:hasValue gufo:Role ;
            sh:message "Athletic coach roles must be instances of anti-rigid gUFO Role"@en ;
            sh:path rdf:type ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 50.0 ;
            sh:message "Coaching experience must be between 0 and 50 years."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-athletic:coachingExperience ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:message "Age group coached must be in format like '12-14', '15', 'under_18', or 'over_21'."@en ;
            sh:minCount 1 ;
            sh:path cacontology-athletic:ageGroupCoached ;
            sh:pattern "^[0-9]+-[0-9]+$|^[0-9]+$|^under_[0-9]+$|^over_[0-9]+$" ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Institutional affiliation must be between 1 and 200 characters."@en ;
            sh:minCount 0 ;
            sh:minLength 1 ;
            sh:path cacontology-athletic:institutionalAffiliation ] ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-athletic:CoachCompetencyError . }
            WHERE {
                $this a cacontology-athletic:AthleticCoachRole .
                FILTER NOT EXISTS { 
                    $this cacontology-athletic:hasCompetency ?competency .
                    ?competency cacontology-athletic:competencyType "athletic_coaching" .
                }
            }
        """ ;
            sh:message "Athletic coach roles must have appropriate training and certification"@en ;
            sh:prefixes cacontology-athletic: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-athletic:AthleticCoachRole .

cacontology-athletic:AthleticCoachingExploitationShape a sh:NodeShape ;
    rdfs:label "Athletic Coaching Exploitation Shape"@en ;
    rdfs:comment "Enhanced validation shape for athletic coaching exploitation with comprehensive gUFO Event validation."@en ;
    sh:property [ sh:hasValue gufo:Event ;
            sh:message "Athletic coaching exploitation must be instances of gUFO Event"@en ;
            sh:path rdf:type ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Athletic coaching exploitation must specify begin time using gUFO temporal framework"@en ;
            sh:minCount 1 ;
            sh:path cacontology-gufo:exploitationBeginTime ],
        [ sh:datatype xsd:string ;
            sh:in ( "travel" "school" "club" "recreational" "competitive" "elite" "youth_league" "select" ) ;
            sh:maxCount 1 ;
            sh:message "Athletic coaching exploitation must specify exactly one team type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-athletic:teamType ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Athletic coaching exploitation may specify end time using gUFO temporal framework"@en ;
            sh:minCount 0 ;
            sh:path cacontology-gufo:exploitationEndTime ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 50 ;
            sh:message "Team size must be between 1 and 50 players."@en ;
            sh:minCount 1 ;
            sh:minInclusive 1 ;
            sh:path cacontology-athletic:teamSize ],
        [ sh:class cacontology-athletic:AthleticCoachRole ;
            sh:message "Athletic coaching exploitation must involve at least one coaching role"@en ;
            sh:minCount 1 ;
            sh:path cacontology-athletic:holdsCoachingRole ],
        [ sh:class gufo:Phase ;
            sh:maxCount 1 ;
            sh:message "Athletic coaching exploitation may specify current operational phase"@en ;
            sh:minCount 0 ;
            sh:path cacontology-athletic:currentPhase ],
        [ sh:datatype xsd:string ;
            sh:in ( "baseball" "basketball" "soccer" "football" "tennis" "swimming" "track" "volleyball" "wrestling" "gymnastics" "hockey" "lacrosse" "softball" "golf" "cross_country" "other" ) ;
            sh:maxCount 1 ;
            sh:message "Athletic coaching exploitation must specify exactly one sport type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-athletic:sportType ] ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-athletic:TemporalInconsistencyError . }
            WHERE {
                $this cacontology-gufo:exploitationBeginTime ?begin .
                $this cacontology-gufo:exploitationEndTime ?end .
                FILTER(?end <= ?begin)
            }
        """ ;
            sh:message "Exploitation end time must be after begin time"@en ;
            sh:prefixes cacontology-athletic: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-athletic:AthleticCoachingExploitation .

cacontology-athletic:AthleticContactEscalation a owl:Class ;
    rdfs:label "Athletic Contact Escalation"@en ;
    rdfs:comment "Escalation of physical contact within legitimate athletic training context. Enhanced as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-athletic:PhysicalContactEscalation .

cacontology-athletic:AthleticExploitationCrossReferenceShape a sh:NodeShape ;
    rdfs:label "Athletic Exploitation Cross Reference Shape"@en ;
    rdfs:comment "Enhanced validation that athletic coaching exploitation involves appropriate gUFO foundational entities."@en ;
    sh:sparql [ sh:message "Athletic coaching exploitation should involve gUFO Role coaches and occur in gUFO Object facilities."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-athletic:AthleticCoachingExploitation .
                FILTER NOT EXISTS {
                    { $this cacontology-athletic:holdsCoachingRole ?role . ?role a gufo:Role . } UNION
                    { $this cacontology-athletic:occursInFacility ?facility . ?facility a gufo:Object . }
                }
            }
        """ ] ;
    sh:targetClass cacontology-athletic:AthleticCoachingExploitation .

cacontology-athletic:AthleticExploitationDiscoveryShape a sh:NodeShape ;
    rdfs:label "Athletic Exploitation Discovery Shape"@en ;
    rdfs:comment "Enhanced validation shape for athletic exploitation discovery with gUFO Event validation."@en ;
    sh:property [ sh:hasValue gufo:Event ;
            sh:message "Athletic exploitation discovery must be instances of gUFO Event"@en ;
            sh:path rdf:type ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Athletic exploitation discovery must specify begin time"@en ;
            sh:minCount 1 ;
            sh:path cacontology-gufo:discoveryBeginTime ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Athletic exploitation discovery may specify reporting time"@en ;
            sh:minCount 0 ;
            sh:path cacontology-gufo:reportingTime ] ;
    sh:targetClass cacontology-athletic:AthleticExploitationDiscovery .

cacontology-athletic:AthleticFacilityExploitationShape a sh:NodeShape ;
    rdfs:label "Athletic Facility Exploitation Shape"@en ;
    rdfs:comment "Enhanced validation shape for athletic facility exploitation with gUFO Event validation and facility Object modeling."@en ;
    sh:property [ sh:hasValue gufo:Event ;
            sh:message "Athletic facility exploitation must be instances of gUFO Event"@en ;
            sh:path rdf:type ],
        [ sh:datatype xsd:string ;
            sh:in ( "gym" "field" "court" "pool" "track" "locker_room" "training_room" "weight_room" "other" ) ;
            sh:maxCount 1 ;
            sh:message "Facility type must be from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-athletic:facilityType ] ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-athletic:FacilityAccessError . }
            WHERE {
                $this a cacontology-athletic:AthleticFacilityExploitation .
                $this cacontology-athletic:occursInFacility ?facility .
                FILTER NOT EXISTS { 
                    ?facility a gufo:Object .
                    ?facility cacontology-athletic:facilityStatus "accessible" .
                }
            }
        """ ;
            sh:message "Athletic facility exploitation must occur in verified and accessible facilities"@en ;
            sh:prefixes cacontology-athletic: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-athletic:AthleticFacilityExploitation .

cacontology-athletic:AthleticFacilityShape a sh:NodeShape ;
    rdfs:label "Athletic Facility Shape"@en ;
    rdfs:comment "Enhanced validation shape for athletic facilities with gUFO Object validation."@en ;
    sh:property [ sh:hasValue gufo:Object ;
            sh:message "Athletic facilities must be instances of gUFO Object"@en ;
            sh:path rdf:type ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 100 ;
            sh:message "Athletic facility must have a name (3-100 characters)"@en ;
            sh:minCount 1 ;
            sh:minLength 3 ;
            sh:path uco-core:name ] ;
    sh:targetClass cacontology-athletic:AthleticFacility .

cacontology-athletic:AthleticFieldExploitation a owl:Class ;
    rdfs:label "Athletic Field Exploitation"@en ;
    rdfs:comment "Exploitation on outdoor athletic fields, courts, and sports venues. Enhanced as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-athletic:AthleticFacilityExploitation .

cacontology-athletic:AthleticOpportunityThreats a owl:Class ;
    rdfs:label "Athletic Opportunity Threats"@en ;
    rdfs:comment "Threats to athletic opportunities, advancement, and sports career prospects. Enhanced as gUFO Situation."@en ;
    rdfs:subClassOf gufo:Situation,
        cacontology-athletic:TeamDynamicsExploitation .

cacontology-athletic:AuthorityEstablishmentPhaseShape a sh:NodeShape ;
    rdfs:label "Authority Establishment Phase Shape"@en ;
    rdfs:comment "SHACL shape for authority establishment phases with anti-rigid gUFO Phase validation."@en ;
    sh:property [ sh:hasValue gufo:Phase ;
            sh:message "Authority establishment phases must be instances of anti-rigid gUFO Phase"@en ;
            sh:path rdf:type ] ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-athletic:PhaseSequenceError . }
            WHERE {
                $this a cacontology-athletic:AuthorityEstablishmentPhase .
                ?exploitation cacontology-athletic:currentPhase $this .
                FILTER NOT EXISTS { 
                    ?exploitation cacontology-athletic:previousPhase ?prev .
                    ?prev a cacontology-athletic:GroomingPhase .
                }
            }
        """ ;
            sh:message "Authority establishment phase should follow grooming phase"@en ;
            sh:prefixes cacontology-athletic: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-athletic:AuthorityEstablishmentPhase .

cacontology-athletic:CoachingIntegrityValidationShape a sh:NodeShape ;
    rdfs:label "Coaching Integrity Validation Shape"@en ;
    rdfs:comment "Validation of coaching integrity for athletic exploitation cases."@en ;
    sh:sparql [ sh:message "Athletic coaching exploitation involving multiple athletes must have enhanced documentation"@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-athletic:AthleticCoachingExploitation .
                $this cacontology-athletic:teamSize ?size .
                FILTER(?size > 10)
                FILTER NOT EXISTS {
                    $this cacontology-athletic:hasEnhancedDocumentation ?documentation .
                    ?documentation cacontology-athletic:documentationType "multi_victim_analysis" .
                }
            }
        """ ] ;
    sh:targetClass cacontology-athletic:AthleticCoachingExploitation .

cacontology-athletic:CommunityBasedReporting a owl:Class ;
    rdfs:label "Community Based Reporting"@en ;
    rdfs:comment "Reporting through community and parent networks rather than direct victim disclosure. Enhanced as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-athletic:AthleticExploitationDiscovery .

cacontology-athletic:ConditioningCoercionShape a sh:NodeShape ;
    rdfs:label "Conditioning Coercion Shape"@en ;
    rdfs:comment "Enhanced validation shape for conditioning coercion with gUFO Event validation."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "running_drills" "endurance_training" "strength_training" "agility_drills" "conditioning_circuits" "sprint_training" "cardio_exercises" "fitness_tests" "other" ) ;
            sh:maxCount 1 ;
            sh:message "Conditioning coercion must specify exactly one conditioning type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-athletic:conditioningType ] ;
    sh:targetClass cacontology-athletic:ConditioningCoercion .

cacontology-athletic:DiscoveryPhaseShape a sh:NodeShape ;
    rdfs:label "Discovery Phase Shape"@en ;
    rdfs:comment "SHACL shape for discovery phases with anti-rigid gUFO Phase validation."@en ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-athletic:DiscoveryMechanismError . }
            WHERE {
                $this a cacontology-athletic:DiscoveryPhase .
                ?exploitation cacontology-athletic:currentPhase $this .
                FILTER NOT EXISTS { 
                    ?exploitation cacontology-athletic:hasDiscoveryEvent ?discovery .
                    ?discovery a cacontology-athletic:AthleticExploitationDiscovery .
                }
            }
        """ ;
            sh:message "Discovery phase must involve documented discovery mechanism"@en ;
            sh:prefixes cacontology-athletic: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-athletic:DiscoveryPhase .

cacontology-athletic:DualCoachingRoleExploitationShape a sh:NodeShape ;
    rdfs:label "Dual Coaching Role Exploitation Shape"@en ;
    rdfs:comment "Enhanced validation shape for dual coaching role exploitation with gUFO Role multiplicity validation."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 10 ;
            sh:message "Dual coaching role exploitation must specify between 2 and 10 roles."@en ;
            sh:minCount 1 ;
            sh:minInclusive 2 ;
            sh:path cacontology-athletic:multipleRoles ] ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-athletic:DualRoleValidationError . }
            WHERE {
                $this a cacontology-athletic:DualCoachingRoleExploitation .
                {
                    SELECT $this (COUNT(DISTINCT ?role) AS ?roleCount)
                    WHERE {
                        $this cacontology-athletic:holdsCoachingRole ?role .
                    }
                    GROUP BY $this
                }
                FILTER (?roleCount < 2)
            }
        """ ;
            sh:message "Dual coaching role exploitation must involve at least 2 different coaching roles"@en ;
            sh:prefixes cacontology-athletic: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-athletic:DualCoachingRoleExploitation .

cacontology-athletic:ExerciseComplianceCoercion a owl:Class ;
    rdfs:label "Exercise Compliance Coercion"@en ;
    rdfs:comment "Exercise continuation contingent on sexual compliance and exposure demands. Enhanced as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-athletic:PhysicalTrainingCoercion .

cacontology-athletic:ExhaustionBasedCoercionShape a sh:NodeShape ;
    rdfs:label "Exhaustion Based Coercion Shape"@en ;
    rdfs:comment "Enhanced validation shape for exhaustion-based coercion with gUFO Event validation."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "mild" "moderate" "severe" "extreme" ) ;
            sh:maxCount 1 ;
            sh:message "Exhaustion level must be one of: mild, moderate, severe, extreme."@en ;
            sh:minCount 1 ;
            sh:path cacontology-athletic:exhaustionLevel ] ;
    sh:targetClass cacontology-athletic:ExhaustionBasedCoercion .

cacontology-athletic:ExploitationPhaseShape a sh:NodeShape ;
    rdfs:label "Exploitation Phase Shape"@en ;
    rdfs:comment "SHACL shape for exploitation phases with anti-rigid gUFO Phase validation."@en ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-athletic:ExploitationReadinessError . }
            WHERE {
                $this a cacontology-athletic:ExploitationPhase .
                ?exploitation cacontology-athletic:currentPhase $this .
                FILTER NOT EXISTS { 
                    ?exploitation cacontology-athletic:previousPhase ?authPhase .
                    ?authPhase a cacontology-athletic:AuthorityEstablishmentPhase .
                    ?authPhase cacontology-athletic:phaseStatus "completed" .
                }
            }
        """ ;
            sh:message "Exploitation phase must have established authority and coercion mechanisms"@en ;
            sh:prefixes cacontology-athletic: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-athletic:ExploitationPhase .

cacontology-athletic:GUFODataQualityShape a sh:NodeShape ;
    rdfs:label "gUFO Data Quality Shape"@en ;
    rdfs:comment "Enhanced data quality validation for athletic exploitation gUFO entities with foundational ontology compliance."@en ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-athletic:FoundationalTypeError . }
            WHERE {
                {
                    $this a ?exploitationType .
                    ?exploitationType rdfs:subClassOf* cacontology-athletic:AthleticCoachingExploitation .
                    FILTER NOT EXISTS { $this a gufo:Event . }
                } UNION {
                    $this a ?roleType .
                    ?roleType rdfs:subClassOf* cacontology-athletic:AthleticCoachRole .
                    FILTER NOT EXISTS { $this a gufo:Role . }
                } UNION {
                    $this a ?facilityType .
                    ?facilityType rdfs:subClassOf* cacontology-athletic:AthleticFacility .
                    FILTER NOT EXISTS { $this a gufo:Object . }
                } UNION {
                    $this a ?situationType .
                    ?situationType rdfs:subClassOf* cacontology-athletic:TeamBasedExploitation .
                    FILTER NOT EXISTS { $this a gufo:Situation . }
                }
            }
        """ ;
            sh:message "Athletic exploitation entities must be properly typed as gUFO foundational entities"@en ;
            sh:prefixes cacontology-athletic: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-athletic:AthleticCoachRole,
        cacontology-athletic:AthleticCoachingExploitation,
        cacontology-athletic:AthleticFacility,
        cacontology-athletic:TeamBasedExploitation .

cacontology-athletic:GUFOTemporalValidationShape a sh:NodeShape ;
    rdfs:label "gUFO Temporal Validation Shape"@en ;
    rdfs:comment "Enhanced temporal consistency validation for athletic exploitation gUFO Events using gUFO temporal framework."@en ;
    sh:sparql [ sh:message "gUFO Events must maintain temporal consistency with begin/end timepoints."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a gufo:Event .
                {
                    { $this cacontology-gufo:exploitationBeginTime ?begin . $this cacontology-gufo:exploitationEndTime ?end . } UNION
                    { $this cacontology-gufo:coercionBeginTime ?begin . $this cacontology-gufo:coercionEndTime ?end . } UNION
                    { $this cacontology-gufo:escalationBeginTime ?begin . $this cacontology-gufo:escalationPeakTime ?end . } UNION
                    { $this cacontology-gufo:discoveryBeginTime ?begin . $this cacontology-gufo:reportingTime ?end . }
                }
                FILTER (?begin >= ?end)
            }
        """ ] ;
    sh:targetClass cacontology-athletic:AthleticCoachingExploitation,
        cacontology-athletic:AthleticExploitationDiscovery,
        cacontology-athletic:PhysicalContactEscalation,
        cacontology-athletic:PhysicalTrainingCoercion .

cacontology-athletic:GroomingPhaseShape a sh:NodeShape ;
    rdfs:label "Grooming Phase Shape"@en ;
    rdfs:comment "SHACL shape for grooming phases with anti-rigid gUFO Phase validation."@en ;
    sh:property [ sh:hasValue gufo:Phase ;
            sh:message "Grooming phases must be instances of anti-rigid gUFO Phase"@en ;
            sh:path rdf:type ],
        [ sh:datatype xsd:dateTime ;
            sh:message "Phase may specify transition times"@en ;
            sh:minCount 0 ;
            sh:path cacontology-gufo:phaseTransitionTime ] ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-athletic:AntiRigidityError . }
            WHERE {
                $this a cacontology-athletic:GroomingPhase .
                FILTER NOT EXISTS { 
                    $this cacontology-gufo:hasAntiRigidityConstraint ?constraint .
                }
            }
        """ ;
            sh:message "Grooming phases must demonstrate anti-rigidity (duration varies based on team dynamics)"@en ;
            sh:prefixes cacontology-athletic: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-athletic:GroomingPhase .

cacontology-athletic:GroupExploitationDynamics a owl:Class ;
    rdfs:label "Group Exploitation Dynamics"@en ;
    rdfs:comment "Exploitation using team group dynamics, peer pressure, and collective authority. Enhanced as gUFO Situation."@en ;
    rdfs:subClassOf gufo:Situation,
        cacontology-athletic:TeamDynamicsExploitation .

cacontology-athletic:GymExploitation a owl:Class ;
    rdfs:label "Gym Exploitation"@en ;
    rdfs:comment "Exploitation in gymnasium and indoor athletic facilities. Enhanced as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-athletic:AthleticFacilityExploitation .

cacontology-athletic:HeadCoachRoleShape a sh:NodeShape ;
    rdfs:label "Head Coach Role Shape"@en ;
    rdfs:comment "Enhanced validation shape for head coach roles with leadership gUFO Role validation."@en ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-athletic:LeadershipCompetencyError . }
            WHERE {
                $this a cacontology-athletic:HeadCoachRole .
                FILTER NOT EXISTS { 
                    $this cacontology-athletic:hasCompetency ?competency .
                    ?competency cacontology-athletic:competencyType "team_leadership" .
                }
            }
        """ ;
            sh:message "Head coach roles must demonstrate leadership competency"@en ;
            sh:prefixes cacontology-athletic: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-athletic:HeadCoachRole .

cacontology-athletic:InappropriateSexualEducation a owl:Class ;
    rdfs:label "Inappropriate Sexual Education"@en ;
    rdfs:comment "Use of sexual topics and education as exploitation method disguised as coaching. Enhanced as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-athletic:SexualEducationExploitation .

cacontology-athletic:InstitutionalEmploymentTermination a owl:Class ;
    rdfs:label "Institutional Employment Termination"@en ;
    rdfs:comment "Employment termination following discovery of athletic coaching exploitation. Enhanced as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action ;
    cacontology-gufo:hasTemporalProperty cacontology-gufo:terminationTime .

cacontology-athletic:InstitutionalOversightValidationShape a sh:NodeShape ;
    rdfs:label "Institutional Oversight Validation Shape"@en ;
    rdfs:comment "Validation of institutional oversight for school-based athletic exploitation."@en ;
    sh:sparql [ sh:message "School athletic exploitation must involve appropriate institutional oversight evaluation"@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-athletic:SchoolAthleticExploitation .
                FILTER NOT EXISTS {
                    $this cacontology-athletic:hasInstitutionalReview ?review .
                    ?review cacontology-athletic:reviewType "oversight_evaluation" .
                }
            }
        """ ] ;
    sh:targetClass cacontology-athletic:SchoolAthleticExploitation .

cacontology-athletic:LegitimateContactExploitation a owl:Class ;
    rdfs:label "Legitimate Contact Exploitation"@en ;
    rdfs:comment "Exploitation of legitimate athletic physical contact for sexual purposes. Enhanced as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-athletic:PhysicalContactEscalation .

cacontology-athletic:LockerRoomExploitation a owl:Class ;
    rdfs:label "Locker Room Exploitation"@en ;
    rdfs:comment "Exploitation in locker rooms and changing areas with privacy expectations. Enhanced as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-athletic:AthleticFacilityExploitation .

cacontology-athletic:MasturbationDiscussionExploitation a owl:Class ;
    rdfs:label "Masturbation Discussion Exploitation"@en ;
    rdfs:comment "Exploitation through extensive masturbation discussions during athletic training. Enhanced as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-athletic:SexualEducationExploitation .

cacontology-athletic:MaterialBenefitCoercionShape a sh:NodeShape ;
    rdfs:label "Material Benefit Coercion Shape"@en ;
    rdfs:comment "Enhanced validation shape for material benefit coercion with gUFO Situation validation."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "equipment" "uniforms" "opportunities" "privileges" "scholarships" "awards" "recognition" "travel" "training" "other" ) ;
            sh:maxCount 1 ;
            sh:message "Material benefit type must be from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-athletic:materialBenefitType ] ;
    sh:targetClass cacontology-athletic:MaterialBenefitCoercion .

cacontology-athletic:OverClothingToUnderClothingEscalation a owl:Class ;
    rdfs:label "Over Clothing to Under Clothing Escalation"@en ;
    rdfs:comment "Progression from over-clothing to under-clothing contact during athletic activities. Enhanced as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-athletic:PhysicalContactEscalation .

cacontology-athletic:ParentNetworkDiscoveryShape a sh:NodeShape ;
    rdfs:label "Parent Network Discovery Shape"@en ;
    rdfs:comment "Enhanced validation shape for parent network discovery with gUFO Event validation."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 100 ;
            sh:message "Parent network size must be between 1 and 100."@en ;
            sh:minCount 1 ;
            sh:minInclusive 1 ;
            sh:path cacontology-athletic:parentNetworkSize ] ;
    sh:targetClass cacontology-athletic:ParentNetworkDiscovery .

cacontology-athletic:PhaseSequenceValidationShape a sh:NodeShape ;
    rdfs:label "Phase Sequence Validation Shape"@en ;
    rdfs:comment "Enhanced validation that athletic exploitation gUFO Events follow logical phase sequences."@en ;
    sh:sparql [ sh:message "Athletic exploitation should follow logical phase sequences with proper temporal ordering."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-athletic:AthleticCoachingExploitation .
                $this cacontology-athletic:currentPhase ?currentPhase .
                $this cacontology-athletic:previousPhase ?prevPhase .
                ?currentPhase cacontology-gufo:phaseTransitionTime ?currentTime .
                ?prevPhase cacontology-gufo:phaseTransitionTime ?prevTime .
                FILTER (?currentTime <= ?prevTime)
            }
        """ ] ;
    sh:targetClass cacontology-athletic:AthleticCoachingExploitation .

cacontology-athletic:PhysicalCoercionPhaseShape a sh:NodeShape ;
    rdfs:label "Physical Coercion Phase Shape"@en ;
    rdfs:comment "SHACL shape for physical coercion phases with anti-rigid gUFO Phase validation."@en ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-athletic:CoercionDocumentationError . }
            WHERE {
                $this a cacontology-athletic:PhysicalCoercionPhase .
                ?exploitation cacontology-athletic:currentPhase $this .
                FILTER NOT EXISTS { 
                    ?exploitation cacontology-athletic:employsTrainingCoercion ?coercion .
                    ?coercion a cacontology-athletic:PhysicalTrainingCoercion .
                }
            }
        """ ;
            sh:message "Physical coercion phase must involve documented physical training coercion"@en ;
            sh:prefixes cacontology-athletic: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-athletic:PhysicalCoercionPhase .

cacontology-athletic:PhysicalEnduranceExploitation a owl:Class ;
    rdfs:label "Physical Endurance Exploitation"@en ;
    rdfs:comment "Exploitation of physical endurance requirements and athletic performance demands. Enhanced as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-athletic:PhysicalTrainingCoercion .

cacontology-athletic:PhysicalTrainingCoercionShape a sh:NodeShape ;
    rdfs:label "Physical Training Coercion Shape"@en ;
    rdfs:comment "Enhanced validation shape for physical training coercion with comprehensive gUFO Event validation."@en ;
    sh:property [ sh:hasValue gufo:Event ;
            sh:message "Physical training coercion must be instances of gUFO Event"@en ;
            sh:path rdf:type ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Physical training coercion must specify begin time using gUFO temporal framework"@en ;
            sh:minCount 1 ;
            sh:path cacontology-gufo:coercionBeginTime ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Physical training coercion may specify end time using gUFO temporal framework"@en ;
            sh:minCount 0 ;
            sh:path cacontology-gufo:coercionEndTime ] ;
    sh:targetClass cacontology-athletic:PhysicalTrainingCoercion .

cacontology-athletic:PubicHairFocusedExploitation a owl:Class ;
    rdfs:label "Pubic Hair Focused Exploitation"@en ;
    rdfs:comment "Specific exploitation focused on pubic hair viewing and discussion. Enhanced as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-athletic:SexualEducationExploitation .

cacontology-athletic:RumorCirculationDiscoveryShape a sh:NodeShape ;
    rdfs:label "Rumor Circulation Discovery Shape"@en ;
    rdfs:comment "Enhanced validation shape for rumor circulation discovery with gUFO Event validation."@en ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 365.0 ;
            sh:message "Rumor circulation duration must be between 1 and 365 days."@en ;
            sh:minCount 1 ;
            sh:minInclusive 1.0 ;
            sh:path cacontology-athletic:rumorCirculationDuration ] ;
    sh:targetClass cacontology-athletic:RumorCirculationDiscovery .

cacontology-athletic:SchoolAthleticCoachRole a owl:Class ;
    rdfs:label "School Athletic Coach Role"@en ;
    rdfs:comment "Coaching role within school-based athletic programs with institutional authority. Enhanced as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf gufo:Role,
        cacontology-athletic:AthleticCoachRole ;
    cacontology-gufo:hasAntiRigidityConstraint "Role changes based on school policies and institutional oversight" .

cacontology-athletic:SchoolBasedInvestigation a owl:Class ;
    rdfs:label "School Based Investigation"@en ;
    rdfs:comment "Investigation initiated by educational institution following exploitation reports. Enhanced as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        case-investigation:Investigation ;
    cacontology-gufo:hasTemporalProperty cacontology-gufo:investigationBeginTime,
        cacontology-gufo:investigationEndTime .

cacontology-athletic:SexualTopicGrooming a owl:Class ;
    rdfs:label "Sexual Topic Grooming"@en ;
    rdfs:comment "Grooming through inappropriate sexual discussions during athletic activities. Enhanced as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-athletic:SexualEducationExploitation .

cacontology-athletic:SportsContextPhysicalAbuse a owl:Class ;
    rdfs:label "Sports Context Physical Abuse"@en ;
    rdfs:comment "Physical abuse within sports training context disguised as coaching. Enhanced as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-athletic:PhysicalContactEscalation .

cacontology-athletic:TeamBasedExploitationShape a sh:NodeShape ;
    rdfs:label "Team Based Exploitation Shape"@en ;
    rdfs:comment "Enhanced validation shape for team-based exploitation with comprehensive gUFO Situation validation."@en ;
    sh:property [ sh:hasValue gufo:Situation ;
            sh:message "Team based exploitation must be instances of gUFO Situation"@en ;
            sh:path rdf:type ] ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-athletic:TeamParticipationError . }
            WHERE {
                $this a cacontology-athletic:TeamBasedExploitation .
                {
                    SELECT $this (COUNT(?member) AS ?memberCount) WHERE {
                        $this cacontology-athletic:participatesInSituation ?member .
                    } GROUP BY $this
                }
                FILTER(?memberCount < 2)
            }
        """ ;
            sh:message "Team based exploitation must involve multiple team members"@en ;
            sh:prefixes cacontology-athletic: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-athletic:TeamBasedExploitation .

cacontology-athletic:TeamDynamicsValidationShape a sh:NodeShape ;
    rdfs:label "Team Dynamics Validation Shape"@en ;
    rdfs:comment "Enhanced validation that team-based exploitation involves appropriate gUFO Situation coordination."@en ;
    sh:sparql [ sh:message "Team based exploitation must involve gUFO Situation coordination with multiple participants."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-athletic:TeamBasedExploitation .
                $this a gufo:Situation .
                {
                    SELECT $this (COUNT(?participant) AS ?participantCount)
                    WHERE {
                        $this cacontology-athletic:participatesInSituation ?participant .
                    }
                    GROUP BY $this
                }
                FILTER (?participantCount < 2)
            }
        """ ] ;
    sh:targetClass cacontology-athletic:TeamBasedExploitation .

cacontology-athletic:TeamMembershipCoercionShape a sh:NodeShape ;
    rdfs:label "Team Membership Coercion Shape"@en ;
    rdfs:comment "Enhanced validation shape for team membership coercion with gUFO Situation validation."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "vague" "specific" "detailed" "explicit" ) ;
            sh:maxCount 1 ;
            sh:message "Threat specificity must be one of: vague, specific, detailed, explicit."@en ;
            sh:minCount 1 ;
            sh:path cacontology-athletic:threatSpecificity ] ;
    sh:targetClass cacontology-athletic:TeamMembershipCoercion .

cacontology-athletic:TeamSelectionCoercion a owl:Class ;
    rdfs:label "Team Selection Coercion"@en ;
    rdfs:comment "Use of team selection and roster decisions for sexual coercion and compliance. Enhanced as gUFO Situation."@en ;
    rdfs:subClassOf gufo:Situation,
        cacontology-athletic:TeamDynamicsExploitation .

cacontology-athletic:TrainingBasedTouching a owl:Class ;
    rdfs:label "Training Based Touching"@en ;
    rdfs:comment "Inappropriate touching disguised as athletic training and coaching instruction. Enhanced as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-athletic:PhysicalContactEscalation .

cacontology-athletic:TrainingCampExploitation a owl:Class ;
    rdfs:label "Training Camp Exploitation"@en ;
    rdfs:comment "Exploitation during intensive training camps or extended athletic sessions. Enhanced as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-athletic:AthleticFacilityExploitation ;
    cacontology-gufo:hasTemporalProperty cacontology-gufo:trainingCampBeginTime,
        cacontology-gufo:trainingCampEndTime .

cacontology-athletic:TrainingDrillCoercion a owl:Class ;
    rdfs:label "Training Drill Coercion"@en ;
    rdfs:comment "Use of training drills and exercises for exploitation demands and sexual compliance. Enhanced as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-athletic:PhysicalTrainingCoercion .

cacontology-athletic:TravelTeamCoachRoleShape a sh:NodeShape ;
    rdfs:label "Travel Team Coach Role Shape"@en ;
    rdfs:comment "Enhanced validation shape for travel team coach roles with specialized gUFO Role validation."@en ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-athletic:TravelExperienceRecommendation . }
            WHERE {
                $this a cacontology-athletic:TravelTeamCoachRole .
                $this cacontology-athletic:coachingExperience ?experience .
                FILTER(?experience < 2.0)
                FILTER NOT EXISTS { 
                    $this cacontology-athletic:hasTravelTeamExperience ?travelExp .
                    ?travelExp cacontology-athletic:experienceLevel "sufficient" .
                }
            }
        """ ;
            sh:message "Travel team coaches should have appropriate travel team experience"@en ;
            sh:prefixes cacontology-athletic: ;
            sh:severity sh:Warning ] ;
    sh:targetClass cacontology-athletic:TravelTeamCoachRole .

cacontology-athletic:TravelTeamExploitationShape a sh:NodeShape ;
    rdfs:label "Travel Team Exploitation Shape"@en ;
    rdfs:comment "Enhanced validation shape for travel team exploitation with gUFO Event validation and enhanced authority modeling."@en ;
    sh:property [ sh:hasValue "travel" ;
            sh:message "Travel team exploitation must specify 'travel' as team type"@en ;
            sh:path cacontology-athletic:teamType ] ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-athletic:AuthorityDocumentationWarning . }
            WHERE {
                $this a cacontology-athletic:TravelTeamExploitation .
                FILTER NOT EXISTS { 
                    $this cacontology-athletic:holdsCoachingRole ?role .
                    ?role cacontology-athletic:authorityLevel "enhanced" .
                }
            }
        """ ;
            sh:message "Travel team exploitation should have enhanced coach authority documentation"@en ;
            sh:prefixes cacontology-athletic: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-athletic:TravelTeamExploitation .

cacontology-athletic:coachesTeam a owl:ObjectProperty ;
    rdfs:label "coaches team"@en ;
    rdfs:comment "Links coach to team they coach. Enhanced with gUFO Role-Organization relationships."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range uco-identity:Organization ;
    cacontology-gufo:hasRelationshipConstraint "Coaching relationship must be officially documented" .

cacontology-athletic:hasPhaseTransition a owl:ObjectProperty ;
    rdfs:label "has phase transition"@en ;
    rdfs:comment "Links athletic exploitation to phase transition events."@en ;
    rdfs:domain cacontology-athletic:AthleticCoachingExploitation ;
    rdfs:range gufo:Event .

cacontology-athletic:occursInFacility a owl:ObjectProperty ;
    rdfs:label "occurs in facility"@en ;
    rdfs:comment "Links exploitation to athletic facility where it occurs. Enhanced with gUFO Object location."@en ;
    rdfs:domain cacontology-athletic:AthleticCoachingExploitation ;
    rdfs:range uco-location:Location ;
    cacontology-gufo:hasRelationshipConstraint "Facility must be verified and accessible" .

cacontology-athletic:participatesInSituation a owl:ObjectProperty ;
    rdfs:label "participates in situation"@en ;
    rdfs:comment "Links entities to team dynamics situations they participate in."@en ;
    rdfs:range cacontology-athletic:TeamDynamicsExploitation .

cacontology-athletic:playsOnTeam a owl:ObjectProperty ;
    rdfs:label "plays on team"@en ;
    rdfs:comment "Links player to team they participate in. Enhanced with gUFO participation modeling."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range uco-identity:Organization ;
    cacontology-gufo:hasRelationshipConstraint "Team participation must be verified through records" .

cacontology-athletic:practiceFrequency a owl:DatatypeProperty ;
    rdfs:label "practice frequency"@en ;
    rdfs:comment "Frequency of practice sessions per week. Enhanced with gUFO Event frequency modeling."@en ;
    rdfs:domain cacontology-athletic:AthleticCoachingExploitation ;
    rdfs:range xsd:decimal ;
    cacontology-gufo:hasValidationConstraint "Practice frequency must be realistic for sport and age group" .

cacontology-athletic:utilizesAthleticSpace a owl:ObjectProperty ;
    rdfs:label "utilizes athletic space"@en ;
    rdfs:comment "Links facility exploitation to specific athletic space used. Enhanced with gUFO Object utilization."@en ;
    rdfs:domain cacontology-athletic:AthleticFacilityExploitation ;
    rdfs:range uco-location:Location ;
    cacontology-gufo:hasRelationshipConstraint "Athletic space must be documented and accessible" .

cacontology-case:ActiveInvestigationPhaseShape a sh:NodeShape ;
    rdfs:label "Active Investigation Phase Shape"@en ;
    rdfs:comment "SHACL shape for active investigation phases with anti-rigid gUFO Phase validation."@en ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-case:PhaseSequenceError . }
            WHERE {
                $this a cacontology-case:ActiveInvestigationPhase .
                ?caseManagement cacontology-case:currentPhase $this .
                FILTER NOT EXISTS { 
                    ?caseManagement cacontology-case:previousPhase ?prev .
                    ?prev a cacontology-case:CaseInitiationPhase .
                }
            }
        """ ;
            sh:message "Active investigation phase should follow case initiation phase"@en ;
            sh:prefixes cacontology-case: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-case:ActiveInvestigationPhase .

cacontology-case:AdministrativeReview a owl:Class ;
    rdfs:label "Administrative Review"@en ;
    rdfs:comment "Administrative review of case management, resource allocation, and procedural compliance. Enhanced as gUFO Event."@en,
        "gUFO Event: Administrative review processes with procedural evaluation."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-case:CaseReview .

cacontology-case:AnalystAssignment a owl:Class ;
    rdfs:label "Analyst Assignment"@en ;
    rdfs:comment "Assignment of analysts for data analysis, intelligence gathering, and technical support. Enhanced as gUFO Event linking to anti-rigid gUFO Role."@en,
        "gUFO Event: Analyst assignment processes with analytical responsibilities."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-case:CaseAssignment .

cacontology-case:AntiRigidityValidationShape a sh:NodeShape ;
    rdfs:label "Anti-Rigidity Validation Shape"@en ;
    rdfs:comment "Validation of anti-rigidity constraints for gUFO Phases in case management contexts."@en ;
    sh:sparql [ sh:message "Anti-rigid phases must demonstrate changeability based on case management context"@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a gufo:Phase .
                {
                    { $this a cacontology-case:CaseInitiationPhase . } UNION
                    { $this a cacontology-case:ActiveInvestigationPhase . } UNION
                    { $this a cacontology-case:ProsecutionPreparationPhase . } UNION
                    { $this a cacontology-case:CourtProceedingsPhase . } UNION
                    { $this a cacontology-case:DispositionPhase . }
                }
                FILTER NOT EXISTS { 
                    $this cacontology-gufo:hasAntiRigidityConstraint ?constraint .
                }
            }
        """ ] ;
    sh:targetClass cacontology-case:ActiveInvestigationPhase,
        cacontology-case:CaseInitiationPhase,
        cacontology-case:CourtProceedingsPhase,
        cacontology-case:DispositionPhase,
        cacontology-case:ProsecutionPreparationPhase .

cacontology-case:ArrestWarrant a owl:Class ;
    rdfs:label "Arrest Warrant"@en ;
    rdfs:comment "Legal documentation for arrest warrants including applications, approvals, and execution records. Enhanced as gUFO Object."@en,
        "gUFO Object: Arrest warrant documents with legal authorization properties."@en ;
    rdfs:subClassOf gufo:Object,
        cacontology-case:CaseDocumentation .

cacontology-case:CaseAnalystRole a owl:Class ;
    rdfs:label "Case Analyst Role"@en ;
    rdfs:comment "Role responsible for case analysis, intelligence gathering, and data processing. Enhanced as anti-rigid gUFO Role."@en,
        "gUFO Role (Anti-Rigid): Analyst roles with flexible specialization based on case needs."@en ;
    rdfs:subClassOf gufo:Role,
        uco-role:Role ;
    cacontology-gufo:hasAntiRigidityConstraint "Role specialization varies based on case type and analytical requirements" .

cacontology-case:CaseAssignmentShape a sh:NodeShape ;
    rdfs:label "Case Assignment Shape"@en ;
    rdfs:comment "Enhanced validation shape for case assignment with comprehensive gUFO Event validation and Role relationships."@en ;
    sh:property [ sh:hasValue gufo:Event ;
            sh:message "Case assignment must be instances of gUFO Event"@en ;
            sh:path rdf:type ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Case assignment must specify begin time using gUFO temporal framework"@en ;
            sh:minCount 1 ;
            sh:path cacontology-gufo:assignmentBeginTime ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Case assignment may specify end time using gUFO temporal framework"@en ;
            sh:minCount 0 ;
            sh:path cacontology-gufo:assignmentEndTime ],
        [ sh:datatype xsd:string ;
            sh:in ( "primary_investigator" "secondary_investigator" "lead_detective" "analyst" "supervisor" "prosecutor" ) ;
            sh:maxCount 1 ;
            sh:message "Case assignment must specify assignment type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-case:assignmentType ],
        [ sh:class gufo:Role ;
            sh:message "Case assignment may specify assigned gUFO Role"@en ;
            sh:minCount 0 ;
            sh:path cacontology-case:assignedToRole ] ;
    sh:targetClass cacontology-case:CaseAssignment .

cacontology-case:CaseDocumentationShape a sh:NodeShape ;
    rdfs:label "Case Documentation Shape"@en ;
    rdfs:comment "Enhanced validation shape for case documentation with gUFO Object validation."@en ;
    sh:property [ sh:hasValue gufo:Object ;
            sh:message "Case documentation must be instances of gUFO Object"@en ;
            sh:path rdf:type ],
        [ sh:datatype xsd:string ;
            sh:in ( "case_report" "evidence_log" "interview_notes" "search_warrant" "arrest_warrant" "court_filing" "expert_report" ) ;
            sh:maxCount 1 ;
            sh:message "Case documentation must specify document type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-case:documentType ],
        [ sh:datatype xsd:string ;
            sh:in ( "draft" "review" "approved" "filed" "sealed" "archived" "destroyed" ) ;
            sh:maxCount 1 ;
            sh:message "Case documentation must specify document status from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-case:documentStatus ] ;
    sh:targetClass cacontology-case:CaseDocumentation .

cacontology-case:CaseDurationMetrics a owl:Class ;
    rdfs:label "Case Duration Metrics"@en ;
    rdfs:comment "Metrics tracking case duration from opening to closure across different stages. Enhanced as gUFO Object."@en,
        "gUFO Object: Duration metrics with measurable temporal characteristics."@en ;
    rdfs:subClassOf gufo:Object,
        cacontology-case:CaseMetrics .

cacontology-case:CaseInitiationPhaseShape a sh:NodeShape ;
    rdfs:label "Case Initiation Phase Shape"@en ;
    rdfs:comment "SHACL shape for case initiation phases with anti-rigid gUFO Phase validation."@en ;
    sh:property [ sh:hasValue gufo:Phase ;
            sh:message "Case initiation phases must be instances of anti-rigid gUFO Phase"@en ;
            sh:path rdf:type ],
        [ sh:datatype xsd:dateTime ;
            sh:message "Phase may specify transition times"@en ;
            sh:minCount 0 ;
            sh:path cacontology-gufo:phaseTransitionTime ] ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-case:AntiRigidityError . }
            WHERE {
                $this a cacontology-case:CaseInitiationPhase .
                FILTER NOT EXISTS { 
                    $this cacontology-gufo:hasAntiRigidityConstraint ?constraint .
                }
            }
        """ ;
            sh:message "Case initiation phases must demonstrate anti-rigidity (duration varies based on case complexity)"@en ;
            sh:prefixes cacontology-case: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-case:CaseInitiationPhase .

cacontology-case:CaseManagementCrossReferenceShape a sh:NodeShape ;
    rdfs:label "Case Management Cross Reference Shape"@en ;
    rdfs:comment "Enhanced validation that case management involves appropriate gUFO foundational entities."@en ;
    sh:sparql [ sh:message "Case management should involve gUFO Role assignments, Event workflows, and Object documentation."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-case:CaseManagement .
                FILTER NOT EXISTS {
                    { $this cacontology-case:hasAssignment ?assignment . ?assignment a gufo:Event . } UNION
                    { $this cacontology-case:followsWorkflow ?workflow . ?workflow a gufo:Event . } UNION
                    { $this cacontology-case:hasDocumentation ?doc . ?doc a gufo:Object . }
                }
            }
        """ ] ;
    sh:targetClass cacontology-case:CaseManagement .

cacontology-case:CaseManagementShape a sh:NodeShape ;
    rdfs:label "Case Management Shape"@en ;
    rdfs:comment "Enhanced validation shape for case management with comprehensive gUFO Object validation."@en ;
    sh:property [ sh:hasValue gufo:Object ;
            sh:message "Case management must be instances of gUFO Object"@en ;
            sh:path rdf:type ],
        [ sh:datatype xsd:string ;
            sh:in ( "critical" "high" "medium" "low" "routine" "administrative" ) ;
            sh:maxCount 1 ;
            sh:message "Case management must specify case priority from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-case:casePriority ],
        [ sh:class gufo:Phase ;
            sh:maxCount 1 ;
            sh:message "Case management may specify current operational phase"@en ;
            sh:minCount 0 ;
            sh:path cacontology-case:currentPhase ],
        [ sh:datatype xsd:string ;
            sh:in ( "open" "active" "pending" "suspended" "closed" "archived" "transferred" "merged" ) ;
            sh:maxCount 1 ;
            sh:message "Case management must specify case status from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-case:caseStatus ] ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-case:ObjectConsistencyError . }
            WHERE {
                $this a cacontology-case:CaseManagement .
                FILTER NOT EXISTS { 
                    $this a gufo:Object .
                    $this cacontology-case:caseStatus ?status .
                    $this cacontology-case:casePriority ?priority .
                }
            }
        """ ;
            sh:message "Case management must have proper gUFO Object properties"@en ;
            sh:prefixes cacontology-case: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-case:CaseManagement .

cacontology-case:CaseManagerRoleShape a sh:NodeShape ;
    rdfs:label "Case Manager Role Shape"@en ;
    rdfs:comment "Enhanced validation shape for case manager roles with anti-rigid gUFO Role validation."@en ;
    sh:property [ sh:hasValue gufo:Role ;
            sh:message "Case manager roles must be instances of anti-rigid gUFO Role"@en ;
            sh:path rdf:type ] ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-case:RoleCompetencyError . }
            WHERE {
                $this a cacontology-case:CaseManagerRole .
                FILTER NOT EXISTS { 
                    $this cacontology-case:hasCompetency ?competency .
                    ?competency cacontology-case:competencyType "case_management" .
                }
            }
        """ ;
            sh:message "Case manager roles must have appropriate management competency"@en ;
            sh:prefixes cacontology-case: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-case:CaseManagerRole .

cacontology-case:CaseProsecutorRole a owl:Class ;
    rdfs:label "Case Prosecutor Role"@en ;
    rdfs:comment "Role responsible for legal review, charging decisions, and prosecution activities. Enhanced as anti-rigid gUFO Role."@en,
        "gUFO Role (Anti-Rigid): Prosecutor roles with flexible involvement based on case legal requirements."@en ;
    rdfs:subClassOf gufo:Role,
        uco-role:Role ;
    cacontology-gufo:hasAntiRigidityConstraint "Role involvement varies based on case legal complexity and jurisdiction" .

cacontology-case:CaseReport a owl:Class ;
    rdfs:label "Case Report"@en ;
    rdfs:comment "Formal case report documenting investigation findings, evidence, and recommendations. Enhanced as gUFO Object."@en,
        "gUFO Object: Case report documents with measurable characteristics and content properties."@en ;
    rdfs:subClassOf gufo:Object,
        cacontology-case:CaseDocumentation .

cacontology-case:CaseReviewShape a sh:NodeShape ;
    rdfs:label "Case Review Shape"@en ;
    rdfs:comment "Enhanced validation shape for case review with gUFO Event validation."@en ;
    sh:property [ sh:hasValue gufo:Event ;
            sh:message "Case review must be instances of gUFO Event"@en ;
            sh:path rdf:type ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Case review must specify begin time"@en ;
            sh:minCount 1 ;
            sh:path cacontology-gufo:reviewBeginTime ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Case review may specify end time"@en ;
            sh:minCount 0 ;
            sh:path cacontology-gufo:reviewEndTime ],
        [ sh:datatype xsd:string ;
            sh:in ( "supervisory_review" "peer_review" "quality_assurance" "legal_review" "administrative_review" "external_review" ) ;
            sh:maxCount 1 ;
            sh:message "Case review must specify review type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-case:reviewType ] ;
    sh:targetClass cacontology-case:CaseReview .

cacontology-case:CaseWorkflowShape a sh:NodeShape ;
    rdfs:label "Case Workflow Shape"@en ;
    rdfs:comment "Enhanced validation shape for case workflow with comprehensive gUFO Event validation."@en ;
    sh:property [ sh:hasValue gufo:Event ;
            sh:message "Case workflow must be instances of gUFO Event"@en ;
            sh:path rdf:type ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Case workflow must specify begin time using gUFO temporal framework"@en ;
            sh:minCount 1 ;
            sh:path cacontology-gufo:workflowBeginTime ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Case workflow may specify end time using gUFO temporal framework"@en ;
            sh:minCount 0 ;
            sh:path cacontology-gufo:workflowEndTime ],
        [ sh:datatype xsd:string ;
            sh:in ( "intake" "initial_review" "investigation" "evidence_analysis" "prosecution_review" "court_proceedings" "disposition" ) ;
            sh:maxCount 1 ;
            sh:message "Case workflow must specify workflow stage from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-case:workflowStage ] ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-case:TemporalInconsistencyError . }
            WHERE {
                $this cacontology-gufo:workflowBeginTime ?begin .
                $this cacontology-gufo:workflowEndTime ?end .
                FILTER(?end <= ?begin)
            }
        """ ;
            sh:message "Workflow end time must be after begin time"@en ;
            sh:prefixes cacontology-case: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-case:CaseWorkflow .

cacontology-case:ColdCaseManagement a owl:Class ;
    rdfs:label "Cold Case Management"@en ;
    rdfs:comment "Management protocols for cold cases including periodic review and new evidence integration. Enhanced as gUFO Situation for cold case coordination."@en,
        "gUFO Situation: Cold case coordination contexts with periodic review cycles and evidence reanalysis."@en ;
    rdfs:subClassOf gufo:Situation,
        cacontology-case:CaseManagement .

cacontology-case:ComplexCaseManagement a owl:Class ;
    rdfs:label "Complex Case Management"@en ;
    rdfs:comment "Specialized management for complex cases involving multiple offenses, victims, or extensive evidence. Enhanced as gUFO Situation for complexity coordination."@en,
        "gUFO Situation: Complex coordination contexts with multiple participants and evidence management requirements."@en ;
    rdfs:subClassOf gufo:Situation,
        cacontology-case:CaseManagement .

cacontology-case:CostPerCaseMetrics a owl:Class ;
    rdfs:label "Cost Per Case Metrics"@en ;
    rdfs:comment "Financial metrics tracking costs associated with case investigation and prosecution. Enhanced as gUFO Object."@en,
        "gUFO Object: Cost metrics with financial measurement properties."@en ;
    rdfs:subClassOf gufo:Object,
        cacontology-case:CaseMetrics .

cacontology-case:CourtFiling a owl:Class ;
    rdfs:label "Court Filing"@en ;
    rdfs:comment "Legal documents filed with courts including motions, briefs, and procedural filings. Enhanced as gUFO Object."@en,
        "gUFO Object: Court filing documents with legal procedural properties."@en ;
    rdfs:subClassOf gufo:Object,
        cacontology-case:CaseDocumentation .

cacontology-case:EvidenceLog a owl:Class ;
    rdfs:label "Evidence Log"@en ;
    rdfs:comment "Comprehensive log of all evidence collected, analyzed, and maintained for the case. Enhanced as gUFO Object."@en,
        "gUFO Object: Evidence log documents with systematic tracking properties."@en ;
    rdfs:subClassOf gufo:Object,
        cacontology-case:CaseDocumentation .

cacontology-case:ExpertReport a owl:Class ;
    rdfs:label "Expert Report"@en ;
    rdfs:comment "Expert analysis reports including forensic findings, psychological evaluations, and technical assessments. Enhanced as gUFO Object."@en,
        "gUFO Object: Expert report documents with analytical and assessment properties."@en ;
    rdfs:subClassOf gufo:Object,
        cacontology-case:CaseDocumentation .

cacontology-case:ExternalReview a owl:Class ;
    rdfs:label "External Review"@en ;
    rdfs:comment "External review by independent parties for oversight, audit, or specialized expertise. Enhanced as gUFO Event."@en,
        "gUFO Event: External review processes with independent evaluation."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-case:CaseReview .

cacontology-case:GUFODataQualityShape a sh:NodeShape ;
    rdfs:label "gUFO Data Quality Shape"@en ;
    rdfs:comment "Enhanced data quality validation for case management gUFO entities with foundational ontology compliance."@en ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-case:FoundationalTypeError . }
            WHERE {
                {
                    $this a ?managementType .
                    ?managementType rdfs:subClassOf* cacontology-case:CaseManagement .
                    FILTER NOT EXISTS { $this a gufo:Object . }
                } UNION {
                    $this a ?workflowType .
                    ?workflowType rdfs:subClassOf* cacontology-case:CaseWorkflow .
                    FILTER NOT EXISTS { $this a gufo:Event . }
                } UNION {
                    $this a ?assignmentType .
                    ?assignmentType rdfs:subClassOf* cacontology-case:CaseAssignment .
                    FILTER NOT EXISTS { $this a gufo:Event . }
                } UNION {
                    $this a ?docType .
                    ?docType rdfs:subClassOf* cacontology-case:CaseDocumentation .
                    FILTER NOT EXISTS { $this a gufo:Object . }
                } UNION {
                    $this a ?reviewType .
                    ?reviewType rdfs:subClassOf* cacontology-case:CaseReview .
                    FILTER NOT EXISTS { $this a gufo:Event . }
                }
            }
        """ ;
            sh:message "Case management entities must be properly typed as gUFO foundational entities"@en ;
            sh:prefixes cacontology-case: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-case:CaseAssignment,
        cacontology-case:CaseDocumentation,
        cacontology-case:CaseManagement,
        cacontology-case:CaseReview,
        cacontology-case:CaseWorkflow .

cacontology-case:GUFOTemporalValidationShape a sh:NodeShape ;
    rdfs:label "gUFO Temporal Validation Shape"@en ;
    rdfs:comment "Enhanced temporal consistency validation for case management gUFO Events using gUFO temporal framework."@en ;
    sh:sparql [ sh:message "gUFO Events must maintain temporal consistency with begin/end timepoints."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a gufo:Event .
                {
                    { $this cacontology-gufo:workflowBeginTime ?begin . $this cacontology-gufo:workflowEndTime ?end . } UNION
                    { $this cacontology-gufo:assignmentBeginTime ?begin . $this cacontology-gufo:assignmentEndTime ?end . } UNION
                    { $this cacontology-gufo:reviewBeginTime ?begin . $this cacontology-gufo:reviewEndTime ?end . } UNION
                    { $this cacontology-gufo:closureBeginTime ?begin . $this cacontology-gufo:closureTime ?end . }
                }
                FILTER (?begin >= ?end)
            }
        """ ] ;
    sh:targetClass cacontology-case:CaseAssignment,
        cacontology-case:CaseClosure,
        cacontology-case:CaseReview,
        cacontology-case:CaseWorkflow .

cacontology-case:HighPriorityCaseManagement a owl:Class ;
    rdfs:label "High Priority Case Management"@en ;
    rdfs:comment "Enhanced management protocols for critical and high-priority cases requiring expedited processing. Enhanced as gUFO Situation for priority coordination."@en,
        "gUFO Situation: High-priority coordination contexts with enhanced resource allocation and expedited procedures."@en ;
    rdfs:subClassOf gufo:Situation,
        cacontology-case:CaseManagement .

cacontology-case:IntakeWorkflowShape a sh:NodeShape ;
    rdfs:label "Intake Workflow Shape"@en ;
    rdfs:comment "Enhanced validation shape for intake workflow with gUFO Event validation and specialized temporal modeling."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Intake workflow must specify intake begin time"@en ;
            sh:minCount 1 ;
            sh:path cacontology-gufo:intakeBeginTime ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Intake workflow may specify triage completion time"@en ;
            sh:minCount 0 ;
            sh:path cacontology-gufo:triageCompletionTime ] ;
    sh:targetClass cacontology-case:IntakeWorkflow .

cacontology-case:InterviewNotes a owl:Class ;
    rdfs:label "Interview Notes"@en ;
    rdfs:comment "Documentation of interviews conducted with victims, witnesses, and suspects. Enhanced as gUFO Object."@en,
        "gUFO Object: Interview documentation with content and temporal properties."@en ;
    rdfs:subClassOf gufo:Object,
        cacontology-case:CaseDocumentation .

cacontology-case:LeadInvestigatorRole a owl:Class ;
    rdfs:label "Lead Investigator Role"@en ;
    rdfs:comment "Primary investigator role with leadership responsibilities for case investigation. Enhanced as anti-rigid gUFO Role."@en,
        "gUFO Role (Anti-Rigid): Lead investigator roles with flexible authority based on case requirements."@en ;
    rdfs:subClassOf gufo:Role,
        uco-role:Role ;
    cacontology-gufo:hasAntiRigidityConstraint "Role scope varies based on case complexity and team structure" .

cacontology-case:LegalReview a owl:Class ;
    rdfs:label "Legal Review"@en ;
    rdfs:comment "Legal review of case materials, procedures, and prosecution readiness. Enhanced as gUFO Event."@en,
        "gUFO Event: Legal review processes with prosecutorial evaluation."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-case:CaseReview .

cacontology-case:MultiJurisdictionalCaseManagementShape a sh:NodeShape ;
    rdfs:label "Multi Jurisdictional Case Management Shape"@en ;
    rdfs:comment "Enhanced validation shape for multi-jurisdictional case management with gUFO Situation validation."@en ;
    sh:property [ sh:hasValue gufo:Situation ;
            sh:message "Multi-jurisdictional case management must be instances of gUFO Situation"@en ;
            sh:path rdf:type ] ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a cacontology-case:JurisdictionCoordinationError . }
            WHERE {
                $this a cacontology-case:MultiJurisdictionalCaseManagement .
                {
                    SELECT $this (COUNT(?jurisdiction) AS ?jurisdictionCount) WHERE {
                        $this cacontology-case:participatesInManagement ?jurisdiction .
                        ?jurisdiction a cacontology-case:JurisdictionalEntity .
                    } GROUP BY $this
                }
                FILTER(?jurisdictionCount < 2)
            }
        """ ;
            sh:message "Multi-jurisdictional case management must involve multiple jurisdictions"@en ;
            sh:prefixes cacontology-case: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-case:MultiJurisdictionalCaseManagement .

cacontology-case:PeerReview a owl:Class ;
    rdfs:label "Peer Review"@en ;
    rdfs:comment "Peer review process for case methodology, analysis, and conclusions. Enhanced as gUFO Event."@en,
        "gUFO Event: Peer review processes with collaborative evaluation."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-case:CaseReview .

cacontology-case:PrimaryInvestigatorAssignment a owl:Class ;
    rdfs:label "Primary Investigator Assignment"@en ;
    rdfs:comment "Lead investigator assignment with primary responsibility for case management and coordination. Enhanced as gUFO Event linking to anti-rigid gUFO Role."@en,
        "gUFO Event: Primary investigator assignment processes with leadership responsibilities."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-case:InvestigatorAssignment .

cacontology-case:ProsecutorAssignment a owl:Class ;
    rdfs:label "Prosecutor Assignment"@en ;
    rdfs:comment "Assignment of prosecutors for legal review, charging decisions, and court representation. Enhanced as gUFO Event linking to anti-rigid gUFO Role."@en,
        "gUFO Event: Prosecutor assignment processes with legal responsibilities."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-case:CaseAssignment .

cacontology-case:QualityAssuranceReview a owl:Class ;
    rdfs:label "Quality Assurance Review"@en ;
    rdfs:comment "Systematic quality assurance review ensuring compliance with standards and procedures. Enhanced as gUFO Event."@en,
        "gUFO Event: Quality assurance processes with compliance evaluation."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-case:CaseReview .

cacontology-case:QualityScoreMetrics a owl:Class ;
    rdfs:label "Quality Score Metrics"@en ;
    rdfs:comment "Quality assessment metrics evaluating case management effectiveness and outcomes. Enhanced as gUFO Object."@en,
        "gUFO Object: Quality metrics with assessment measurement properties."@en ;
    rdfs:subClassOf gufo:Object,
        cacontology-case:CaseMetrics .

cacontology-case:ResolutionRateMetrics a owl:Class ;
    rdfs:label "Resolution Rate Metrics"@en ;
    rdfs:comment "Metrics tracking case resolution rates including conviction and closure statistics. Enhanced as gUFO Object."@en,
        "gUFO Object: Resolution metrics with statistical measurement properties."@en ;
    rdfs:subClassOf gufo:Object,
        cacontology-case:CaseMetrics .

cacontology-case:ResourceUtilizationMetrics a owl:Class ;
    rdfs:label "Resource Utilization Metrics"@en ;
    rdfs:comment "Metrics tracking resource allocation and utilization efficiency across cases. Enhanced as gUFO Object."@en,
        "gUFO Object: Resource metrics with efficiency measurement properties."@en ;
    rdfs:subClassOf gufo:Object,
        cacontology-case:CaseMetrics .

cacontology-case:SearchWarrant a owl:Class ;
    rdfs:label "Search Warrant"@en ;
    rdfs:comment "Legal documentation for search warrants including applications, approvals, and execution records. Enhanced as gUFO Object."@en,
        "gUFO Object: Legal warrant documents with authorization and execution properties."@en ;
    rdfs:subClassOf gufo:Object,
        cacontology-case:CaseDocumentation .

cacontology-case:SecondaryInvestigatorAssignment a owl:Class ;
    rdfs:label "Secondary Investigator Assignment"@en ;
    rdfs:comment "Supporting investigator assignment providing specialized skills or additional resources. Enhanced as gUFO Event linking to anti-rigid gUFO Role."@en,
        "gUFO Event: Secondary investigator assignment processes with supporting responsibilities."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-case:InvestigatorAssignment .

cacontology-case:SupervisorAssignment a owl:Class ;
    rdfs:label "Supervisor Assignment"@en ;
    rdfs:comment "Supervisory assignment for case oversight, quality assurance, and administrative guidance. Enhanced as gUFO Event linking to anti-rigid gUFO Role."@en,
        "gUFO Event: Supervisor assignment processes with oversight responsibilities."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-case:CaseAssignment .

cacontology-case:SupervisoryReview a owl:Class ;
    rdfs:label "Supervisory Review"@en ;
    rdfs:comment "Formal supervisory review of case progress, decisions, and quality standards. Enhanced as gUFO Event."@en,
        "gUFO Event: Supervisory review processes with evaluation outcomes."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-case:CaseReview .

cacontology-case:WorkflowIntegrityValidationShape a sh:NodeShape ;
    rdfs:label "Workflow Integrity Validation Shape"@en ;
    rdfs:comment "Validation of workflow integrity for case management."@en ;
    sh:sparql [ sh:message "Case management involving multiple phases must have enhanced coordination documentation"@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-case:CaseManagement .
                {
                    SELECT $this (COUNT(?phase) AS ?phaseCount) WHERE {
                        $this cacontology-case:currentPhase ?phase .
                    } GROUP BY $this
                }
                FILTER(?phaseCount > 3)
                FILTER NOT EXISTS {
                    $this cacontology-case:hasEnhancedDocumentation ?documentation .
                    ?documentation cacontology-case:documentationType "multi_phase_coordination" .
                }
            }
        """ ] ;
    sh:targetClass cacontology-case:CaseManagement .

cacontology-case:accessLevel a owl:DatatypeProperty ;
    rdfs:label "access level"@en ;
    rdfs:comment "Access level for case information (public, restricted, confidential, classified, need_to_know, compartmented)."@en ;
    rdfs:domain cacontology-case:CaseTracking ;
    rdfs:range xsd:string .

cacontology-case:appealStatus a owl:DatatypeProperty ;
    rdfs:label "appeal status"@en ;
    rdfs:comment "Status of any appeals (no_appeal, appeal_pending, appeal_denied, appeal_granted, remanded, overturned)."@en ;
    rdfs:domain cacontology-case:CaseClosure ;
    rdfs:range xsd:string .

cacontology-case:approvedBy a owl:ObjectProperty ;
    rdfs:label "approved by"@en ;
    rdfs:comment "Links documentation to approving authority."@en ;
    rdfs:domain cacontology-case:CaseDocumentation ;
    rdfs:range uco-identity:Person .

cacontology-case:archivalDate a owl:DatatypeProperty ;
    rdfs:label "archival date"@en ;
    rdfs:comment "Date when case materials were archived."@en ;
    rdfs:domain cacontology-case:CaseClosure ;
    rdfs:range xsd:dateTime .

cacontology-case:archivedAt a owl:ObjectProperty ;
    rdfs:label "archived at"@en ;
    rdfs:comment "Links case closure to archival location."@en ;
    rdfs:domain cacontology-case:CaseClosure ;
    rdfs:range uco-core:UcoObject .

cacontology-case:assignedBy a owl:ObjectProperty ;
    rdfs:label "assigned by"@en ;
    rdfs:comment "Links assignment to assigning authority."@en ;
    rdfs:domain cacontology-case:CaseAssignment ;
    rdfs:range uco-identity:Person .

cacontology-case:assignedInvestigator a owl:DatatypeProperty ;
    rdfs:label "assigned investigator"@en ;
    rdfs:comment "Name or identifier of the assigned investigator."@en ;
    rdfs:domain cacontology-case:CaseManagement ;
    rdfs:range xsd:string .

cacontology-case:assignedTo a owl:ObjectProperty ;
    rdfs:label "assigned to"@en ;
    rdfs:comment "Links assignment to assigned personnel."@en ;
    rdfs:domain cacontology-case:CaseAssignment ;
    rdfs:range uco-identity:Person .

cacontology-case:assignmentDate a owl:DatatypeProperty ;
    rdfs:label "assignment date"@en ;
    rdfs:comment "Date when the assignment was made."@en ;
    rdfs:domain cacontology-case:CaseAssignment ;
    rdfs:range xsd:dateTime .

cacontology-case:assignmentStatus a owl:DatatypeProperty ;
    rdfs:label "assignment status"@en ;
    rdfs:comment "Status of the assignment (active, inactive, transferred, completed, suspended, terminated)."@en ;
    rdfs:domain cacontology-case:CaseAssignment ;
    rdfs:range xsd:string .

cacontology-case:benchmarkValue a owl:DatatypeProperty ;
    rdfs:label "benchmark value"@en ;
    rdfs:comment "Benchmark or target value for the metric."@en ;
    rdfs:domain cacontology-case:CaseMetrics ;
    rdfs:range xsd:decimal .

cacontology-case:benchmarkedAgainst a owl:ObjectProperty ;
    rdfs:label "benchmarked against"@en ;
    rdfs:comment "Links metrics to benchmark standards."@en ;
    rdfs:domain cacontology-case:CaseMetrics ;
    rdfs:range cacontology-case:CaseMetrics .

cacontology-case:caseCloseDate a owl:DatatypeProperty ;
    rdfs:label "case close date"@en ;
    rdfs:comment "Date when the case was officially closed."@en ;
    rdfs:domain cacontology-case:CaseManagement ;
    rdfs:range xsd:dateTime .

cacontology-case:caseOpenDate a owl:DatatypeProperty ;
    rdfs:label "case open date"@en ;
    rdfs:comment "Date when the case was officially opened."@en ;
    rdfs:domain cacontology-case:CaseManagement ;
    rdfs:range xsd:dateTime .

cacontology-case:caseType a owl:DatatypeProperty ;
    rdfs:label "case type"@en ;
    rdfs:comment "Type of case (possession, distribution, production, trafficking, exploitation, grooming, sextortion, multi_offense)."@en ;
    rdfs:domain cacontology-case:CaseManagement ;
    rdfs:range xsd:string .

cacontology-case:caseloadCount a owl:DatatypeProperty ;
    rdfs:label "caseload count"@en ;
    rdfs:comment "Number of active cases assigned to the investigator."@en ;
    rdfs:domain cacontology-case:InvestigatorAssignment ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-case:certificationLevel a owl:DatatypeProperty ;
    rdfs:label "certification level"@en ;
    rdfs:comment "Certification level of the investigator (basic, intermediate, advanced, expert, specialized, master)."@en ;
    rdfs:domain cacontology-case:InvestigatorAssignment ;
    rdfs:range xsd:string .

cacontology-case:classificationLevel a owl:DatatypeProperty ;
    rdfs:label "classification level"@en ;
    rdfs:comment "Security classification level (unclassified, law_enforcement_sensitive, confidential, restricted, classified, top_secret)."@en ;
    rdfs:domain cacontology-case:CaseDocumentation ;
    rdfs:range xsd:string .

cacontology-case:closedBy a owl:ObjectProperty ;
    rdfs:label "closed by"@en ;
    rdfs:comment "Links case closure to closing authority."@en ;
    rdfs:domain cacontology-case:CaseClosure ;
    rdfs:range uco-identity:Person .

cacontology-case:closureDate a owl:DatatypeProperty ;
    rdfs:label "closure date"@en ;
    rdfs:comment "Date when the case was closed."@en ;
    rdfs:domain cacontology-case:CaseClosure ;
    rdfs:range xsd:dateTime .

cacontology-case:closureReason a owl:DatatypeProperty ;
    rdfs:label "closure reason"@en ;
    rdfs:comment "Reason for case closure (conviction, plea_agreement, dismissal, insufficient_evidence, statute_limitations, death_of_suspect, administrative_closure)."@en ;
    rdfs:domain cacontology-case:CaseClosure ;
    rdfs:range xsd:string .

cacontology-case:conductsReview a owl:ObjectProperty ;
    rdfs:label "conducts review"@en ;
    rdfs:comment "Links reviewer to review process."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range cacontology-case:CaseReview .

cacontology-case:creationDate a owl:DatatypeProperty ;
    rdfs:label "creation date"@en ;
    rdfs:comment "Date when the document was created."@en ;
    rdfs:domain cacontology-case:CaseDocumentation ;
    rdfs:range xsd:dateTime .

cacontology-case:documentedBy a owl:ObjectProperty ;
    rdfs:label "documented by"@en ;
    rdfs:comment "Links documentation to creating personnel."@en ;
    rdfs:domain cacontology-case:CaseDocumentation ;
    rdfs:range uco-identity:Person .

cacontology-case:finalDisposition a owl:DatatypeProperty ;
    rdfs:label "final disposition"@en ;
    rdfs:comment "Final legal disposition (guilty_verdict, not_guilty_verdict, plea_guilty, plea_no_contest, charges_dropped, case_dismissed, no_charges_filed)."@en ;
    rdfs:domain cacontology-case:CaseClosure ;
    rdfs:range xsd:string .

cacontology-case:followsStage a owl:ObjectProperty ;
    rdfs:label "follows stage"@en ;
    rdfs:comment "Links workflow stage to preceding stage."@en ;
    rdfs:domain cacontology-case:CaseWorkflow ;
    rdfs:range cacontology-case:CaseWorkflow .

cacontology-case:followsWorkflow a owl:ObjectProperty ;
    rdfs:label "follows workflow"@en ;
    rdfs:comment "Links case to workflow stages and processes. Enhanced with gUFO Event sequence modeling."@en ;
    rdfs:domain cacontology-case:CaseManagement ;
    rdfs:range cacontology-case:CaseWorkflow ;
    cacontology-gufo:hasRelationshipConstraint "Workflow relationship must maintain temporal consistency" .

cacontology-case:generatesMetrics a owl:ObjectProperty ;
    rdfs:label "generates metrics"@en ;
    rdfs:comment "Links case to performance metrics and analytics."@en ;
    rdfs:domain cacontology-case:CaseManagement ;
    rdfs:range cacontology-case:CaseMetrics .

cacontology-case:hasAssignment a owl:ObjectProperty ;
    rdfs:label "has assignment"@en ;
    rdfs:comment "Links case to personnel assignments. Enhanced with gUFO Role assignment relationships."@en ;
    rdfs:domain cacontology-case:CaseManagement ;
    rdfs:range cacontology-case:CaseAssignment ;
    cacontology-gufo:hasRelationshipConstraint "Assignment relationship must be active and verified" .

cacontology-case:hasDocumentation a owl:ObjectProperty ;
    rdfs:label "has documentation"@en ;
    rdfs:comment "Links case to associated documentation."@en ;
    rdfs:domain cacontology-case:CaseManagement ;
    rdfs:range cacontology-case:CaseDocumentation .

cacontology-case:hasPhaseTransition a owl:ObjectProperty ;
    rdfs:label "has phase transition"@en ;
    rdfs:comment "Links case management to phase transition events."@en ;
    rdfs:domain cacontology-case:CaseManagement ;
    rdfs:range gufo:Event .

cacontology-case:holdsRole a owl:ObjectProperty ;
    rdfs:label "holds role"@en ;
    rdfs:comment "Links person to case management role they hold. Enhanced with gUFO Role assignment."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range gufo:Role ;
    cacontology-gufo:hasRelationshipConstraint "Role assignment must be active and verified" .

cacontology-case:investigatorExperience a owl:DatatypeProperty ;
    rdfs:label "investigator experience"@en ;
    rdfs:comment "Years of experience of the assigned investigator."@en ;
    rdfs:domain cacontology-case:InvestigatorAssignment ;
    rdfs:range xsd:decimal .

cacontology-case:jurisdictionLevel a owl:DatatypeProperty ;
    rdfs:label "jurisdiction level"@en ;
    rdfs:comment "Level of jurisdiction (local, state, federal, multi_state, international, joint_jurisdiction)."@en ;
    rdfs:domain cacontology-case:CaseManagement ;
    rdfs:range xsd:string .

cacontology-case:lastModified a owl:DatatypeProperty ;
    rdfs:label "last modified"@en ;
    rdfs:comment "Date when the document was last modified."@en ;
    rdfs:domain cacontology-case:CaseDocumentation ;
    rdfs:range xsd:dateTime .

cacontology-case:lastUpdate a owl:DatatypeProperty ;
    rdfs:label "last update"@en ;
    rdfs:comment "Date and time of the last update to case tracking."@en ;
    rdfs:domain cacontology-case:CaseTracking ;
    rdfs:range xsd:dateTime .

cacontology-case:managesCase a owl:ObjectProperty ;
    rdfs:label "manages case"@en ;
    rdfs:comment "Links case management to specific investigations. Enhanced with gUFO Object-Event relationships."@en ;
    rdfs:domain cacontology-case:CaseManagement ;
    rdfs:range case-investigation:Investigation ;
    cacontology-gufo:hasRelationshipConstraint "Case management relationship must be officially documented" .

cacontology-case:measurementUnit a owl:DatatypeProperty ;
    rdfs:label "measurement unit"@en ;
    rdfs:comment "Unit of measurement (days, hours, percentage, count, dollars, score, ratio)."@en ;
    rdfs:domain cacontology-case:CaseMetrics ;
    rdfs:range xsd:string .

cacontology-case:measuresPerformance a owl:ObjectProperty ;
    rdfs:label "measures performance"@en ;
    rdfs:comment "Links metrics to performance measurement targets."@en ;
    rdfs:domain cacontology-case:CaseMetrics ;
    rdfs:range uco-core:UcoObject .

cacontology-case:metricType a owl:DatatypeProperty ;
    rdfs:label "metric type"@en ;
    rdfs:comment "Type of metric (case_duration, resolution_rate, conviction_rate, resource_utilization, cost_per_case, quality_score)."@en ;
    rdfs:domain cacontology-case:CaseMetrics ;
    rdfs:range xsd:string .

cacontology-case:metricValue a owl:DatatypeProperty ;
    rdfs:label "metric value"@en ;
    rdfs:comment "Numerical value of the metric."@en ;
    rdfs:domain cacontology-case:CaseMetrics ;
    rdfs:range xsd:decimal .

cacontology-case:participatesInManagement a owl:ObjectProperty ;
    rdfs:label "participates in management"@en ;
    rdfs:comment "Links entities to case management situations they participate in."@en ;
    rdfs:range cacontology-case:CaseManagement .

cacontology-case:precedesStage a owl:ObjectProperty ;
    rdfs:label "precedes stage"@en ;
    rdfs:comment "Links workflow stage to subsequent stage."@en ;
    rdfs:domain cacontology-case:CaseWorkflow ;
    rdfs:range cacontology-case:CaseWorkflow .

cacontology-case:recommendationsCount a owl:DatatypeProperty ;
    rdfs:label "recommendations count"@en ;
    rdfs:comment "Number of recommendations made during the review."@en ;
    rdfs:domain cacontology-case:CaseReview ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-case:reportingPeriod a owl:DatatypeProperty ;
    rdfs:label "reporting period"@en ;
    rdfs:comment "Period for metric reporting (daily, weekly, monthly, quarterly, annually, case_based)."@en ;
    rdfs:domain cacontology-case:CaseMetrics ;
    rdfs:range xsd:string .

cacontology-case:resultsInClosure a owl:ObjectProperty ;
    rdfs:label "results in closure"@en ;
    rdfs:comment "Links case to closure information and final disposition."@en ;
    rdfs:domain cacontology-case:CaseManagement ;
    rdfs:range cacontology-case:CaseClosure .

cacontology-case:retentionPeriod a owl:DatatypeProperty ;
    rdfs:label "retention period"@en ;
    rdfs:comment "Document retention period in days."@en ;
    rdfs:domain cacontology-case:CaseDocumentation ;
    rdfs:range xsd:decimal .

cacontology-case:reviewDate a owl:DatatypeProperty ;
    rdfs:label "review date"@en ;
    rdfs:comment "Date when the review was conducted."@en ;
    rdfs:domain cacontology-case:CaseReview ;
    rdfs:range xsd:dateTime .

cacontology-case:reviewOutcome a owl:DatatypeProperty ;
    rdfs:label "review outcome"@en ;
    rdfs:comment "Outcome of the review (approved, approved_with_conditions, requires_revision, rejected, escalated, deferred)."@en ;
    rdfs:domain cacontology-case:CaseReview ;
    rdfs:range xsd:string .

cacontology-case:reviewedBy a owl:ObjectProperty ;
    rdfs:label "reviewed by"@en ;
    rdfs:comment "Links documentation to reviewing personnel."@en ;
    rdfs:domain cacontology-case:CaseDocumentation ;
    rdfs:range uco-identity:Person .

cacontology-case:reviewerRole a owl:DatatypeProperty ;
    rdfs:label "reviewer role"@en ;
    rdfs:comment "Role of the reviewer (supervisor, senior_investigator, prosecutor, legal_counsel, quality_assurance, external_expert)."@en ;
    rdfs:domain cacontology-case:CaseReview ;
    rdfs:range xsd:string .

cacontology-case:reviewsCase a owl:ObjectProperty ;
    rdfs:label "reviews case"@en ;
    rdfs:comment "Links review to case being reviewed."@en ;
    rdfs:domain cacontology-case:CaseReview ;
    rdfs:range cacontology-case:CaseManagement .

cacontology-case:specialization a owl:DatatypeProperty ;
    rdfs:label "specialization"@en ;
    rdfs:comment "Area of specialization (digital_forensics, undercover_operations, victim_services, legal_analysis, technical_analysis, general_investigation)."@en ;
    rdfs:domain cacontology-case:CaseAssignment ;
    rdfs:range xsd:string .

cacontology-case:stageDuration a owl:DatatypeProperty ;
    rdfs:label "stage duration"@en ;
    rdfs:comment "Duration of the workflow stage in days."@en ;
    rdfs:domain cacontology-case:CaseWorkflow ;
    rdfs:range xsd:decimal .

cacontology-case:stageEndDate a owl:DatatypeProperty ;
    rdfs:label "stage end date"@en ;
    rdfs:comment "Date when the workflow stage ended."@en ;
    rdfs:domain cacontology-case:CaseWorkflow ;
    rdfs:range xsd:dateTime .

cacontology-case:stageOutcome a owl:DatatypeProperty ;
    rdfs:label "stage outcome"@en ;
    rdfs:comment "Outcome of the workflow stage (completed, pending, escalated, transferred, suspended, terminated)."@en ;
    rdfs:domain cacontology-case:CaseWorkflow ;
    rdfs:range xsd:string .

cacontology-case:stageStartDate a owl:DatatypeProperty ;
    rdfs:label "stage start date"@en ;
    rdfs:comment "Date when the workflow stage began."@en ;
    rdfs:domain cacontology-case:CaseWorkflow ;
    rdfs:range xsd:dateTime .

cacontology-case:supervisedBy a owl:ObjectProperty ;
    rdfs:label "supervised by"@en ;
    rdfs:comment "Links assignment to supervising personnel."@en ;
    rdfs:domain cacontology-case:CaseAssignment ;
    rdfs:range uco-identity:Person .

cacontology-case:trackedBy a owl:ObjectProperty ;
    rdfs:label "tracked by"@en ;
    rdfs:comment "Links case to tracking systems and processes."@en ;
    rdfs:domain cacontology-case:CaseManagement ;
    rdfs:range cacontology-case:CaseTracking .

cacontology-case:trackingNumber a owl:DatatypeProperty ;
    rdfs:label "tracking number"@en ;
    rdfs:comment "Unique tracking number for the case."@en ;
    rdfs:domain cacontology-case:CaseTracking ;
    rdfs:range xsd:string .

cacontology-case:trackingSystem a owl:DatatypeProperty ;
    rdfs:label "tracking system"@en ;
    rdfs:comment "System used for tracking (local_system, state_system, federal_system, ncmec_system, multi_system, custom_system)."@en ;
    rdfs:domain cacontology-case:CaseTracking ;
    rdfs:range xsd:string .

cacontology-case:undergoesReview a owl:ObjectProperty ;
    rdfs:label "undergoes review"@en ;
    rdfs:comment "Links case to review processes."@en ;
    rdfs:domain cacontology-case:CaseManagement ;
    rdfs:range cacontology-case:CaseReview .

cacontology-case:updateFrequency a owl:DatatypeProperty ;
    rdfs:label "update frequency"@en ;
    rdfs:comment "Frequency of updates (real_time, daily, weekly, bi_weekly, monthly, as_needed)."@en ;
    rdfs:domain cacontology-case:CaseTracking ;
    rdfs:range xsd:string .

cacontology-case:workloadPercentage a owl:DatatypeProperty ;
    rdfs:label "workload percentage"@en ;
    rdfs:comment "Percentage of workload allocated to this assignment."@en ;
    rdfs:domain cacontology-case:CaseAssignment ;
    rdfs:range xsd:decimal .

cacontology-custodial:ActiveCustodyPhaseShape a sh:NodeShape ;
    rdfs:label "Active Custody Phase Shape"@en ;
    rdfs:comment "Validates active custody phases."@en ;
    sh:property [ sh:message "Active custody phase must have begin point"@en ;
            sh:minCount 1 ;
            sh:path cacontology-custodial:hasCustodyBeginPoint ] ;
    sh:targetClass cacontology-custodial:ActiveCustodyPhase .

cacontology-custodial:AuthorityAbuse a gufo:SubKind,
        owl:Class ;
    rdfs:label "Authority Abuse"@en ;
    rdfs:comment "Abuse of authority position to exploit or harm children. Modeled as gUFO SubKind with authority relationship violations."@en ;
    rdfs:subClassOf cacontology-custodial:TrustViolation .

cacontology-custodial:AuthorityFigureGUFOShape a sh:NodeShape ;
    rdfs:label "gUFO Authority Figure Shape"@en ;
    rdfs:comment "Validates authority figures as anti-rigid gUFO roles."@en ;
    sh:property [ sh:hasValue gufo:Role ;
            sh:message "Authority figure must be typed as gUFO Role (anti-rigid sortal)"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ] ;
    sh:targetClass cacontology-custodial:AuthorityFigure .

cacontology-custodial:AuthorityPositionShape a sh:NodeShape ;
    rdfs:label "Authority Position Shape"@en ;
    rdfs:comment "Validation shape for authority position instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "educational" "religious" "recreational" "medical" "legal" "social_services" "family" "community" ) ;
            sh:maxCount 1 ;
            sh:message "Authority position must specify position type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-custodial:positionType ],
        [ sh:datatype xsd:string ;
            sh:in ( "low" "moderate" "high" "absolute" "institutional" "legal" ) ;
            sh:maxCount 1 ;
            sh:message "Authority position must specify authority level from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-custodial:authorityLevel ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 50.0 ;
            sh:message "Position duration must be between 0 and 50 years."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-custodial:positionDuration ] ;
    sh:targetClass cacontology-custodial:AuthorityPosition .

cacontology-custodial:AuthorityRoleExclusivityShape a sh:NodeShape ;
    rdfs:label "Authority Role Exclusivity Shape"@en ;
    rdfs:comment "Validates authority role exclusivity constraints."@en ;
    sh:sparql [ sh:message "Person cannot simultaneously hold conflicting authority roles in same custodial context"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/custodial#"^^xsd:anyURI ;
                            sh:prefix "cacontology-custodial" ] ] ;
            sh:select """
            SELECT ?this
            WHERE {
                ?this cacontology-custodial:hasAuthority ?role1 ;
                      cacontology-custodial:hasAuthority ?role2 .
                ?role1 a cacontology-custodial:Guardian .
                ?role2 a cacontology-custodial:Teacher .
                ?custodialRel1 cacontology-custodial:involvesCustodian ?this .
                ?custodialRel2 cacontology-custodial:involvesCustodian ?this .
                ?custodialRel1 cacontology-custodial:involvesChild ?child .
                ?custodialRel2 cacontology-custodial:involvesChild ?child .
                FILTER (?role1 != ?role2)
            }
        """ ] ;
    sh:targetClass uco-identity:Person .

cacontology-custodial:AuthorizationProcessShape a sh:NodeShape ;
    rdfs:label "Authorization Process Shape"@en ;
    rdfs:comment "Validation shape for authorization process instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "employment" "volunteer" "contractor" "temporary" "emergency" "provisional" "full" ) ;
            sh:maxCount 1 ;
            sh:message "Authorization process must specify authorization type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-custodial:authorizationType ],
        [ sh:datatype xsd:string ;
            sh:in ( "pending" "approved" "denied" "suspended" "revoked" "expired" "conditional" ) ;
            sh:maxCount 1 ;
            sh:message "Authorization process must specify status from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-custodial:authorizationStatus ] ;
    sh:targetClass cacontology-custodial:AuthorizationProcess .

cacontology-custodial:Babysitter a gufo:Role,
        owl:Class ;
    rdfs:label "Babysitter"@en ;
    rdfs:comment "Individual temporarily caring for children in parents' absence. Modeled as anti-rigid gUFO Role with temporary scope."@en ;
    rdfs:subClassOf cacontology-custodial:AuthorityFigure .

cacontology-custodial:BackgroundCheckShape a sh:NodeShape ;
    rdfs:label "Background Check Shape"@en ;
    rdfs:comment "Validation shape for background check instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "criminal_history" "employment_verification" "reference_check" "education_verification" "comprehensive" "basic" "enhanced" ) ;
            sh:maxCount 1 ;
            sh:message "Background check must specify check type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-custodial:checkType ],
        [ sh:datatype xsd:string ;
            sh:in ( "passed" "failed" "conditional" "pending" "incomplete" "expired" ) ;
            sh:maxCount 1 ;
            sh:message "Background check must specify result from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-custodial:checkResult ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Background check must specify check date."@en ;
            sh:minCount 1 ;
            sh:path cacontology-custodial:checkDate ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Background check may have an expiration date."@en ;
            sh:minCount 0 ;
            sh:path cacontology-custodial:expirationDate ] ;
    sh:targetClass cacontology-custodial:BackgroundCheck .

cacontology-custodial:BackgroundCheckValidityShape a sh:NodeShape ;
    rdfs:label "Background Check Validity Shape"@en ;
    rdfs:comment "Validates background check temporal consistency."@en ;
    sh:sparql [ sh:message "Check date must be before expiration date when both are specified."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-custodial:checkDate ?checkDate ;
                      cacontology-custodial:expirationDate ?expiration .
                FILTER (?checkDate >= ?expiration)
            }
        """ ] ;
    sh:targetClass cacontology-custodial:BackgroundCheck .

cacontology-custodial:BreachOfCare a gufo:SubKind,
        owl:Class ;
    rdfs:label "Breach of Care"@en ;
    rdfs:comment "Failure to provide appropriate care while in custodial role. Modeled as gUFO SubKind with care obligation failures."@en ;
    rdfs:subClassOf cacontology-custodial:TrustViolation .

cacontology-custodial:CaregiverRelationshipShape a sh:NodeShape ;
    rdfs:label "Caregiver Relationship Shape"@en ;
    rdfs:comment "Validation shape for caregiver relationship instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "full_care" "partial_care" "supervision" "transportation" "educational_support" "medical_care" "temporary_care" "emergency_care" ) ;
            sh:maxCount 1 ;
            sh:message "Caregiver relationship must specify caregiving responsibilities from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-custodial:caregivingResponsibilities ],
        [ sh:datatype xsd:string ;
            sh:in ( "constant" "frequent" "periodic" "minimal" "none" "as_needed" ) ;
            sh:maxCount 1 ;
            sh:message "Caregiver relationship must specify supervision level from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-custodial:supervisionLevel ] ;
    sh:targetClass cacontology-custodial:CaregiverRelationship .

cacontology-custodial:ChildcareProvider a gufo:Role,
        owl:Class ;
    rdfs:label "Childcare Provider"@en ;
    rdfs:comment "Professional childcare or daycare provider. Modeled as anti-rigid gUFO Role with professional care obligations."@en ;
    rdfs:subClassOf cacontology-custodial:AuthorityFigure .

cacontology-custodial:Coach a gufo:Role,
        owl:Class ;
    rdfs:label "Coach"@en ;
    rdfs:comment "Sports or activity coach with authority over young participants. Modeled as anti-rigid gUFO Role with activity-based authority."@en ;
    rdfs:subClassOf cacontology-custodial:AuthorityFigure .

cacontology-custodial:CustodialAbuse a gufo:SubKind,
        owl:Class ;
    rdfs:label "Custodial Abuse"@en ;
    rdfs:comment "Abuse committed by someone in custodial or caregiving role. Modeled as gUFO SubKind of TrustViolation with role-based context."@en ;
    rdfs:subClassOf cacontology-custodial:TrustViolation .

cacontology-custodial:CustodialCrisisSituation a owl:Class ;
    rdfs:label "Custodial Crisis Situation"@en ;
    rdfs:comment "Emergency situation requiring immediate custodial intervention. Modeled as gUFO Situation with crisis characteristics."@en ;
    rdfs:subClassOf gufo:Situation .

cacontology-custodial:CustodialCrossReferenceShape a sh:NodeShape ;
    rdfs:label "Custodial Cross Reference Shape"@en ;
    rdfs:comment "Validates cross-references between custodial relationships and related entities."@en ;
    sh:sparql [ sh:message "Custodial relationship must involve both a custodian and a child."@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/custodial#"^^xsd:anyURI ;
                            sh:prefix "cacontology-custodial" ] ] ;
            sh:select """
            SELECT ?this
            WHERE {
                ?this a cacontology-custodial:CustodialRelationship .
                FILTER NOT EXISTS {
                    ?this cacontology-custodial:involvesCustodian ?custodian ;
                          cacontology-custodial:involvesChild ?child .
                }
            }
        """ ] ;
    sh:targetClass cacontology-custodial:CustodialRelationship .

cacontology-custodial:CustodialFoundationalTypeShape a sh:NodeShape ;
    rdfs:label "Custodial gUFO Foundational Type Consistency Shape"@en ;
    rdfs:comment "Validates proper gUFO foundational typing for custodial entities."@en ;
    sh:sparql [ sh:message "All custodial gUFO entities must have proper foundational typing"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "http://purl.org/nemo/gufo#"^^xsd:anyURI ;
                            sh:prefix "gufo" ],
                        [ sh:namespace "https://cacontology.projectvic.org/custodial#"^^xsd:anyURI ;
                            sh:prefix "cacontology-custodial" ] ] ;
            sh:select """
            PREFIX gufo: <http://purl.org/nemo/gufo#>
            PREFIX cacontology-custodial: <https://cacontology.projectvic.org/custodial#>
            SELECT ?entity
            WHERE {
                {
                    ?entity a cacontology-custodial:CustodialRelationship .
                    FILTER NOT EXISTS { ?entity a gufo:Object . }
                } UNION {
                    ?entity a cacontology-custodial:PositionOfTrust .
                    FILTER NOT EXISTS { ?entity a gufo:Role . }
                } UNION {
                    ?entity a cacontology-custodial:TrustViolation .
                    FILTER NOT EXISTS { ?entity a gufo:Event . }
                } UNION {
                    ?entity a cacontology-custodial:ActiveCustodyPhase .
                    FILTER NOT EXISTS { ?entity a gufo:Phase . }
                }
            }
        """ ] ;
    sh:targetNode cacontology-custodial:CustodialRelationship .

cacontology-custodial:CustodialParticipationShape a sh:NodeShape ;
    rdfs:label "Custodial Participation Shape"@en ;
    rdfs:comment "Validates coherent participation in custodial relationships."@en ;
    sh:sparql [ sh:message "Custodial relationship must have coherent role and event participation"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/custodial#"^^xsd:anyURI ;
                            sh:prefix "cacontology-custodial" ],
                        [ sh:namespace "http://purl.org/nemo/gufo#"^^xsd:anyURI ;
                            sh:prefix "gufo" ] ] ;
            sh:select """
            SELECT ?this
            WHERE {
                ?this cacontology-custodial:involvesCustodian ?custodian .
                ?custodian cacontology-custodial:hasAuthority ?authorityRole .
                FILTER NOT EXISTS {
                    ?authorityRole a gufo:Role .
                }
            }
        """ ] ;
    sh:targetClass cacontology-custodial:CustodialRelationship .

cacontology-custodial:CustodialRelationshipGUFOShape a sh:NodeShape ;
    rdfs:label "gUFO Custodial Relationship Shape"@en ;
    rdfs:comment "Validates custodial relationship instances with gUFO foundational constraints."@en ;
    sh:property [ sh:hasValue gufo:Kind ;
            sh:message "Custodial relationship must be typed as gUFO Kind"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ],
        [ sh:hasValue gufo:Object ;
            sh:message "Custodial relationship must be typed as gUFO Object"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Custodial relationship can have at most one begin point"@en ;
            sh:path cacontology-custodial:hasCustodyBeginPoint ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Custodial relationship can have at most one end point"@en ;
            sh:path cacontology-custodial:hasCustodyEndPoint ],
        [ sh:class gufo:Phase ;
            sh:maxCount 1 ;
            sh:message "Custodial relationship must be in exactly one phase"@en ;
            sh:minCount 1 ;
            sh:path cacontology-custodial:inCustodyPhase ] ;
    sh:sparql [ sh:message "Custody begin point must precede end point"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/custodial#"^^xsd:anyURI ;
                            sh:prefix "cacontology-custodial" ] ] ;
            sh:select """
            PREFIX cacontology-custodial: <https://cacontology.projectvic.org/custodial#>
            SELECT ?this
            WHERE {
                ?this cacontology-custodial:hasCustodyBeginPoint ?begin ;
                      cacontology-custodial:hasCustodyEndPoint ?end .
                FILTER (?begin >= ?end)
            }
        """ ] ;
    sh:targetClass cacontology-custodial:CustodialRelationship .

cacontology-custodial:CustodialRelationshipShape a sh:NodeShape ;
    rdfs:label "Custodial Relationship Shape"@en ;
    rdfs:comment "Validation shape for custodial relationship instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "none" "minimal" "moderate" "high" "complete" "absolute" ) ;
            sh:maxCount 1 ;
            sh:message "Custodial relationship must specify trust level from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-custodial:trustLevel ],
        [ sh:datatype xsd:string ;
            sh:in ( "none" "supervised" "limited_unsupervised" "unsupervised" "unrestricted" "unsupervised_opportunity" ) ;
            sh:maxCount 1 ;
            sh:message "Custodial relationship must specify access level from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-custodial:accessLevel ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 50.0 ;
            sh:message "Relationship duration must be between 0 and 50 years."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-custodial:relationshipDuration ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Custodial relationship may have a start time."@en ;
            sh:minCount 0 ;
            sh:path uco-core:startTime ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Custodial relationship may have an end time."@en ;
            sh:minCount 0 ;
            sh:path uco-core:endTime ],
        [ sh:datatype xsd:string ;
            sh:in ( "parent" "guardian" "babysitter" "teacher" "coach" "mentor" "caregiver" "family_friend" "relative" "foster_parent" "step_parent" "neighbor" ) ;
            sh:maxCount 1 ;
            sh:message "Custodial relationship must specify type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-custodial:relationshipType ] ;
    sh:targetClass cacontology-custodial:CustodialRelationship .

cacontology-custodial:CustodialSituationGUFOShape a sh:NodeShape ;
    rdfs:label "gUFO Custodial Situation Shape"@en ;
    rdfs:comment "Validates custodial situations with gUFO constraints."@en ;
    sh:property [ sh:hasValue gufo:Situation ;
            sh:message "Custodial situation must be typed as gUFO Situation"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ] ;
    sh:targetClass gufo:Situation .

cacontology-custodial:CustodialTemporalConsistencyShape a sh:NodeShape ;
    rdfs:label "Custodial Temporal Consistency Shape"@en ;
    rdfs:comment "Validates temporal consistency across custodial relationships and events."@en ;
    sh:sparql [ sh:message "Trust violations must occur within active custody timeframe"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/custodial#"^^xsd:anyURI ;
                            sh:prefix "cacontology-custodial" ] ] ;
            sh:select """
            SELECT ?this
            WHERE {
                ?this cacontology-custodial:hasCustodyBeginPoint ?custodyBegin ;
                      cacontology-custodial:hasCustodyEndPoint ?custodyEnd .
                ?violation cacontology-custodial:violatesRelationship ?this ;
                          cacontology-custodial:hasViolationBeginPoint ?violationBegin .
                FILTER (?violationBegin < ?custodyBegin || ?violationBegin > ?custodyEnd)
            }
        """ ] ;
    sh:targetClass cacontology-custodial:CustodialRelationship .

cacontology-custodial:CustodyPhaseGUFOShape a sh:NodeShape ;
    rdfs:label "gUFO Custody Phase Shape"@en ;
    rdfs:comment "Validates custody phases as anti-rigid gUFO phases."@en ;
    sh:property [ sh:hasValue gufo:Phase ;
            sh:message "Custody phase must be typed as gUFO Phase (anti-rigid sortal)"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ] ;
    sh:sparql [ sh:message "Custody phases must follow valid transition sequence"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/custodial#"^^xsd:anyURI ;
                            sh:prefix "cacontology-custodial" ] ] ;
            sh:select """
            PREFIX cacontology-custodial: <https://cacontology.projectvic.org/custodial#>
            SELECT ?this
            WHERE {
                ?relationship cacontology-custodial:hasCustodyPhase ?this ;
                              cacontology-custodial:hasCustodyPhase ?nextPhase .
                ?this cacontology-custodial:precedesCustodyPhase ?nextPhase ;
                      cacontology-custodial:hasCustodyEndPoint ?end1 .
                ?nextPhase cacontology-custodial:hasCustodyBeginPoint ?begin2 .
                FILTER (?end1 > ?begin2)
            }
        """ ] ;
    sh:targetClass gufo:Phase .

cacontology-custodial:DataQualityShape a sh:NodeShape ;
    rdfs:label "Data Quality Shape"@en ;
    rdfs:comment "Validates data quality for custodial relationships."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Label should be between 5 and 200 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 5 ;
            sh:path rdfs:label ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 1000 ;
            sh:message "Comment should be between 10 and 1000 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 10 ;
            sh:path rdfs:comment ] ;
    sh:targetClass cacontology-custodial:CustodialRelationship .

cacontology-custodial:EmergencyCustody a gufo:Phase,
        owl:Class ;
    rdfs:label "Emergency Custody"@en ;
    rdfs:comment "Temporary custody arrangement due to emergency circumstances. Modeled as anti-rigid gUFO Phase with crisis response characteristics."@en ;
    rdfs:subClassOf cacontology-custodial:CustodyArrangement .

cacontology-custodial:FamilialRelationship a gufo:SubKind,
        owl:Class ;
    rdfs:label "Familial Relationship"@en ;
    rdfs:comment "Family-based relationship with natural or assumed custodial responsibilities. Modeled as gUFO SubKind with inherent care obligations."@en ;
    rdfs:subClassOf cacontology-custodial:CustodialRelationship .

cacontology-custodial:FamilyFriend a gufo:Role,
        owl:Class ;
    rdfs:label "Family Friend"@en ;
    rdfs:comment "Friend of family with trusted access to children. Modeled as anti-rigid gUFO Role with social trust basis."@en ;
    rdfs:subClassOf cacontology-custodial:AuthorityFigure .

cacontology-custodial:FormalCustody a gufo:SubKind,
        owl:Class ;
    rdfs:label "Formal Custody"@en ;
    rdfs:comment "Legally established custody arrangement with court orders or official documentation. Modeled as gUFO SubKind with legal foundation."@en ;
    rdfs:subClassOf cacontology-custodial:CustodyArrangement .

cacontology-custodial:Guardian a gufo:Role,
        owl:Class ;
    rdfs:label "Guardian"@en ;
    rdfs:comment "Legal or appointed guardian responsible for child's welfare. Modeled as anti-rigid gUFO Role with legal authority."@en ;
    rdfs:subClassOf cacontology-custodial:AuthorityFigure .

cacontology-custodial:InformalCustody a gufo:SubKind,
        owl:Class ;
    rdfs:label "Informal Custody"@en ;
    rdfs:comment "Informal custody arrangement without legal documentation. Modeled as gUFO SubKind with social agreement basis."@en ;
    rdfs:subClassOf cacontology-custodial:CustodyArrangement .

cacontology-custodial:InvolvesChildShape a sh:PropertyShape ;
    sh:class uco-identity:Person ;
    sh:description "Links custodial relationship to child" ;
    sh:maxCount 1 ;
    sh:minCount 1 ;
    sh:name "involves child" ;
    sh:path cacontology-custodial:involvesChild .

cacontology-custodial:InvolvesCustodianShape a sh:PropertyShape ;
    sh:class uco-identity:Person ;
    sh:description "Links custodial relationship to custodian" ;
    sh:maxCount 1 ;
    sh:minCount 1 ;
    sh:name "involves custodian" ;
    sh:path cacontology-custodial:involvesCustodian .

cacontology-custodial:Mentor a gufo:Role,
        owl:Class ;
    rdfs:label "Mentor"@en ;
    rdfs:comment "Adult mentor or role model with trusted relationship with child. Modeled as anti-rigid gUFO Role with developmental basis."@en ;
    rdfs:subClassOf cacontology-custodial:AuthorityFigure .

cacontology-custodial:NeighborRelationshipShape a sh:NodeShape ;
    rdfs:label "Neighbor Relationship Shape"@en ;
    rdfs:comment "Validation shape for neighbor relationship instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "same_building" "same_floor" "adjacent_unit" "same_block" "same_neighborhood" "nearby" ) ;
            sh:maxCount 1 ;
            sh:message "Neighbor relationship must specify residential proximity from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-custodial:residentialProximity ],
        [ sh:datatype xsd:string ;
            sh:in ( "daily" "weekly" "monthly" "occasional" "rare" "regular" "irregular" ) ;
            sh:maxCount 1 ;
            sh:message "Access frequency must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-custodial:accessFrequency ] ;
    sh:targetClass cacontology-custodial:NeighborRelationship .

cacontology-custodial:PositionOfTrustGUFOShape a sh:NodeShape ;
    rdfs:label "gUFO Position of Trust Shape"@en ;
    rdfs:comment "Validates position of trust with gUFO anti-rigid role constraints."@en ;
    sh:property [ sh:hasValue gufo:Role ;
            sh:message "Position of trust must be typed as gUFO Role (anti-rigid sortal)"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Position of trust can have at most one begin point"@en ;
            sh:path cacontology-custodial:hasRoleBeginPoint ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Position of trust can have at most one end point"@en ;
            sh:path cacontology-custodial:hasRoleEndPoint ] ;
    sh:sparql [ sh:message "Role begin point must precede end point"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/custodial#"^^xsd:anyURI ;
                            sh:prefix "cacontology-custodial" ] ] ;
            sh:select """
            PREFIX cacontology-custodial: <https://cacontology.projectvic.org/custodial#>
            SELECT ?this
            WHERE {
                ?this cacontology-custodial:hasRoleBeginPoint ?begin ;
                      cacontology-custodial:hasRoleEndPoint ?end .
                FILTER (?begin >= ?end)
            }
        """ ] ;
    sh:targetClass cacontology-custodial:PositionOfTrust .

cacontology-custodial:PositionOfTrustShape a sh:NodeShape ;
    rdfs:label "Position of Trust Shape"@en ;
    rdfs:comment "Validation shape for position of trust instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "institutional" "professional" "personal" "legal" "community" "religious" "educational" ) ;
            sh:maxCount 1 ;
            sh:message "Position of trust must specify trust basis from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-custodial:trustBasis ],
        [ sh:datatype xsd:string ;
            sh:in ( "limited" "moderate" "broad" "comprehensive" "absolute" ) ;
            sh:maxCount 1 ;
            sh:message "Position of trust must specify trust scope from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-custodial:trustScope ] ;
    sh:targetClass cacontology-custodial:PositionOfTrust .

cacontology-custodial:ProbationaryCustodyPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Probationary Custody Phase"@en ;
    rdfs:comment "Phase when custodial relationship is under evaluation or supervision. Modeled as anti-rigid gUFO Phase."@en ;
    rdfs:subClassOf cacontology-custodial:CustodialRelationship .

cacontology-custodial:ProfessionalCareRelationship a gufo:SubKind,
        owl:Class ;
    rdfs:label "Professional Care Relationship"@en ;
    rdfs:comment "Professional relationship involving child care or supervision duties. Modeled as gUFO SubKind with professional obligations."@en ;
    rdfs:subClassOf cacontology-custodial:CustodialRelationship .

cacontology-custodial:Relative a gufo:Role,
        owl:Class ;
    rdfs:label "Relative"@en ;
    rdfs:comment "Family member in position of trust or authority over child. Modeled as anti-rigid gUFO Role with familial basis."@en ;
    rdfs:subClassOf cacontology-custodial:AuthorityFigure .

cacontology-custodial:RequiresAuthorizationShape a sh:PropertyShape ;
    sh:class cacontology-custodial:AuthorizationProcess ;
    sh:description "Links position to required authorization" ;
    sh:minCount 0 ;
    sh:name "requires authorization" ;
    sh:path cacontology-custodial:requiresAuthorization .

cacontology-custodial:ResidentialProximityAccessShape a sh:NodeShape ;
    rdfs:label "Residential Proximity Access Shape"@en ;
    rdfs:comment "Validation shape for residential proximity access instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "same_floor" "same_building" "adjacent_building" "same_complex" "same_street" "same_block" ) ;
            sh:maxCount 1 ;
            sh:message "Proximity access must specify proximity type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-custodial:proximityType ],
        [ sh:datatype xsd:string ;
            sh:in ( "apartment_building" "condominium" "townhouse" "single_family" "duplex" "mobile_home" "dormitory" ) ;
            sh:maxCount 1 ;
            sh:message "Building type must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-custodial:buildingType ] ;
    sh:targetClass cacontology-custodial:ResidentialProximityAccess .

cacontology-custodial:ResultsInSupervisionFailureShape a sh:PropertyShape ;
    sh:class cacontology-custodial:SupervisionFailure ;
    sh:description "Links abuse to supervision failure" ;
    sh:minCount 0 ;
    sh:name "results in supervision failure" ;
    sh:path cacontology-custodial:resultsInSupervisionFailure .

cacontology-custodial:SubjectToBackgroundCheckShape a sh:PropertyShape ;
    sh:class cacontology-custodial:BackgroundCheck ;
    sh:description "Links person to background check" ;
    sh:minCount 0 ;
    sh:name "subject to background check" ;
    sh:path cacontology-custodial:subjectToBackgroundCheck .

cacontology-custodial:SupervisionBreakdownSituation a owl:Class ;
    rdfs:label "Supervision Breakdown Situation"@en ;
    rdfs:comment "Situation where supervision systems have failed or become inadequate. Modeled as gUFO Situation with system failure characteristics."@en ;
    rdfs:subClassOf gufo:Situation .

cacontology-custodial:SupervisionFailureShape a sh:NodeShape ;
    rdfs:label "Supervision Failure Shape"@en ;
    rdfs:comment "Validation shape for supervision failure instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "inadequate_oversight" "absent_supervision" "negligent_supervision" "failed_monitoring" "policy_violation" "procedural_failure" ) ;
            sh:maxCount 1 ;
            sh:message "Supervision failure must specify failure type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-custodial:failureType ],
        [ sh:datatype xsd:string ;
            sh:in ( "minor" "moderate" "severe" "critical" "catastrophic" ) ;
            sh:maxCount 1 ;
            sh:message "Supervision failure must specify severity from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-custodial:failureSeverity ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 500 ;
            sh:message "Contributing factors should be between 10 and 500 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 10 ;
            sh:path cacontology-custodial:contributingFactors ] ;
    sh:targetClass cacontology-custodial:SupervisionFailure .

cacontology-custodial:SuspendedCustodyPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Suspended Custody Phase"@en ;
    rdfs:comment "Phase when custodial relationship is temporarily suspended but not terminated. Modeled as anti-rigid gUFO Phase."@en ;
    rdfs:subClassOf cacontology-custodial:CustodialRelationship .

cacontology-custodial:Teacher a gufo:Role,
        owl:Class ;
    rdfs:label "Teacher"@en ;
    rdfs:comment "Educational professional with authority over students. Modeled as anti-rigid gUFO Role with institutional authority."@en ;
    rdfs:subClassOf cacontology-custodial:AuthorityFigure .

cacontology-custodial:TemporalValidationShape a sh:NodeShape ;
    rdfs:label "Temporal Validation Shape"@en ;
    rdfs:comment "Validates temporal consistency in custodial relationships."@en ;
    sh:sparql [ sh:message "Start time must be before end time when both are specified."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this uco-core:startTime ?start ;
                      uco-core:endTime ?end .
                FILTER (?start >= ?end)
            }
        """ ] ;
    sh:targetClass cacontology-custodial:CustodialRelationship .

cacontology-custodial:TemporaryCustody a gufo:Phase,
        owl:Class ;
    rdfs:label "Temporary Custody"@en ;
    rdfs:comment "Short-term custody arrangement or supervision of a child. Modeled as anti-rigid gUFO Phase with temporal boundaries."@en ;
    rdfs:subClassOf cacontology-custodial:CustodialRelationship .

cacontology-custodial:TerminatedCustodyPhaseShape a sh:NodeShape ;
    rdfs:label "Terminated Custody Phase Shape"@en ;
    rdfs:comment "Validates terminated custody phases."@en ;
    sh:property [ sh:message "Terminated custody phase must have end point"@en ;
            sh:minCount 1 ;
            sh:path cacontology-custodial:hasCustodyEndPoint ] ;
    sh:targetClass cacontology-custodial:TerminatedCustodyPhase .

cacontology-custodial:TrustBreachSituationShape a sh:NodeShape ;
    rdfs:label "Trust Breach Situation Shape"@en ;
    rdfs:comment "Validates trust breach situations."@en ;
    sh:sparql [ sh:message "Trust breach situation must be created by trust violation event"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/custodial#"^^xsd:anyURI ;
                            sh:prefix "cacontology-custodial" ] ] ;
            sh:select """
            SELECT ?this
            WHERE {
                ?this a cacontology-custodial:TrustBreachSituation .
                FILTER NOT EXISTS {
                    ?violation a cacontology-custodial:TrustViolation ;
                              cacontology-custodial:createsCustodialSituation ?this .
                }
            }
        """ ] ;
    sh:targetClass cacontology-custodial:TrustBreachSituation .

cacontology-custodial:TrustLevelConsistencyShape a sh:NodeShape ;
    rdfs:label "Trust Level Consistency Shape"@en ;
    rdfs:comment "Validates trust level consistency in violations."@en ;
    sh:sparql [ sh:message "Trust level after violation should not be higher than before violation."@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/custodial#"^^xsd:anyURI ;
                            sh:prefix "cacontology-custodial" ] ] ;
            sh:select """
            SELECT ?this
            WHERE {
                ?this cacontology-custodial:trustLevelBefore ?before ;
                      cacontology-custodial:trustLevelAfter ?after .
                FILTER (
                    (?before = "none" && ?after IN ("minimal", "moderate", "high", "complete", "absolute")) ||
                    (?before = "minimal" && ?after IN ("moderate", "high", "complete", "absolute")) ||
                    (?before = "moderate" && ?after IN ("high", "complete", "absolute")) ||
                    (?before = "high" && ?after IN ("complete", "absolute")) ||
                    (?before = "complete" && ?after = "absolute")
                )
            }
        """ ] ;
    sh:targetClass cacontology-custodial:TrustViolation .

cacontology-custodial:TrustViolationGUFOShape a sh:NodeShape ;
    rdfs:label "gUFO Trust Violation Shape"@en ;
    rdfs:comment "Validates trust violations as gUFO events with temporal boundaries."@en ;
    sh:property [ sh:hasValue gufo:Event ;
            sh:message "Trust violation must be typed as gUFO Event"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Trust violation can have at most one begin point"@en ;
            sh:path cacontology-custodial:hasViolationBeginPoint ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Trust violation can have at most one end point"@en ;
            sh:path cacontology-custodial:hasViolationEndPoint ],
        [ sh:class cacontology-custodial:AuthorityFigure ;
            sh:message "Trust violation must be perpetrated by authority figure"@en ;
            sh:minCount 1 ;
            sh:path cacontology-custodial:perpetratedBy ] ;
    sh:sparql [ sh:message "Violation begin point must precede end point"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/custodial#"^^xsd:anyURI ;
                            sh:prefix "cacontology-custodial" ] ] ;
            sh:select """
            PREFIX cacontology-custodial: <https://cacontology.projectvic.org/custodial#>
            SELECT ?this
            WHERE {
                ?this cacontology-custodial:hasViolationBeginPoint ?begin ;
                      cacontology-custodial:hasViolationEndPoint ?end .
                FILTER (?begin >= ?end)
            }
        """ ] ;
    sh:targetClass cacontology-custodial:TrustViolation .

cacontology-custodial:TrustViolationShape a sh:NodeShape ;
    rdfs:label "Trust Violation Shape"@en ;
    rdfs:comment "Validation shape for trust violation instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "minor" "moderate" "severe" "extreme" "catastrophic" ) ;
            sh:maxCount 1 ;
            sh:message "Trust violation must specify severity from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-custodial:violationSeverity ],
        [ sh:datatype xsd:string ;
            sh:in ( "none" "minimal" "moderate" "high" "complete" "absolute" ) ;
            sh:maxCount 1 ;
            sh:message "Trust level before violation must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-custodial:trustLevelBefore ],
        [ sh:datatype xsd:string ;
            sh:in ( "none" "minimal" "moderate" "high" "complete" "absolute" ) ;
            sh:maxCount 1 ;
            sh:message "Trust level after violation must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-custodial:trustLevelAfter ],
        [ sh:datatype xsd:string ;
            sh:in ( "exploitation" "abuse" "neglect" "abandonment" "betrayal" "manipulation" "coercion" ) ;
            sh:maxCount 1 ;
            sh:message "Trust violation must specify violation type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-custodial:violationType ] ;
    sh:targetClass cacontology-custodial:TrustViolation .

cacontology-custodial:ViolatesPositionShape a sh:PropertyShape ;
    sh:class cacontology-custodial:PositionOfTrust ;
    sh:description "Links abuse to position of trust violated" ;
    sh:minCount 0 ;
    sh:name "violates position" ;
    sh:path cacontology-custodial:violatesPosition .

cacontology-custodial:VisitationArrangement a gufo:SubKind,
        owl:Class ;
    rdfs:label "Visitation Arrangement"@en ;
    rdfs:comment "Scheduled visitation or contact arrangement with child. Modeled as gUFO SubKind with temporal scheduling patterns."@en ;
    rdfs:subClassOf cacontology-custodial:CustodyArrangement .

cacontology-custodial:VulnerabilityExposureSituation a owl:Class ;
    rdfs:label "Vulnerability Exposure Situation"@en ;
    rdfs:comment "Situation where child vulnerability factors create elevated risk. Modeled as gUFO Situation with protection need characteristics."@en ;
    rdfs:subClassOf gufo:Situation .

cacontology-custodial:aggravatingFactor a owl:ObjectProperty ;
    rdfs:label "aggravating factor"@en ;
    rdfs:comment "Links trust violation to criminal offense as aggravating factor. Enhanced with gUFO causal patterns."@en ;
    rdfs:domain cacontology-custodial:TrustViolation ;
    rdfs:range uco-action:Crime .

cacontology-custodial:authorityScope a owl:DatatypeProperty ;
    rdfs:label "authority scope"@en ;
    rdfs:comment "Scope of authority (physical_care, educational, medical, financial, legal)."@en ;
    rdfs:domain cacontology-custodial:PositionOfTrust ;
    rdfs:range xsd:string .

cacontology-custodial:authorizationLevel a owl:DatatypeProperty ;
    rdfs:label "authorization level"@en ;
    rdfs:comment "Level of authorization granted (basic, intermediate, full, emergency)."@en ;
    rdfs:domain cacontology-custodial:CustodialAuthorization ;
    rdfs:range xsd:string .

cacontology-custodial:breachDuration a owl:DatatypeProperty ;
    rdfs:label "breach duration"@en ;
    rdfs:comment "Duration of trust violation in days."@en ;
    rdfs:domain cacontology-custodial:TrustViolation ;
    rdfs:range xsd:integer .

cacontology-custodial:checkScope a owl:DatatypeProperty ;
    rdfs:label "check scope"@en ;
    rdfs:comment "Scope of background check (criminal, employment, reference, comprehensive)."@en ;
    rdfs:domain cacontology-custodial:BackgroundCheck ;
    rdfs:range xsd:string .

cacontology-custodial:checkStatus a owl:DatatypeProperty ;
    rdfs:label "check status"@en ;
    rdfs:comment "Status of background check (passed, failed, pending, waived)."@en ;
    rdfs:domain cacontology-custodial:BackgroundCheck ;
    rdfs:range xsd:string .

cacontology-custodial:consentScope a owl:DatatypeProperty ;
    rdfs:label "consent scope"@en ;
    rdfs:comment "Scope of activities covered by consent (general_care, specific_activities, emergency_care)."@en ;
    rdfs:domain cacontology-custodial:ParentalConsent ;
    rdfs:range xsd:string .

cacontology-custodial:consentStatus a owl:DatatypeProperty ;
    rdfs:label "consent status"@en ;
    rdfs:comment "Status of parental consent (given, withdrawn, conditional, disputed)."@en ;
    rdfs:domain cacontology-custodial:ParentalConsent ;
    rdfs:range xsd:string .

cacontology-custodial:createsCustodialSituation a owl:ObjectProperty ;
    rdfs:label "creates custodial situation"@en ;
    rdfs:comment "Links custodial event to situation it creates or modifies. Enhanced with gUFO causation patterns."@en ;
    rdfs:domain cacontology-custodial:TrustViolation ;
    rdfs:range gufo:Situation ;
    rdfs:subPropertyOf cacontology-gufo:createsSituation .

cacontology-custodial:custodyDuration a owl:DatatypeProperty ;
    rdfs:label "custody duration"@en ;
    rdfs:comment "Duration of custody arrangement in days."@en ;
    rdfs:domain cacontology-custodial:CustodyArrangement ;
    rdfs:range xsd:integer .

cacontology-custodial:custodySchedule a owl:DatatypeProperty ;
    rdfs:label "custody schedule"@en ;
    rdfs:comment "Schedule or pattern of custody (weekdays, weekends, alternating, specific_dates)."@en ;
    rdfs:domain cacontology-custodial:CustodyArrangement ;
    rdfs:range xsd:string .

cacontology-custodial:custodyType a owl:DatatypeProperty ;
    rdfs:label "custody type"@en ;
    rdfs:comment "Type of custody (legal, physical, joint, sole, temporary)."@en ;
    rdfs:domain cacontology-custodial:CustodyArrangement ;
    rdfs:range xsd:string .

cacontology-custodial:hasAuthority a owl:ObjectProperty ;
    rdfs:label "has authority"@en ;
    rdfs:comment "Links authority figure to their authority position. Enhanced with gUFO role patterns."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range cacontology-custodial:AuthorityFigure .

cacontology-custodial:hasCustodyPhase a owl:ObjectProperty ;
    rdfs:label "has custody phase"@en ;
    rdfs:comment "Links custodial relationship to all phases it has experienced. Enhanced with gUFO phase history."@en ;
    rdfs:domain cacontology-custodial:CustodialRelationship ;
    rdfs:range gufo:Phase ;
    rdfs:subPropertyOf cacontology-gufo:hasPhase .

cacontology-custodial:holdsPositionOf a owl:ObjectProperty ;
    rdfs:label "holds position of"@en ;
    rdfs:comment "Links individual to position of trust or authority they hold. Enhanced with gUFO role instantiation patterns."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range cacontology-custodial:PositionOfTrust .

cacontology-custodial:involvesParent a owl:ObjectProperty ;
    rdfs:label "involves parent"@en ;
    rdfs:comment "Links custodial arrangement to the parent or legal guardian. Enhanced with gUFO participation patterns."@en ;
    rdfs:domain cacontology-custodial:CustodyArrangement ;
    rdfs:range uco-identity:Person ;
    rdfs:subPropertyOf gufo:participatedIn .

cacontology-custodial:occursInCustodialSituation a owl:ObjectProperty ;
    rdfs:label "occurs in custodial situation"@en ;
    rdfs:comment "Links custodial event to situation in which it occurs. Enhanced with gUFO situation modeling."@en ;
    rdfs:domain cacontology-custodial:TrustViolation ;
    rdfs:range gufo:Situation ;
    rdfs:subPropertyOf cacontology-gufo:occursInSituation .

cacontology-custodial:relationshipFrequency a owl:DatatypeProperty ;
    rdfs:label "relationship frequency"@en ;
    rdfs:comment "Frequency of contact or care (daily, weekly, monthly, occasional)."@en ;
    rdfs:domain cacontology-custodial:CustodialRelationship ;
    rdfs:range xsd:string .

cacontology-custodial:relationshipIntimacy a owl:DatatypeProperty ;
    rdfs:label "relationship intimacy"@en ;
    rdfs:comment "Level of closeness in relationship (distant, moderate, close, very_close)."@en ;
    rdfs:domain cacontology-custodial:CustodialRelationship ;
    rdfs:range xsd:string .

cacontology-custodial:relevantToInvestigation a owl:ObjectProperty ;
    rdfs:label "relevant to investigation"@en ;
    rdfs:comment "Links custodial relationship to ICAC investigation. Enhanced with gUFO relevance patterns."@en ;
    rdfs:domain cacontology-custodial:CustodialRelationship ;
    rdfs:range cacontology:Investigation .

cacontology-custodial:subjectTo a owl:ObjectProperty ;
    rdfs:label "subject to"@en ;
    rdfs:comment "Links child to authority figure who has control over them. Enhanced with gUFO role relationships."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range cacontology-custodial:AuthorityFigure .

cacontology-custodial:violatesRelationship a owl:ObjectProperty ;
    rdfs:label "violates relationship"@en ;
    rdfs:comment "Links trust violation to the custodial relationship that was violated. Enhanced with gUFO event impact patterns."@en ;
    rdfs:domain cacontology-custodial:TrustViolation ;
    rdfs:range cacontology-custodial:CustodialRelationship .

cacontology-custodial:violationPattern a owl:DatatypeProperty ;
    rdfs:label "violation pattern"@en ;
    rdfs:comment "Pattern of violation (isolated, repeated, escalating, systematic)."@en ;
    rdfs:domain cacontology-custodial:TrustViolation ;
    rdfs:range xsd:string .

cacontology-custodial:vulnerabilityFactor a owl:DatatypeProperty ;
    rdfs:label "vulnerability factor"@en ;
    rdfs:comment "Factors that increase child's vulnerability (isolation, dependency, trust, fear)."@en ;
    rdfs:domain cacontology-custodial:CustodialRelationship ;
    rdfs:range xsd:string .

cacontology-detection:AutomatedDetectionActionGUFOShape a sh:NodeShape ;
    rdfs:label "gUFO Automated Detection Action Shape"@en ;
    rdfs:comment "Validates automated detection action instances with gUFO Event constraints."@en ;
    sh:property [ sh:hasValue gufo:Event ;
            sh:message "Automated detection action must be typed as gUFO Event"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Automated detection action must specify start time"@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ],
        [ sh:class cacontology-detection:MachineLearningDetectionTool ;
            sh:maxCount 1 ;
            sh:message "Automated detection action must specify the ML tool used"@en ;
            sh:minCount 1 ;
            sh:path uco-action:instrument ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Confidence score must be between 0.0 and 1.0"@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-detection:confidenceScore ] ;
    sh:targetClass cacontology-detection:AutomatedDetectionAction .

cacontology-detection:COPINEClassificationGUFOShape a sh:NodeShape ;
    rdfs:label "COPINE Classification gUFO Shape"@en ;
    rdfs:comment "Validates COPINE classification concept instances with gUFO enhancements."@en ;
    sh:property [ sh:maxCount 1 ;
            sh:maxLength 100 ;
            sh:message "COPINE classification must have a preferred label (5-100 characters)"@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path skos:prefLabel ],
        [ sh:maxCount 1 ;
            sh:maxLength 500 ;
            sh:message "COPINE classification must have a definition (10-500 characters)"@en ;
            sh:minCount 1 ;
            sh:minLength 10 ;
            sh:path skos:definition ],
        [ sh:hasValue cacontology-detection:COPINEClassificationScheme ;
            sh:maxCount 1 ;
            sh:message "COPINE classification must be in the COPINE Classification Scheme"@en ;
            sh:minCount 1 ;
            sh:path skos:inScheme ] ;
    sh:targetNode cacontology-detection:copine-1,
        cacontology-detection:copine-10,
        cacontology-detection:copine-4,
        cacontology-detection:copine-7,
        cacontology-detection:copine-8 .

cacontology-detection:ClassificationActionResultCrossReferenceShape a sh:NodeShape ;
    rdfs:label "Classification Action Result Cross Reference Shape"@en ;
    rdfs:comment "Validates that classification actions produce classification results."@en ;
    sh:sparql [ sh:message "Manual classification action should produce classification results"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/detection#"^^xsd:anyURI ;
                            sh:prefix "cacontology-detection" ] ] ;
            sh:select """
            SELECT ?this
            WHERE {
                ?this a cacontology-detection:ManualClassificationAction .
                FILTER NOT EXISTS {
                    ?this uco-action:result ?result .
                    ?result a cacontology-detection:ClassificationResult .
                }
            }
        """ ] ;
    sh:targetClass cacontology-detection:ManualClassificationAction .

cacontology-detection:ClassificationResultObjectShape a sh:NodeShape ;
    rdfs:label "Classification Result Object Shape"@en ;
    rdfs:comment "Validates classification result instances with gUFO Object constraints."@en ;
    sh:property [ sh:hasValue gufo:Object ;
            sh:message "Classification result must be typed as gUFO Object"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Classification result must specify creation time"@en ;
            sh:minCount 1 ;
            sh:path uco-core:createdTime ],
        [ sh:datatype xsd:integer ;
            sh:maxCount 1 ;
            sh:maxInclusive 25 ;
            sh:message "Age estimate must be between 0 and 25 years when specified"@en ;
            sh:minCount 0 ;
            sh:minInclusive 0 ;
            sh:path cacontology-detection:ageEstimate ],
        [ sh:datatype xsd:integer ;
            sh:maxCount 1 ;
            sh:maxInclusive 5 ;
            sh:message "Tanner stage must be between 1 and 5 when specified"@en ;
            sh:minCount 0 ;
            sh:minInclusive 1 ;
            sh:path cacontology-detection:tannerStage ] ;
    sh:targetClass cacontology-detection:ClassificationResult .

cacontology-detection:ClassificationSchemeGUFOShape a sh:NodeShape ;
    rdfs:label "gUFO Classification Scheme Shape"@en ;
    rdfs:comment "Validates classification schemes as gUFO Objects."@en ;
    sh:property [ sh:hasValue gufo:Object ;
            sh:message "Classification scheme must be typed as gUFO Object"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ] ;
    sh:targetClass cacontology-detection:COPINEClassificationScheme,
        cacontology-detection:SARClassificationScheme,
        cacontology-detection:TannerScaleScheme .

cacontology-detection:ConfidenceScoreValidationShape a sh:NodeShape ;
    rdfs:label "Confidence Score Validation Shape"@en ;
    rdfs:comment "Validates confidence score consistency and reasonableness."@en ;
    sh:sparql [ sh:message "High confidence scores should correlate with positive detection decisions"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/detection#"^^xsd:anyURI ;
                            sh:prefix "cacontology-detection" ] ] ;
            sh:select """
            PREFIX cacontology-detection: <https://cacontology.projectvic.org/detection#>
            SELECT ?this
            WHERE {
                ?this cacontology-detection:confidenceScore ?score ;
                      cacontology-detection:reviewDecision "false_positive" .
                FILTER (?score > 0.8)
            }
        """ ] ;
    sh:targetClass cacontology-detection:AutomatedDetectionAction,
        cacontology-detection:DetectionResult .

cacontology-detection:ContentHashingActionGUFOShape a sh:NodeShape ;
    rdfs:label "gUFO Content Hashing Action Shape"@en ;
    rdfs:comment "Validates content hashing action instances with gUFO Event constraints."@en ;
    sh:property [ sh:hasValue gufo:Event ;
            sh:message "Content hashing action must be typed as gUFO Event"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Content hashing action must specify start time"@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ],
        [ sh:class cacontology-detection:ContentHashingTool ;
            sh:maxCount 1 ;
            sh:message "Content hashing action must specify the hashing tool used"@en ;
            sh:minCount 1 ;
            sh:path uco-action:instrument ] ;
    sh:targetClass cacontology-detection:ContentHashingAction .

cacontology-detection:ContentHashingToolGUFOShape a sh:NodeShape ;
    rdfs:label "gUFO Content Hashing Tool Shape"@en ;
    rdfs:comment "Validates content hashing tool instances with gUFO foundational constraints."@en ;
    sh:property [ sh:hasValue gufo:Object ;
            sh:message "Content hashing tool must be typed as gUFO Object"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:message "Tool version must follow semantic versioning pattern (e.g., '1.0', '2.1.3')"@en ;
            sh:minCount 0 ;
            sh:path uco-tool:version ;
            sh:pattern "^[0-9]+\\.[0-9]+(\\.[0-9]+)?$" ] ;
    sh:targetClass cacontology-detection:ContentHashingTool .

cacontology-detection:DatabaseMatchInputCrossReferenceShape a sh:NodeShape ;
    rdfs:label "Database Match Input Cross Reference Shape"@en ;
    rdfs:comment "Validates that database match actions have hash inputs."@en ;
    sh:sparql [ sh:message "Database match action should have hash inputs for comparison"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/detection#"^^xsd:anyURI ;
                            sh:prefix "cacontology-detection" ] ] ;
            sh:select """
            PREFIX cacontology-detection: <https://cacontology.projectvic.org/detection#>
            PREFIX uco-action: <https://ontology.unifiedcyberontology.org/uco/action/>
            PREFIX uco-types: <https://ontology.unifiedcyberontology.org/uco/types/>
            SELECT ?this
            WHERE {
                ?this a cacontology-detection:DatabaseMatchAction .
                FILTER NOT EXISTS {
                    ?this uco-action:object ?hash .
                    ?hash a ?hashType .
                    FILTER (?hashType IN (
                        cacontology-detection:PhotoDNAHash,
                        cacontology-detection:PerceptualHash,
                        uco-types:Hash
                    ))
                }
            }
        """ ] ;
    sh:targetClass cacontology-detection:DatabaseMatchAction .

cacontology-detection:DetectionActionGUFOShape a sh:NodeShape ;
    rdfs:label "gUFO Detection Action Shape"@en ;
    rdfs:comment "Validates detection actions as gUFO Events with temporal boundaries."@en ;
    sh:property [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Detection action can have at most one end point"@en ;
            sh:path cacontology-detection:hasDetectionEndPoint ],
        [ sh:hasValue gufo:Event ;
            sh:message "Detection action must be typed as gUFO Event"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Detection action can have at most one begin point"@en ;
            sh:path cacontology-detection:hasDetectionBeginPoint ] ;
    sh:sparql [ sh:message "Detection begin point must precede end point"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/detection#"^^xsd:anyURI ;
                            sh:prefix "cacontology-detection" ] ] ;
            sh:select """
            PREFIX cacontology-detection: <https://cacontology.projectvic.org/detection#>
            SELECT ?this
            WHERE {
                ?this cacontology-detection:hasDetectionBeginPoint ?begin ;
                      cacontology-detection:hasDetectionEndPoint ?end .
                FILTER (?begin >= ?end)
            }
        """ ] ;
    sh:targetClass cacontology-detection:AutomatedDetectionAction,
        cacontology-detection:ContentHashingAction,
        cacontology-detection:DatabaseMatchAction,
        cacontology-detection:FalsePositiveAnalysisAction,
        cacontology-detection:ManualClassificationAction,
        cacontology-detection:RiskStratificationAction .

cacontology-detection:DetectionActionResultCrossReferenceShape a sh:NodeShape ;
    rdfs:label "Detection Action Result Cross Reference Shape"@en ;
    rdfs:comment "Validates that detection actions produce appropriate results."@en ;
    sh:sparql [ sh:message "Automated detection action should produce detection results"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/detection#"^^xsd:anyURI ;
                            sh:prefix "cacontology-detection" ] ] ;
            sh:select """
            PREFIX cacontology-detection: <https://cacontology.projectvic.org/detection#>
            PREFIX uco-action: <https://ontology.unifiedcyberontology.org/uco/action/>
            SELECT ?this
            WHERE {
                ?this a cacontology-detection:AutomatedDetectionAction .
                FILTER NOT EXISTS {
                    ?this uco-action:result ?result .
                    ?result a cacontology-detection:DetectionResult .
                }
            }
        """ ] ;
    sh:targetClass cacontology-detection:AutomatedDetectionAction .

cacontology-detection:DetectionDataQualityShape a sh:NodeShape ;
    rdfs:label "Detection Data Quality Shape"@en ;
    rdfs:comment "Validates data quality for detection tool entities."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 100 ;
            sh:message "Tool name must be between 2 and 100 characters"@en ;
            sh:minCount 1 ;
            sh:minLength 2 ;
            sh:path uco-core:name ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 1000 ;
            sh:message "Tool description should be between 10 and 1000 characters when provided"@en ;
            sh:minCount 0 ;
            sh:minLength 10 ;
            sh:path uco-core:description ] ;
    sh:targetClass cacontology-detection:ContentHashingTool,
        cacontology-detection:DatabaseMatchingTool,
        cacontology-detection:MachineLearningDetectionTool,
        cacontology-detection:ManualReviewTool .

cacontology-detection:DetectionFoundationalTypeShape a sh:NodeShape ;
    rdfs:label "Detection gUFO Foundational Type Consistency Shape"@en ;
    rdfs:comment "Validates proper gUFO foundational typing for detection entities."@en ;
    sh:sparql [ sh:message "All detection gUFO entities must have proper foundational typing"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "http://purl.org/nemo/gufo#"^^xsd:anyURI ;
                            sh:prefix "gufo" ],
                        [ sh:namespace "https://cacontology.projectvic.org/detection#"^^xsd:anyURI ;
                            sh:prefix "cacontology-detection" ] ] ;
            sh:select """
            PREFIX gufo: <http://purl.org/nemo/gufo#>
            PREFIX cacontology-detection: <https://cacontology.projectvic.org/detection#>
            SELECT ?entity
            WHERE {
                {
                    ?entity a cacontology-detection:ContentHashingTool .
                    FILTER NOT EXISTS { ?entity a gufo:Object . }
                } UNION {
                    ?entity a cacontology-detection:AutomatedDetectionAction .
                    FILTER NOT EXISTS { ?entity a gufo:Event . }
                } UNION {
                    ?entity a cacontology-detection:ContentAnalystRole .
                    FILTER NOT EXISTS { ?entity a gufo:Role . }
                } UNION {
                    ?entity a cacontology-detection:InitialDetectionPhase .
                    FILTER NOT EXISTS { ?entity a gufo:Phase . }
                } UNION {
                    ?entity a cacontology-detection:DetectionResult .
                    FILTER NOT EXISTS { ?entity a gufo:Object . }
                }
            }
        """ ] ;
    sh:targetNode cacontology-detection:ContentHashingTool .

cacontology-detection:DetectionPhaseGUFOShape a sh:NodeShape ;
    rdfs:label "gUFO Detection Phase Shape"@en ;
    rdfs:comment "Validates detection phases as anti-rigid gUFO phases."@en ;
    sh:property [ sh:hasValue gufo:Phase ;
            sh:message "Detection phase must be typed as gUFO Phase (anti-rigid sortal)"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Detection phase can have at most one begin point"@en ;
            sh:path cacontology-detection:hasPhaseBeginPoint ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Detection phase can have at most one end point"@en ;
            sh:path cacontology-detection:hasPhaseEndPoint ] ;
    sh:sparql [ sh:message "Phase begin point must precede end point"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/detection#"^^xsd:anyURI ;
                            sh:prefix "cacontology-detection" ] ] ;
            sh:select """
            SELECT ?this
            WHERE {
                ?this cacontology-detection:hasPhaseBeginPoint ?begin ;
                      cacontology-detection:hasPhaseEndPoint ?end .
                FILTER (?begin >= ?end)
            }
        """ ] ;
    sh:targetClass cacontology-detection:HashComparisonPhase,
        cacontology-detection:InitialDetectionPhase,
        cacontology-detection:ManualReviewPhase,
        cacontology-detection:ReportingPhase,
        cacontology-detection:ValidationPhase .

cacontology-detection:DetectionPhaseSequenceShape a sh:NodeShape ;
    rdfs:label "Detection Phase Sequence Shape"@en ;
    rdfs:comment "Validates proper sequencing of detection phases."@en ;
    sh:sparql [ sh:message "Detection phases must follow logical workflow sequence"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/detection#"^^xsd:anyURI ;
                            sh:prefix "cacontology-detection" ] ] ;
            sh:select """
            PREFIX cacontology-detection: <https://cacontology.projectvic.org/detection#>
            SELECT ?this
            WHERE {
                ?this a cacontology-detection:ManualReviewPhase ;
                      cacontology-detection:hasPhaseBeginPoint ?manualStart .
                ?initialPhase a cacontology-detection:InitialDetectionPhase ;
                             cacontology-detection:hasPhaseEndPoint ?initialEnd .
                FILTER (?manualStart < ?initialEnd)
            }
        """ ] ;
    sh:targetClass gufo:Phase .

cacontology-detection:DetectionResultGUFOShape a sh:NodeShape ;
    rdfs:label "gUFO Detection Result Shape"@en ;
    rdfs:comment "Validates detection results as gUFO Objects."@en ;
    sh:property [ sh:hasValue gufo:Object ;
            sh:message "Detection result must be typed as gUFO Object"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ] ;
    sh:targetClass cacontology-detection:ClassificationResult,
        cacontology-detection:DetectionResult .

cacontology-detection:DetectionResultObjectShape a sh:NodeShape ;
    rdfs:label "Detection Result Object Shape"@en ;
    rdfs:comment "Validates detection result instances with gUFO Object constraints."@en ;
    sh:property [ sh:hasValue gufo:Object ;
            sh:message "Detection result must be typed as gUFO Object"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Detection result must have a confidence score between 0.0 and 1.0"@en ;
            sh:minCount 1 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-detection:confidenceScore ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Detection result must specify creation time"@en ;
            sh:minCount 1 ;
            sh:path uco-core:createdTime ] ;
    sh:targetClass cacontology-detection:DetectionResult .

cacontology-detection:DetectionRoleGUFOShape a sh:NodeShape ;
    rdfs:label "gUFO Detection Role Shape"@en ;
    rdfs:comment "Validates detection roles as anti-rigid gUFO roles."@en ;
    sh:property [ sh:hasValue gufo:Role ;
            sh:message "Detection role must be typed as gUFO Role (anti-rigid sortal)"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Detection role can have at most one begin point"@en ;
            sh:path cacontology-detection:hasRoleBeginPoint ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Detection role can have at most one end point"@en ;
            sh:path cacontology-detection:hasRoleEndPoint ] ;
    sh:sparql [ sh:message "Role begin point must precede end point"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/detection#"^^xsd:anyURI ;
                            sh:prefix "cacontology-detection" ] ] ;
            sh:select """
            PREFIX cacontology-detection: <https://cacontology.projectvic.org/detection#>
            SELECT ?this
            WHERE {
                ?this cacontology-detection:hasRoleBeginPoint ?begin ;
                      cacontology-detection:hasRoleEndPoint ?end .
                FILTER (?begin >= ?end)
            }
        """ ] ;
    sh:targetClass cacontology-detection:ContentAnalystRole,
        cacontology-detection:HashAnalystRole,
        cacontology-detection:MachineLearningSpecialistRole,
        cacontology-detection:QualityAssuranceAnalystRole .

cacontology-detection:DetectionRoleParticipationShape a sh:NodeShape ;
    rdfs:label "Detection Role Participation Shape"@en ;
    rdfs:comment "Validates detection role participation constraints."@en ;
    sh:sparql [ sh:message "Person in detection role must participate in appropriate detection actions"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/detection#"^^xsd:anyURI ;
                            sh:prefix "cacontology-detection" ],
                        [ sh:namespace "http://purl.org/nemo/gufo#"^^xsd:anyURI ;
                            sh:prefix "gufo" ] ] ;
            sh:select """
            PREFIX cacontology-detection: <https://cacontology.projectvic.org/detection#>
            PREFIX gufo: <http://purl.org/nemo/gufo#>
            PREFIX uco-action: <https://ontology.unifiedcyberontology.org/uco/action/>
            SELECT ?this
            WHERE {
                ?this gufo:playsRole ?role .
                ?role a cacontology-detection:ContentAnalystRole .
                FILTER NOT EXISTS {
                    ?action a cacontology-detection:ManualClassificationAction ;
                           uco-action:performer ?this .
                }
            }
        """ ] ;
    sh:targetClass uco-identity:Person .

cacontology-detection:DetectionSituationGUFOShape a sh:NodeShape ;
    rdfs:label "gUFO Detection Situation Shape"@en ;
    rdfs:comment "Validates detection situations with gUFO constraints."@en ;
    sh:property [ sh:hasValue gufo:Situation ;
            sh:message "Detection situation must be typed as gUFO Situation"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ] ;
    sh:targetClass cacontology-detection:CrossPlatformDetectionSituation,
        cacontology-detection:FalsePositiveManagementSituation,
        cacontology-detection:MassContentAnalysisSituation .

cacontology-detection:DetectionTemporalConsistencyShape a sh:NodeShape ;
    rdfs:label "Detection Temporal Consistency Shape"@en ;
    rdfs:comment "Validates temporal consistency across detection events and phases."@en ;
    sh:sparql [ sh:message "Detection actions must occur within active detection phase timeframe"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/detection#"^^xsd:anyURI ;
                            sh:prefix "cacontology-detection" ],
                        [ sh:namespace "http://purl.org/nemo/gufo#"^^xsd:anyURI ;
                            sh:prefix "gufo" ] ] ;
            sh:select """
            PREFIX cacontology-detection: <https://cacontology.projectvic.org/detection#>
            PREFIX gufo: <http://purl.org/nemo/gufo#>
            SELECT ?this
            WHERE {
                ?this cacontology-detection:hasDetectionBeginPoint ?detectionBegin .
                ?phase a cacontology-detection:InitialDetectionPhase ;
                       cacontology-detection:hasPhaseBeginPoint ?phaseBegin ;
                       cacontology-detection:hasPhaseEndPoint ?phaseEnd .
                ?this gufo:occursInPhase ?phase .
                FILTER (?detectionBegin < ?phaseBegin || ?detectionBegin > ?phaseEnd)
            }
        """ ] ;
    sh:targetClass cacontology-detection:AutomatedDetectionAction .

cacontology-detection:DetectionToolGUFOShape a sh:NodeShape ;
    rdfs:label "gUFO Detection Tool Shape"@en ;
    rdfs:comment "Validates detection tools as gUFO Objects with foundational constraints."@en ;
    sh:property [ sh:hasValue gufo:Object ;
            sh:message "Detection tool must be typed as gUFO Object"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 100 ;
            sh:message "Detection tool must have a name (2-100 characters)"@en ;
            sh:minCount 1 ;
            sh:minLength 2 ;
            sh:path uco-core:name ] ;
    sh:targetClass cacontology-detection:ContentHashingTool,
        cacontology-detection:DatabaseMatchingTool,
        cacontology-detection:MachineLearningDetectionTool,
        cacontology-detection:ManualReviewTool .

cacontology-detection:DetectionWorkflowTemporalShape a sh:NodeShape ;
    rdfs:label "Detection Workflow Temporal Shape"@en ;
    rdfs:comment "Validates temporal workflow progression in detection processes."@en ;
    sh:sparql [ sh:message "Manual classification should follow automated detection"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/detection#"^^xsd:anyURI ;
                            sh:prefix "cacontology-detection" ] ] ;
            sh:select """
            PREFIX cacontology-detection: <https://cacontology.projectvic.org/detection#>
            PREFIX uco-core: <https://ontology.unifiedcyberontology.org/uco/core/>
            PREFIX uco-action: <https://ontology.unifiedcyberontology.org/uco/action/>
            SELECT ?this
            WHERE {
                ?this a cacontology-detection:ManualClassificationAction ;
                      uco-core:startTime ?manualTime .
                ?autoDetection a cacontology-detection:AutomatedDetectionAction ;
                               uco-core:startTime ?autoTime ;
                               uco-action:object ?content .
                ?this uco-action:object ?content .
                FILTER (?manualTime < ?autoTime)
            }
        """ ] ;
    sh:targetClass cacontology-detection:ManualClassificationAction .

cacontology-detection:HashArtifactGUFOShape a sh:NodeShape ;
    rdfs:label "gUFO Hash Artifact Shape"@en ;
    rdfs:comment "Validates hash artifacts as gUFO Objects."@en ;
    sh:property [ sh:hasValue gufo:Object ;
            sh:message "Hash artifact must be typed as gUFO Object"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ] ;
    sh:targetClass cacontology-detection:PerceptualHash,
        cacontology-detection:PhotoDNAHash .

cacontology-detection:HashFormatValidationShape a sh:NodeShape ;
    rdfs:label "Hash Format Validation Shape"@en ;
    rdfs:comment "Validates hash format and consistency."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Hash creation time should be specified when available"@en ;
            sh:minCount 0 ;
            sh:path uco-core:createdTime ] ;
    sh:targetClass cacontology-detection:PerceptualHash,
        cacontology-detection:PhotoDNAHash .

cacontology-detection:HashingActionResultCrossReferenceShape a sh:NodeShape ;
    rdfs:label "Hashing Action Result Cross Reference Shape"@en ;
    rdfs:comment "Validates that hashing actions produce hash artifacts."@en ;
    sh:sparql [ sh:message "Content hashing action should produce hash results"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/detection#"^^xsd:anyURI ;
                            sh:prefix "cacontology-detection" ] ] ;
            sh:select """
            PREFIX cacontology-detection: <https://cacontology.projectvic.org/detection#>
            PREFIX uco-action: <https://ontology.unifiedcyberontology.org/uco/action/>
            PREFIX uco-types: <https://ontology.unifiedcyberontology.org/uco/types/>
            SELECT ?this
            WHERE {
                ?this a cacontology-detection:ContentHashingAction .
                FILTER NOT EXISTS {
                    ?this uco-action:result ?hash .
                    ?hash a ?hashType .
                    FILTER (?hashType IN (
                        cacontology-detection:PhotoDNAHash,
                        cacontology-detection:PerceptualHash,
                        uco-types:Hash
                    ))
                }
            }
        """ ] ;
    sh:targetClass cacontology-detection:ContentHashingAction .

cacontology-detection:MachineLearningDetectionToolGUFOShape a sh:NodeShape ;
    rdfs:label "gUFO Machine Learning Detection Tool Shape"@en ;
    rdfs:comment "Validates machine learning detection tool instances with gUFO foundational constraints."@en ;
    sh:property [ sh:hasValue gufo:Object ;
            sh:message "ML detection tool must be typed as gUFO Object"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 50 ;
            sh:message "Model version should be 1-50 characters when specified"@en ;
            sh:minCount 0 ;
            sh:minLength 1 ;
            sh:path cacontology-detection:modelVersion ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Detection threshold must be between 0.0 and 1.0"@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-detection:detectionThreshold ] ;
    sh:targetClass cacontology-detection:MachineLearningDetectionTool .

cacontology-detection:ManualClassificationActionGUFOShape a sh:NodeShape ;
    rdfs:label "gUFO Manual Classification Action Shape"@en ;
    rdfs:comment "Validates manual classification action instances with gUFO Event constraints."@en ;
    sh:property [ sh:hasValue gufo:Event ;
            sh:message "Manual classification action must be typed as gUFO Event"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Manual classification action must specify start time"@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ],
        [ sh:class uco-identity:Person ;
            sh:maxCount 1 ;
            sh:message "Manual classification action must specify the person performing the review"@en ;
            sh:minCount 1 ;
            sh:path uco-action:performer ],
        [ sh:datatype xsd:string ;
            sh:in ( "confirmed_csam" "not_csam" "requires_further_review" "inconclusive" "false_positive" ) ;
            sh:maxCount 1 ;
            sh:message "Review decision must be from the allowed list"@en ;
            sh:minCount 0 ;
            sh:path cacontology-detection:reviewDecision ] ;
    sh:targetClass cacontology-detection:ManualClassificationAction .

cacontology-detection:MassContentAnalysisSituationShape a sh:NodeShape ;
    rdfs:label "Mass Content Analysis Situation Shape"@en ;
    rdfs:comment "Validates mass content analysis situations."@en ;
    sh:sparql [ sh:message "Mass content analysis situation must involve multiple detection actions"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/detection#"^^xsd:anyURI ;
                            sh:prefix "cacontology-detection" ],
                        [ sh:namespace "http://purl.org/nemo/gufo#"^^xsd:anyURI ;
                            sh:prefix "gufo" ] ] ;
            sh:select """
            PREFIX cacontology-detection: <https://cacontology.projectvic.org/detection#>
            PREFIX gufo: <http://purl.org/nemo/gufo#>
            SELECT ?this
            WHERE {
                ?this a cacontology-detection:MassContentAnalysisSituation .
                {
                    SELECT ?this (COUNT(?action) as ?actionCount)
                    WHERE {
                        ?action gufo:occursInSituation ?this .
                        ?action a cacontology-detection:AutomatedDetectionAction .
                    }
                    GROUP BY ?this
                }
                FILTER (?actionCount < 10)
            }
        """ ] ;
    sh:targetClass cacontology-detection:MassContentAnalysisSituation .

cacontology-detection:PerceptualHashGUFOShape a sh:NodeShape ;
    rdfs:label "gUFO Perceptual Hash Shape"@en ;
    rdfs:comment "Validates perceptual hash instances with gUFO foundational constraints."@en ;
    sh:property [ sh:hasValue gufo:Object ;
            sh:message "Perceptual hash must be typed as gUFO Object"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 128 ;
            sh:message "Perceptual hash value must be a hexadecimal string (8-128 characters)"@en ;
            sh:minCount 1 ;
            sh:minLength 8 ;
            sh:path cacontology-detection:perceptualHashValue ;
            sh:pattern "^[0-9A-Fa-f]+$" ],
        [ sh:datatype xsd:string ;
            sh:in ( "pHash" "aHash" "dHash" "wHash" "colorHash" "blockHash" ) ;
            sh:maxCount 1 ;
            sh:message "Hash algorithm must be from the allowed list"@en ;
            sh:minCount 1 ;
            sh:path cacontology-detection:hashAlgorithm ] ;
    sh:targetClass cacontology-detection:PerceptualHash .

cacontology-detection:PhotoDNAHashGUFOShape a sh:NodeShape ;
    rdfs:label "gUFO PhotoDNA Hash Shape"@en ;
    rdfs:comment "Validates PhotoDNA hash instances with gUFO foundational constraints."@en ;
    sh:property [ sh:hasValue gufo:Object ;
            sh:message "PhotoDNA hash must be typed as gUFO Object"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 128 ;
            sh:message "PhotoDNA value must be a hexadecimal string (32-128 characters)"@en ;
            sh:minCount 1 ;
            sh:minLength 32 ;
            sh:path cacontology-detection:photoDNAValue ;
            sh:pattern "^[0-9A-Fa-f]+$" ] ;
    sh:targetClass cacontology-detection:PhotoDNAHash .

cacontology-detection:RiskStratificationActionShape a sh:NodeShape ;
    rdfs:label "Risk Stratification Action Shape"@en ;
    rdfs:comment "Validates risk stratification actions that produce explainable prioritization outputs."@en ;
    sh:property [ sh:message "Risk stratification action must produce at least one risk stratification result."@en ;
            sh:minCount 1 ;
            sh:path cacontology-detection:producesRiskStratificationResult ],
        [ sh:message "Risk stratification action may link to a detection result it stratifies."@en ;
            sh:minCount 0 ;
            sh:path cacontology-detection:stratifiesDetectionResult ] ;
    sh:targetClass cacontology-detection:RiskStratificationAction .

cacontology-detection:RiskStratificationResultShape a sh:NodeShape ;
    rdfs:label "Risk Stratification Result Shape"@en ;
    rdfs:comment "Validates risk stratification result artifacts with optional tier/score and explainability rationale."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "critical" "high" "medium" "low" "unknown" ) ;
            sh:maxCount 1 ;
            sh:message "Risk tier must be one of: critical/high/medium/low/unknown (when present)."@en ;
            sh:minCount 0 ;
            sh:path cacontology-detection:riskTier ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:message "Risk score must be a decimal when present."@en ;
            sh:minCount 0 ;
            sh:path cacontology-detection:riskScore ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:message "Risk rationale must be a string when present."@en ;
            sh:minCount 0 ;
            sh:path cacontology-detection:riskRationale ] ;
    sh:targetClass cacontology-detection:RiskStratificationResult .

cacontology-detection:SARClassificationGUFOShape a sh:NodeShape ;
    rdfs:label "SAR Classification gUFO Shape"@en ;
    rdfs:comment "Validates SAR classification concept instances with gUFO enhancements."@en ;
    sh:property [ sh:maxCount 1 ;
            sh:maxLength 100 ;
            sh:message "SAR classification must have a preferred label (5-100 characters)"@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path skos:prefLabel ],
        [ sh:maxCount 1 ;
            sh:maxLength 500 ;
            sh:message "SAR classification must have a definition (10-500 characters)"@en ;
            sh:minCount 1 ;
            sh:minLength 10 ;
            sh:path skos:definition ],
        [ sh:hasValue cacontology-detection:SARClassificationScheme ;
            sh:maxCount 1 ;
            sh:message "SAR classification must be in the SAR Classification Scheme"@en ;
            sh:minCount 1 ;
            sh:path skos:inScheme ] ;
    sh:targetNode cacontology-detection:sar-1,
        cacontology-detection:sar-2,
        cacontology-detection:sar-3,
        cacontology-detection:sar-4,
        cacontology-detection:sar-5 .

cacontology-detection:copineClassification a owl:ObjectProperty ;
    rdfs:label "COPINE classification"@en ;
    rdfs:comment "Links content to its COPINE classification level."@en ;
    rdfs:range cacontology-detection:COPINEClassificationScheme .

cacontology-detection:detectedContent a owl:ObjectProperty ;
    rdfs:label "detected content"@en ;
    rdfs:comment "Links a detection action to the content that was analyzed."@en ;
    rdfs:domain cacontology-detection:AutomatedDetectionAction ;
    rdfs:range uco-observable:ObservableObject .

cacontology-detection:detectionDuration a owl:DatatypeProperty ;
    rdfs:label "detection duration"@en ;
    rdfs:comment "Duration of detection action from start to completion."@en ;
    rdfs:domain cacontology-detection:AutomatedDetectionAction ;
    rdfs:range xsd:duration .

cacontology-detection:falsePositiveReason a owl:DatatypeProperty ;
    rdfs:label "false positive reason"@en ;
    rdfs:comment "The reason why content was determined to be a false positive."@en ;
    rdfs:domain cacontology-detection:FalsePositiveAnalysisAction ;
    rdfs:range xsd:string .

cacontology-detection:generatedHash a owl:ObjectProperty ;
    rdfs:label "generated hash"@en ;
    rdfs:comment "Links a hashing action to the hash that was generated."@en ;
    rdfs:domain cacontology-detection:ContentHashingAction ;
    rdfs:range uco-types:Hash .

cacontology-detection:matchType a owl:DatatypeProperty ;
    rdfs:label "match type"@en ;
    rdfs:comment "The type of match found (e.g., 'exact', 'near-duplicate', 'variant')."@en ;
    rdfs:domain cacontology-detection:DatabaseMatchAction ;
    rdfs:range xsd:string .

cacontology-detection:matchedDatabase a owl:ObjectProperty ;
    rdfs:label "matched database"@en ;
    rdfs:comment "Links a match action to the database that contained the matching hash."@en ;
    rdfs:domain cacontology-detection:DatabaseMatchAction ;
    rdfs:range uco-observable:ObservableObject .

cacontology-detection:phaseDuration a owl:DatatypeProperty ;
    rdfs:label "phase duration"@en ;
    rdfs:comment "Duration of detection phase."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:duration .

cacontology-detection:reviewedBy a owl:ObjectProperty ;
    rdfs:label "reviewed by"@en ;
    rdfs:comment "Links a classification action to the person who performed the review."@en ;
    rdfs:domain cacontology-detection:ManualClassificationAction ;
    rdfs:range uco-identity:Identity .

cacontology-detection:riskResultFor a owl:ObjectProperty ;
    rdfs:label "risk result for"@en ;
    dcterms:source "Community & Intelligence Beyond Detection (Global Emancipation Network), 2026-02-10."@en ;
    rdfs:comment "Links a risk stratification result to the observable object it pertains to (e.g., detected content, a tip artifact, or another observable signal)."@en ;
    rdfs:domain cacontology-detection:RiskStratificationResult ;
    rdfs:range uco-observable:ObservableObject ;
    rdfs:seeAlso <https://www.linkedin.com/pulse/community-intelligence-beyond-detection-global-emancipation-network-xvemc/> .

cacontology-detection:roleDuration a owl:DatatypeProperty ;
    rdfs:label "role duration"@en ;
    rdfs:comment "Duration of individual's detection role."@en ;
    rdfs:domain gufo:Role ;
    rdfs:range xsd:duration .

cacontology-detection:sarClassification a owl:ObjectProperty ;
    rdfs:label "SAR classification"@en ;
    rdfs:comment "Links content to its SAR (1-5) classification level."@en ;
    rdfs:range cacontology-detection:SARClassificationScheme .

cacontology-detection:similarityScore a owl:DatatypeProperty ;
    rdfs:label "similarity score"@en ;
    rdfs:comment "The similarity score for perceptual hash matches (0.0-1.0)."@en ;
    rdfs:range xsd:decimal .

cacontology-educational:AcademicTermPhase a owl:Class ;
    rdfs:label "Academic Term Phase"@en ;
    rdfs:comment "Anti-rigid phase representing academic terms during which exploitation may occur."@en ;
    rdfs:subClassOf gufo:Phase ;
    cacontology-gufo:hasAntiRigidityConstraint "Phase changes with academic calendar" ;
    cacontology-gufo:hasTemporalProperty cacontology-gufo:beginTimePoint,
        cacontology-gufo:duration,
        cacontology-gufo:endTimePoint .

cacontology-educational:AdministratorRole a owl:Class ;
    rdfs:label "Administrator Role"@en ;
    rdfs:comment "Administrative role within educational institution with oversight responsibilities. Enhanced as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf gufo:Role,
        cacontology-educational:EducatorRole .

cacontology-educational:AfterHoursClassroomExploitation a owl:Class ;
    rdfs:label "After Hours Classroom Exploitation"@en ;
    rdfs:comment "Exploitation occurring in classroom setting outside normal school hours. Enhanced as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        cacontology-educational:ClassroomExploitationContext .

cacontology-educational:AssignmentCompletionExploitation a owl:Class ;
    rdfs:label "Assignment Completion Exploitation"@en ;
    rdfs:comment "Exploitation occurring while student is completing assignments or homework in classroom. Enhanced as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        cacontology-educational:ClassroomExploitationContext .

cacontology-educational:CounselorRole a owl:Class ;
    rdfs:label "Counselor Role"@en ;
    rdfs:comment "Counseling role providing guidance and support to students. Enhanced as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf gufo:Role,
        cacontology-educational:EducatorRole .

cacontology-educational:CrossInstitutionalInvestigationSituation a owl:Class ;
    rdfs:label "Cross Institutional Investigation Situation"@en ;
    rdfs:comment "Situation requiring coordination between multiple educational institutions, law enforcement, and regulatory bodies."@en ;
    rdfs:subClassOf gufo:Situation,
        cacontology-educational:EducationalExploitationSituation .

cacontology-educational:EliteEducationalInstitution a owl:Class ;
    rdfs:label "Elite Educational Institution"@en ;
    rdfs:comment "High-status educational institution with selective admission and affluent student body. Enhanced as gUFO Organization."@en ;
    rdfs:subClassOf gufo:Organization,
        cacontology-educational:EducationalInstitution .

cacontology-educational:EmploymentPhase a owl:Class ;
    rdfs:label "Employment Phase"@en ;
    rdfs:comment "Anti-rigid phase representing educator's employment period during which exploitation occurs."@en ;
    rdfs:subClassOf gufo:Phase ;
    cacontology-gufo:hasAntiRigidityConstraint "Phase varies based on employment status and contract" .

cacontology-educational:ExploitationEscalationPhase a owl:Class ;
    rdfs:label "Exploitation Escalation Phase"@en ;
    rdfs:comment "Anti-rigid phase representing escalation of exploitative behavior over time."@en ;
    rdfs:subClassOf gufo:Phase ;
    cacontology-gufo:hasAntiRigidityConstraint "Phase changes based on exploitation severity and duration" .

cacontology-educational:GymTeacherRole a owl:Class ;
    rdfs:label "Gym Teacher Role"@en ;
    rdfs:comment "Physical education teacher role with student interaction in athletic contexts. Enhanced as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf gufo:Role,
        cacontology-educational:TeacherRole .

cacontology-educational:ImmediatePhysicalContactExploitation a owl:Class ;
    rdfs:label "Immediate Physical Contact Exploitation"@en ;
    rdfs:comment "Sexual exploitation involving immediate physical contact without prior grooming or relationship building. Enhanced as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-educational:TeacherStudentExploitation .

cacontology-educational:IndependentSchool a owl:Class ;
    rdfs:label "Independent School"@en ;
    rdfs:comment "Private independent school, often with elite status and specialized educational programs. Enhanced as gUFO Organization."@en ;
    rdfs:subClassOf gufo:Organization,
        cacontology-educational:EducationalInstitution .

cacontology-educational:InstitutionalResponseSituation a owl:Class ;
    rdfs:label "Institutional Response Situation"@en ;
    rdfs:comment "Situation involving institutional response to exploitation allegations, including investigation, disciplinary action, and prevention measures."@en ;
    rdfs:subClassOf gufo:Situation,
        cacontology-educational:EducationalExploitationSituation .

cacontology-educational:IntermediateSchool a owl:Class ;
    rdfs:label "Intermediate School"@en ;
    rdfs:comment "Intermediate or middle school serving grades 6-8, typically ages 11-14. Enhanced as gUFO Organization."@en ;
    rdfs:subClassOf gufo:Organization,
        cacontology-educational:PublicSchool .

cacontology-educational:InvestigationPhase a owl:Class ;
    rdfs:label "Investigation Phase"@en ;
    rdfs:comment "Anti-rigid phase representing institutional or legal investigation of exploitation allegations."@en ;
    rdfs:subClassOf gufo:Phase ;
    cacontology-gufo:hasAntiRigidityConstraint "Phase changes based on investigation progress and findings" .

cacontology-educational:MathTeacherRole a owl:Class ;
    rdfs:label "Math Teacher Role"@en ;
    rdfs:comment "Mathematics teacher role with specialized subject matter expertise. Enhanced as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf gufo:Role,
        cacontology-educational:TeacherRole ;
    cacontology-gufo:hasAntiRigidityConstraint "Role specialization can change over time" .

cacontology-educational:MiddleSchool a owl:Class ;
    rdfs:label "Middle School"@en ;
    rdfs:comment "Middle school serving grades 6-8 or similar intermediate grade levels. Enhanced as gUFO Organization."@en ;
    rdfs:subClassOf gufo:Organization,
        cacontology-educational:PublicSchool .

cacontology-educational:MultiVictimExploitationSituation a owl:Class ;
    rdfs:label "Multi-Victim Exploitation Situation"@en ;
    rdfs:comment "Situation involving multiple victims across multiple institutions or time periods."@en ;
    rdfs:subClassOf gufo:Situation,
        cacontology-educational:EducationalExploitationSituation .

cacontology-educational:OneOnOneAcademicExploitation a owl:Class ;
    rdfs:label "One on One Academic Exploitation"@en ;
    rdfs:comment "Exploitation during individual academic assistance or tutoring sessions. Enhanced as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        cacontology-educational:ClassroomExploitationContext .

cacontology-educational:PositionOfTrustExploitation a owl:Class ;
    rdfs:label "Position of Trust Exploitation"@en ;
    rdfs:comment "Exploitation leveraging educator's position of trust and authority over students. Enhanced as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-educational:EducatorPerpetratedExploitation .

cacontology-educational:PrivateSchool a owl:Class ;
    rdfs:label "Private School"@en ;
    rdfs:comment "Private educational institution with tuition-based funding. Enhanced as gUFO Organization."@en ;
    rdfs:subClassOf gufo:Organization,
        cacontology-educational:EducationalInstitution .

cacontology-educational:SubstituteTeacherRole a owl:Class ;
    rdfs:label "Substitute Teacher Role"@en ;
    rdfs:comment "Temporary teaching role covering for regular teachers. Enhanced as anti-rigid gUFO Role with temporary status."@en ;
    rdfs:subClassOf gufo:Role,
        cacontology-educational:TeacherRole ;
    cacontology-gufo:hasAntiRigidityConstraint "Temporary role with variable duration and assignment" .

cacontology-educational:TestTakingExploitation a owl:Class ;
    rdfs:label "Test Taking Exploitation"@en ;
    rdfs:comment "Exploitation occurring while student is taking tests or examinations. Enhanced as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        cacontology-educational:ClassroomExploitationContext .

cacontology-educational:academicActivity a owl:DatatypeProperty ;
    rdfs:label "academic activity"@en ;
    rdfs:comment "Type of academic activity during which exploitation occurred."@en ;
    rdfs:domain cacontology-educational:ClassroomExploitationContext ;
    rdfs:range xsd:string .

cacontology-educational:accessLevel a owl:DatatypeProperty ;
    rdfs:label "access level"@en ;
    rdfs:comment "Level of access to students and institutional resources."@en ;
    rdfs:domain cacontology-educational:EducatorRole ;
    rdfs:range xsd:string .

cacontology-educational:activatesMandatoryReporting a owl:ObjectProperty ;
    rdfs:label "activates mandatory reporting"@en ;
    rdfs:comment "Links disclosure to mandatory reporting activation."@en ;
    rdfs:domain cacontology-educational:VictimDisclosureToStaff ;
    rdfs:range cacontology-educational:SchoolStaffReporting .

cacontology-educational:actualAge a owl:DatatypeProperty ;
    rdfs:label "actual age"@en ;
    rdfs:comment "Actual age of perpetrator."@en ;
    rdfs:domain cacontology-educational:AgeDeception ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-educational:addressesVulnerability a owl:ObjectProperty ;
    rdfs:label "addresses vulnerability"@en ;
    rdfs:comment "Links safeguarding measure to vulnerability it addresses."@en ;
    rdfs:domain cacontology-educational:InstitutionalSafeguarding ;
    rdfs:range cacontology-educational:InstitutionalVulnerability .

cacontology-educational:assignmentType a owl:DatatypeProperty ;
    rdfs:label "assignment type"@en ;
    rdfs:comment "Type of assignment on which harassment was written."@en ;
    rdfs:domain cacontology-educational:WrittenHarassmentEvidence ;
    rdfs:range xsd:string .

cacontology-educational:attendsInstitution a owl:ObjectProperty ;
    rdfs:label "attends institution"@en ;
    rdfs:comment "Links student victim to educational institution they attend."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range cacontology-educational:EducationalInstitution .

cacontology-educational:bailAmount a owl:DatatypeProperty ;
    rdfs:label "bail amount"@en ;
    rdfs:comment "Bail amount set for defendant."@en ;
    rdfs:domain cacontology:ChildSexualExploitationCharge ;
    rdfs:range xsd:decimal .

cacontology-educational:bodyPartTouched a owl:DatatypeProperty ;
    rdfs:label "body part touched"@en ;
    rdfs:comment "Specific body part inappropriately touched."@en ;
    rdfs:domain cacontology-educational:OpportunisticTouching ;
    rdfs:range xsd:string .

cacontology-educational:bondAmount a owl:DatatypeProperty ;
    rdfs:label "bond amount"@en ;
    rdfs:comment "Bond amount alternative to cash bail."@en ;
    rdfs:domain cacontology:ChildSexualExploitationCharge ;
    rdfs:range xsd:decimal .

cacontology-educational:chargeCount a owl:DatatypeProperty ;
    rdfs:label "charge count"@en ;
    rdfs:comment "Number of charges filed."@en ;
    rdfs:domain cacontology:ChildSexualExploitationCharge ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-educational:chargeDegree a owl:DatatypeProperty ;
    rdfs:label "charge degree"@en ;
    rdfs:comment "Degree of criminal charge (first, second, third)."@en ;
    rdfs:domain cacontology:ChildSexualExploitationCharge ;
    rdfs:range xsd:string .

cacontology-educational:chargesDefendant a owl:ObjectProperty ;
    rdfs:label "charges defendant"@en ;
    rdfs:comment "Links criminal charge to defendant being charged."@en ;
    rdfs:domain cacontology:ChildSexualExploitationCharge ;
    rdfs:range uco-identity:Person .

cacontology-educational:classroomNumber a owl:DatatypeProperty ;
    rdfs:label "classroom number"@en ;
    rdfs:comment "Classroom number or identifier where exploitation occurred."@en ;
    rdfs:domain cacontology-educational:ClassroomExploitationContext ;
    rdfs:range xsd:string .

cacontology-educational:collectsEvidence a owl:ObjectProperty ;
    rdfs:label "collects evidence"@en ;
    rdfs:comment "Links investigation to evidence collected."@en ;
    rdfs:domain cacontology-educational:EducationalInstitutionInvestigation ;
    rdfs:range uco-observable:ObservableObject .

cacontology-educational:communicatesVia a owl:ObjectProperty ;
    rdfs:label "communicates via"@en ;
    rdfs:comment "Links exploitation to communication platform used."@en ;
    rdfs:domain cacontology-educational:EducatorPerpetratedExploitation ;
    rdfs:range uco-observable:ObservableObject .

cacontology-educational:contactDuration a owl:DatatypeProperty ;
    rdfs:label "contact duration"@en ;
    rdfs:comment "Duration of physical contact in seconds."@en ;
    rdfs:domain cacontology-educational:PhysicalContactPattern ;
    rdfs:range xsd:decimal .

cacontology-educational:contactFrequency a owl:DatatypeProperty ;
    rdfs:label "contact frequency"@en ;
    rdfs:comment "Frequency of inappropriate physical contact incidents."@en ;
    rdfs:domain cacontology-educational:PhysicalContactPattern ;
    rdfs:range xsd:string .

cacontology-educational:contactType a owl:DatatypeProperty ;
    rdfs:label "contact type"@en ;
    rdfs:comment "Type of inappropriate physical contact."@en ;
    rdfs:domain cacontology-educational:PhysicalContactPattern ;
    rdfs:range xsd:string .

cacontology-educational:coordinatesWith a owl:ObjectProperty ;
    rdfs:label "coordinates with"@en ;
    rdfs:comment "Links investigation to coordinating agencies."@en ;
    rdfs:domain cacontology-educational:EducationalInstitutionInvestigation ;
    rdfs:range uco-identity:Organization .

cacontology-educational:corroboratesAccount a owl:ObjectProperty ;
    rdfs:label "corroborates account"@en ;
    rdfs:comment "Links evidence to victim account it corroborates."@en ;
    rdfs:domain uco-observable:ObservableObject ;
    rdfs:range cacontology-educational:VictimAccountEvidence .

cacontology-educational:deceivesVictim a owl:ObjectProperty ;
    rdfs:label "deceives victim"@en ;
    rdfs:comment "Links impersonation to victim being deceived."@en ;
    rdfs:domain cacontology-educational:DigitalImpersonation ;
    rdfs:range uco-identity:Person .

cacontology-educational:deceptionDuration a owl:DatatypeProperty ;
    rdfs:label "deception duration"@en ;
    rdfs:comment "Duration of impersonation in months."@en ;
    rdfs:domain cacontology-educational:DigitalImpersonation ;
    rdfs:range xsd:decimal .

cacontology-educational:degradationLevel a owl:DatatypeProperty ;
    rdfs:label "degradation level"@en ;
    rdfs:comment "Level of degradation in written comments (mild, moderate, severe)."@en ;
    rdfs:domain cacontology-educational:DegradingWrittenComments ;
    rdfs:range xsd:string .

cacontology-educational:degradesVictim a owl:ObjectProperty ;
    rdfs:label "degrades victim"@en ;
    rdfs:comment "Links degrading comments to victim being degraded."@en ;
    rdfs:domain cacontology-educational:DegradingWrittenComments ;
    rdfs:range uco-identity:Person .

cacontology-educational:disclosesTo a owl:ObjectProperty ;
    rdfs:label "discloses to"@en ;
    rdfs:comment "Links victim disclosure to staff member receiving disclosure."@en ;
    rdfs:domain cacontology-educational:VictimDisclosureToStaff ;
    rdfs:range uco-identity:Person .

cacontology-educational:disclosureMethod a owl:DatatypeProperty ;
    rdfs:label "disclosure method"@en ;
    rdfs:comment "Method used by victim to disclose exploitation."@en ;
    rdfs:domain cacontology-educational:VictimDisclosureToStaff ;
    rdfs:range xsd:string .

cacontology-educational:documentsExploitation a owl:ObjectProperty ;
    rdfs:label "documents exploitation"@en ;
    rdfs:comment "Links evidence to exploitation it documents."@en ;
    rdfs:domain cacontology-educational:DigitalCommunicationEvidence ;
    rdfs:range cacontology-educational:EducatorPerpetratedExploitation .

cacontology-educational:documentsHarassment a owl:ObjectProperty ;
    rdfs:label "documents harassment"@en ;
    rdfs:comment "Links written harassment evidence to harassment it documents."@en ;
    rdfs:domain cacontology-educational:WrittenHarassmentEvidence ;
    rdfs:range cacontology-educational:WrittenHarassment .

cacontology-educational:duringActivity a owl:ObjectProperty ;
    rdfs:label "during activity"@en ;
    rdfs:comment "Links exploitation to specific academic activity."@en ;
    rdfs:domain cacontology-educational:AcademicActivityExploitation ;
    rdfs:range uco-action:Action .

cacontology-educational:educatorAge a owl:DatatypeProperty ;
    rdfs:label "educator age"@en ;
    rdfs:comment "Age of educator at time of exploitation."@en ;
    rdfs:domain cacontology-educational:EducatorRole ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-educational:employedAt a owl:ObjectProperty ;
    rdfs:label "employed at"@en ;
    rdfs:comment "Links educator to institution where they were employed."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range cacontology-educational:EducationalInstitution .

cacontology-educational:employmentDuration a owl:DatatypeProperty ;
    rdfs:label "employment duration"@en ;
    rdfs:comment "Duration of employment at educational institution in months."@en ;
    rdfs:domain cacontology-educational:EducatorRole ;
    rdfs:range xsd:decimal .

cacontology-educational:enhancedBy a owl:ObjectProperty ;
    rdfs:label "enhanced by"@en ;
    rdfs:comment "Links charge to enhancement factors."@en ;
    rdfs:domain cacontology:ChildSexualExploitationCharge ;
    rdfs:range uco-core:UcoObject .

cacontology-educational:escalatesTo a owl:ObjectProperty ;
    rdfs:label "escalates to"@en ;
    rdfs:comment "Links initial contact to escalated contact patterns."@en ;
    rdfs:domain cacontology-educational:PhysicalContactPattern ;
    rdfs:range cacontology-educational:PhysicalContactPattern .

cacontology-educational:evidenceLocation a owl:DatatypeProperty ;
    rdfs:label "evidence location"@en ;
    rdfs:comment "Location where evidence was found or collected."@en ;
    rdfs:domain uco-observable:ObservableObject ;
    rdfs:range xsd:string .

cacontology-educational:evidenceType a owl:DatatypeProperty ;
    rdfs:label "evidence type"@en ;
    rdfs:comment "Type of evidence collected."@en ;
    rdfs:domain uco-observable:ObservableObject ;
    rdfs:range xsd:string .

cacontology-educational:exploitationDuration a owl:DatatypeProperty ;
    rdfs:label "exploitation duration"@en ;
    rdfs:comment "Duration of exploitation activity in months."@en ;
    rdfs:domain cacontology-educational:EducatorPerpetratedExploitation ;
    rdfs:range xsd:decimal .

cacontology-educational:exploitationLocation a owl:DatatypeProperty ;
    rdfs:label "exploitation location"@en ;
    rdfs:comment "Primary location where exploitation occurred."@en ;
    rdfs:domain cacontology-educational:EducatorPerpetratedExploitation ;
    rdfs:range xsd:string .

cacontology-educational:exploitationMethod a owl:DatatypeProperty ;
    rdfs:label "exploitation method"@en ;
    rdfs:comment "Primary method used for exploitation (digital, physical, combined)."@en ;
    rdfs:domain cacontology-educational:EducatorPerpetratedExploitation ;
    rdfs:range xsd:string .

cacontology-educational:exploitsIsolation a owl:ObjectProperty ;
    rdfs:label "exploits isolation"@en ;
    rdfs:comment "Links exploitation to isolation vulnerability."@en ;
    rdfs:domain cacontology-educational:ClassroomBasedExploitation ;
    rdfs:range cacontology-educational:ClassroomIsolationVulnerability .

cacontology-educational:exploitsPosition a owl:ObjectProperty ;
    rdfs:label "exploits position"@en ;
    rdfs:comment "Links exploitation to educator position being exploited."@en ;
    rdfs:domain cacontology-educational:EducatorPerpetratedExploitation ;
    rdfs:range cacontology-educational:EducatorRole .

cacontology-educational:exploitsVulnerability a owl:ObjectProperty ;
    rdfs:label "exploits vulnerability"@en ;
    rdfs:comment "Links targeting to vulnerability being exploited."@en ;
    rdfs:domain cacontology-educational:VulnerableStudentTargeting ;
    rdfs:range cacontology-educational:InstitutionalVulnerability .

cacontology-educational:fakeAccountCount a owl:DatatypeProperty ;
    rdfs:label "fake account count"@en ;
    rdfs:comment "Number of fake accounts used for impersonation."@en ;
    rdfs:domain cacontology-educational:MultipleAccountDeception ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-educational:followedBySupervision a owl:ObjectProperty ;
    rdfs:label "followed by supervision"@en ;
    rdfs:comment "Links sentence to post-release supervision period."@en ;
    rdfs:domain cacontology-educational:UseOfChildInSexualPerformance ;
    rdfs:range cacontology-educational:PostReleaseSuperVision .

cacontology-educational:forceLevel a owl:DatatypeProperty ;
    rdfs:label "force level"@en ;
    rdfs:comment "Level of force used in physical contact (minimal, moderate, significant)."@en ;
    rdfs:domain cacontology-educational:ForcibleTouching ;
    rdfs:range xsd:string .

cacontology-educational:forciblyTouches a owl:ObjectProperty ;
    rdfs:label "forcibly touches"@en ;
    rdfs:comment "Links forcible touching to victim."@en ;
    rdfs:domain cacontology-educational:ForcibleTouching ;
    rdfs:range uco-identity:Person .

cacontology-educational:gradeLevel a owl:DatatypeProperty ;
    rdfs:label "grade level"@en ;
    rdfs:comment "Grade level taught by educator."@en ;
    rdfs:domain cacontology-educational:TeacherRole ;
    rdfs:range xsd:string .

cacontology-educational:gradeRange a owl:DatatypeProperty ;
    rdfs:label "grade range"@en ;
    rdfs:comment "Grade range served by institution (e.g., 6-8, K-12)."@en ;
    rdfs:domain cacontology-educational:EducationalInstitution ;
    rdfs:range xsd:string .

cacontology-educational:harassmentContent a owl:DatatypeProperty ;
    rdfs:label "harassment content"@en ;
    rdfs:comment "Content of written harassment message or comment."@en ;
    rdfs:domain cacontology-educational:WrittenHarassment ;
    rdfs:range xsd:string .

cacontology-educational:harassmentFrequency a owl:DatatypeProperty ;
    rdfs:label "harassment frequency"@en ;
    rdfs:comment "Frequency of written harassment incidents."@en ;
    rdfs:domain cacontology-educational:WrittenHarassment ;
    rdfs:range xsd:string .

cacontology-educational:harassmentMedium a owl:DatatypeProperty ;
    rdfs:label "harassment medium"@en ;
    rdfs:comment "Medium used for written harassment (assignment, test, note)."@en ;
    rdfs:domain cacontology-educational:WrittenHarassment ;
    rdfs:range xsd:string .

cacontology-educational:hasVulnerability a owl:ObjectProperty ;
    rdfs:label "has vulnerability"@en ;
    rdfs:comment "Links institution to vulnerability factors present."@en ;
    rdfs:domain cacontology-educational:EducationalInstitution ;
    rdfs:range cacontology-educational:InstitutionalVulnerability .

cacontology-educational:identifiesVulnerability a owl:ObjectProperty ;
    rdfs:label "identifies vulnerability"@en ;
    rdfs:comment "Links targeting to vulnerability identification."@en ;
    rdfs:domain cacontology-educational:StudentVictimTargeting ;
    rdfs:range cacontology-educational:InstitutionalVulnerability .

cacontology-educational:impersonatedAge a owl:DatatypeProperty ;
    rdfs:label "impersonated age"@en ;
    rdfs:comment "Age claimed during impersonation."@en ;
    rdfs:domain cacontology-educational:AgeDeception ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-educational:impersonatesAge a owl:ObjectProperty ;
    rdfs:label "impersonates age"@en ;
    rdfs:comment "Links impersonation to age deception."@en ;
    rdfs:domain cacontology-educational:DigitalImpersonation ;
    rdfs:range cacontology-educational:AgeDeception .

cacontology-educational:implementsSafeguarding a owl:ObjectProperty ;
    rdfs:label "implements safeguarding"@en ;
    rdfs:comment "Links institution to safeguarding measures implemented."@en ;
    rdfs:domain cacontology-educational:EducationalInstitution ;
    rdfs:range cacontology-educational:InstitutionalSafeguarding .

cacontology-educational:institutionCount a owl:DatatypeProperty ;
    rdfs:label "institution count"@en ;
    rdfs:comment "Number of educational institutions involved in exploitation."@en ;
    rdfs:domain cacontology-educational:CrossInstitutionalExploitation ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-educational:institutionLocation a owl:DatatypeProperty ;
    rdfs:label "institution location"@en ;
    rdfs:comment "Geographic location of educational institution."@en ;
    rdfs:domain cacontology-educational:EducationalInstitution ;
    rdfs:range xsd:string .

cacontology-educational:institutionReputation a owl:DatatypeProperty ;
    rdfs:label "institution reputation"@en ;
    rdfs:comment "Reputation level of institution (elite, prestigious, standard)."@en ;
    rdfs:domain cacontology-educational:EducationalInstitution ;
    rdfs:range xsd:string .

cacontology-educational:institutionType a owl:DatatypeProperty ;
    rdfs:label "institution type"@en ;
    rdfs:comment "Type of educational institution (independent, public, private, elite)."@en ;
    rdfs:domain cacontology-educational:EducationalInstitution ;
    rdfs:range xsd:string .

cacontology-educational:interviewsVictim a owl:ObjectProperty ;
    rdfs:label "interviews victim"@en ;
    rdfs:comment "Links investigation to victim interviews."@en ;
    rdfs:domain cacontology-educational:EducationalInstitutionInvestigation ;
    rdfs:range uco-identity:Person .

cacontology-educational:intimidatesStudent a owl:ObjectProperty ;
    rdfs:label "intimidates student"@en ;
    rdfs:comment "Links academic intimidation to student being intimidated."@en ;
    rdfs:domain cacontology-educational:AcademicIntimidation ;
    rdfs:range uco-identity:Person .

cacontology-educational:investigatesExploitation a owl:ObjectProperty ;
    rdfs:label "investigates exploitation"@en ;
    rdfs:comment "Links investigation to exploitation being investigated."@en ;
    rdfs:domain cacontology-educational:EducationalInstitutionInvestigation ;
    rdfs:range cacontology-educational:EducatorPerpetratedExploitation .

cacontology-educational:involvesPhysicalContact a owl:ObjectProperty ;
    rdfs:label "involves physical contact"@en ;
    rdfs:comment "Links exploitation to physical contact patterns."@en ;
    rdfs:domain cacontology-educational:EducatorPerpetratedExploitation ;
    rdfs:range cacontology-educational:PhysicalContactPattern .

cacontology-educational:involvesWrittenHarassment a owl:ObjectProperty ;
    rdfs:label "involves written harassment"@en ;
    rdfs:comment "Links exploitation to written harassment activities."@en ;
    rdfs:domain cacontology-educational:EducatorPerpetratedExploitation ;
    rdfs:range cacontology-educational:WrittenHarassment .

cacontology-educational:isolationLevel a owl:DatatypeProperty ;
    rdfs:label "isolation level"@en ;
    rdfs:comment "Level of isolation during exploitation (alone, few_students, class_present)."@en ;
    rdfs:domain cacontology-educational:ClassroomExploitationContext ;
    rdfs:range xsd:string .

cacontology-educational:leveragesAcademicPower a owl:ObjectProperty ;
    rdfs:label "leverages academic power"@en ;
    rdfs:comment "Links exploitation to academic power vulnerability."@en ;
    rdfs:domain cacontology-educational:AcademicActivityExploitation ;
    rdfs:range cacontology-educational:AcademicPowerVulnerability .

cacontology-educational:linkedToLocation a owl:ObjectProperty ;
    rdfs:label "linked to location"@en ;
    rdfs:comment "Links IP address evidence to physical location."@en ;
    rdfs:domain cacontology-educational:IPAddressEvidence ;
    rdfs:range uco-location:Location .

cacontology-educational:maintainsMultipleAccounts a owl:ObjectProperty ;
    rdfs:label "maintains multiple accounts"@en ;
    rdfs:comment "Links impersonation to multiple account deception."@en ;
    rdfs:domain cacontology-educational:DigitalImpersonation ;
    rdfs:range cacontology-educational:MultipleAccountDeception .

cacontology-educational:mandatoryReportingTriggered a owl:DatatypeProperty ;
    rdfs:label "mandatory reporting triggered"@en ;
    rdfs:comment "Whether mandatory reporting requirements were triggered."@en ;
    rdfs:domain cacontology-educational:SchoolStaffReporting ;
    rdfs:range xsd:boolean .

cacontology-educational:maximumSentence a owl:DatatypeProperty ;
    rdfs:label "maximum sentence"@en ;
    rdfs:comment "Maximum possible sentence for charge in years."@en ;
    rdfs:domain cacontology:ChildSexualExploitationCharge ;
    rdfs:range xsd:decimal .

cacontology-educational:notifiesPrincipal a owl:ObjectProperty ;
    rdfs:label "notifies principal"@en ;
    rdfs:comment "Links staff reporting to principal notification."@en ;
    rdfs:domain cacontology-educational:SchoolStaffReporting ;
    rdfs:range cacontology-educational:PrincipalNotification .

cacontology-educational:occursInContext a owl:ObjectProperty ;
    rdfs:label "occurs in context"@en ;
    rdfs:comment "Links exploitation to classroom or institutional context."@en ;
    rdfs:domain cacontology-educational:EducatorPerpetratedExploitation ;
    rdfs:range cacontology-educational:ClassroomExploitationContext .

cacontology-educational:platformUsed a owl:DatatypeProperty ;
    rdfs:label "platform used"@en ;
    rdfs:comment "Digital platform used for impersonation and exploitation."@en ;
    rdfs:domain cacontology-educational:DigitalImpersonation ;
    rdfs:range xsd:string .

cacontology-educational:policeResponseTime a owl:DatatypeProperty ;
    rdfs:label "police response time"@en ;
    rdfs:comment "Time from notification to police response in hours."@en ;
    rdfs:domain cacontology-educational:PoliceNotification ;
    rdfs:range xsd:decimal .

cacontology-educational:providedBy a owl:ObjectProperty ;
    rdfs:label "provided by"@en ;
    rdfs:comment "Links victim account evidence to victim who provided it."@en ;
    rdfs:domain cacontology-educational:VictimAccountEvidence ;
    rdfs:range uco-identity:Person .

cacontology-educational:providesEvidence a owl:ObjectProperty ;
    rdfs:label "provides evidence"@en ;
    rdfs:comment "Links exploitation to evidence it provides."@en ;
    rdfs:domain cacontology-educational:EducatorPerpetratedExploitation ;
    rdfs:range uco-observable:ObservableObject .

cacontology-educational:receivesReport a owl:ObjectProperty ;
    rdfs:label "receives report"@en ;
    rdfs:comment "Links staff member to report they receive."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range cacontology-educational:VictimDisclosureToStaff .

cacontology-educational:reportingDelay a owl:DatatypeProperty ;
    rdfs:label "reporting delay"@en ;
    rdfs:comment "Time delay between incident and reporting in days."@en ;
    rdfs:domain cacontology-educational:SchoolStaffReporting ;
    rdfs:range xsd:decimal .

cacontology-educational:reportingStaffRole a owl:DatatypeProperty ;
    rdfs:label "reporting staff role"@en ;
    rdfs:comment "Role of staff member who received initial report."@en ;
    rdfs:domain cacontology-educational:SchoolStaffReporting ;
    rdfs:range xsd:string .

cacontology-educational:reportsTo a owl:ObjectProperty ;
    rdfs:label "reports to"@en ;
    rdfs:comment "Links victim to staff member they report to."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range uco-identity:Person .

cacontology-educational:requiresRegistration a owl:ObjectProperty ;
    rdfs:label "requires registration"@en ;
    rdfs:comment "Links conviction to sex offender registration requirement."@en ;
    rdfs:domain cacontology:ChildSexualExploitationCharge,
        cacontology-educational:UseOfChildInSexualPerformance ;
    rdfs:range cacontology-educational:SexOffenderRegistration .

cacontology-educational:resultsinCharge a owl:ObjectProperty ;
    rdfs:label "results in charge"@en ;
    rdfs:comment "Links exploitation to criminal charges filed."@en,
        "Links exploitation to legal charges filed."@en ;
    rdfs:domain cacontology-educational:EducatorPerpetratedExploitation ;
    rdfs:range cacontology:ChildSexualExploitationCharge,
        cacontology-educational:UseOfChildInSexualPerformance .

cacontology-educational:schoolAddress a owl:DatatypeProperty ;
    rdfs:label "school address"@en ;
    rdfs:comment "Physical address of educational institution."@en ;
    rdfs:domain cacontology-educational:EducationalInstitution ;
    rdfs:range xsd:string .

cacontology-educational:selectsVictim a owl:ObjectProperty ;
    rdfs:label "selects victim"@en ;
    rdfs:comment "Links targeting strategy to selected victim."@en ;
    rdfs:domain cacontology-educational:StudentVictimTargeting ;
    rdfs:range uco-identity:Person .

cacontology-educational:sendsContent a owl:ObjectProperty ;
    rdfs:label "sends content"@en ;
    rdfs:comment "Links perpetrator to content sent to victims."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range uco-observable:ObservableObject .

cacontology-educational:sentenceLength a owl:DatatypeProperty ;
    rdfs:label "sentence length"@en ;
    rdfs:comment "Length of prison sentence in years."@en ;
    rdfs:domain cacontology-educational:UseOfChildInSexualPerformance ;
    rdfs:range xsd:decimal .

cacontology-educational:solicitsFrom a owl:ObjectProperty ;
    rdfs:label "solicits from"@en ;
    rdfs:comment "Links solicitation to victim being solicited."@en ;
    rdfs:domain cacontology-educational:SexualPerformanceSolicitation ;
    rdfs:range uco-identity:Person .

cacontology-educational:studentPopulation a owl:DatatypeProperty ;
    rdfs:label "student population"@en ;
    rdfs:comment "Total number of students enrolled at institution."@en ;
    rdfs:domain cacontology-educational:EducationalInstitution ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-educational:studentsPresent a owl:DatatypeProperty ;
    rdfs:label "students present"@en ;
    rdfs:comment "Number of other students present during exploitation."@en ;
    rdfs:domain cacontology-educational:ClassroomExploitationContext ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-educational:subjectTaught a owl:DatatypeProperty ;
    rdfs:label "subject taught"@en ;
    rdfs:comment "Academic subject taught by educator."@en ;
    rdfs:domain cacontology-educational:TeacherRole ;
    rdfs:range xsd:string .

cacontology-educational:supervisionDuration a owl:DatatypeProperty ;
    rdfs:label "supervision duration"@en ;
    rdfs:comment "Duration of post-release supervision in years."@en ;
    rdfs:domain cacontology-educational:PostReleaseSuperVision ;
    rdfs:range xsd:decimal .

cacontology-educational:takesPlaceIn a owl:ObjectProperty ;
    rdfs:label "takes place in"@en ;
    rdfs:comment "Links exploitation to specific classroom or location."@en ;
    rdfs:domain cacontology-educational:ClassroomBasedExploitation ;
    rdfs:range uco-location:Location .

cacontology-educational:targetAgeRange a owl:DatatypeProperty ;
    rdfs:label "target age range"@en ;
    rdfs:comment "Age range of targeted victims."@en ;
    rdfs:domain cacontology-educational:AgeSpecificTargeting ;
    rdfs:range xsd:string .

cacontology-educational:targetGender a owl:DatatypeProperty ;
    rdfs:label "target gender"@en ;
    rdfs:comment "Gender preference in victim targeting."@en ;
    rdfs:domain cacontology-educational:StudentVictimTargeting ;
    rdfs:range xsd:string .

cacontology-educational:targetingMethod a owl:DatatypeProperty ;
    rdfs:label "targeting method"@en ;
    rdfs:comment "Method used to identify and target victims."@en ;
    rdfs:domain cacontology-educational:StudentVictimTargeting ;
    rdfs:range xsd:string .

cacontology-educational:targetsAgeGroup a owl:ObjectProperty ;
    rdfs:label "targets age group"@en ;
    rdfs:comment "Links age-specific targeting to targeted age group."@en ;
    rdfs:domain cacontology-educational:AgeSpecificTargeting ;
    rdfs:range uco-identity:Person .

cacontology-educational:targetsStudent a owl:ObjectProperty ;
    rdfs:label "targets student"@en ;
    rdfs:comment "Links targeting activity to student victim."@en ;
    rdfs:domain cacontology-educational:StudentVictimTargeting ;
    rdfs:range uco-identity:Person .

cacontology-educational:targetsVictim a owl:ObjectProperty ;
    rdfs:label "targets victim"@en ;
    rdfs:comment "Links exploitation to victim targeting strategy."@en ;
    rdfs:domain cacontology-educational:EducatorPerpetratedExploitation ;
    rdfs:range cacontology-educational:StudentVictimTargeting .

cacontology-educational:timeOfDay a owl:DatatypeProperty ;
    rdfs:label "time of day"@en ;
    rdfs:comment "Time of day when exploitation occurred."@en ;
    rdfs:domain cacontology-educational:ClassroomExploitationContext ;
    rdfs:range xsd:string .

cacontology-educational:touchesVictim a owl:ObjectProperty ;
    rdfs:label "touches victim"@en ;
    rdfs:comment "Links physical contact to victim being touched."@en ;
    rdfs:domain cacontology-educational:PhysicalContactPattern ;
    rdfs:range uco-identity:Person .

cacontology-educational:triggersPoliceNotification a owl:ObjectProperty ;
    rdfs:label "triggers police notification"@en ;
    rdfs:comment "Links principal notification to police notification."@en ;
    rdfs:domain cacontology-educational:PrincipalNotification ;
    rdfs:range cacontology-educational:PoliceNotification .

cacontology-educational:usesImpersonation a owl:ObjectProperty ;
    rdfs:label "uses impersonation"@en ;
    rdfs:comment "Links exploitation to digital impersonation method used."@en,
        "Links exploitation to digital impersonation methods."@en ;
    rdfs:domain cacontology-educational:EducatorPerpetratedExploitation ;
    rdfs:range cacontology-educational:DigitalImpersonation .

cacontology-educational:usesMethod a owl:ObjectProperty ;
    rdfs:label "uses method"@en ;
    rdfs:comment "Links exploitation to specific methods used."@en ;
    rdfs:domain cacontology-educational:EducatorPerpetratedExploitation ;
    rdfs:range uco-action:Action .

cacontology-educational:victimCount a owl:DatatypeProperty ;
    rdfs:label "victim count"@en ;
    rdfs:comment "Number of victims involved in exploitation."@en ;
    rdfs:domain cacontology-educational:EducatorPerpetratedExploitation ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-educational:vulnerabilityFactor a owl:DatatypeProperty ;
    rdfs:label "vulnerability factor"@en ;
    rdfs:comment "Specific vulnerability factor exploited in targeting."@en ;
    rdfs:domain cacontology-educational:VulnerableStudentTargeting ;
    rdfs:range xsd:string .

cacontology-educational:witnessesExploitation a owl:ObjectProperty ;
    rdfs:label "witnesses exploitation"@en ;
    rdfs:comment "Links witness testimony to exploitation witnessed."@en ;
    rdfs:domain cacontology-educational:WitnessTestimonyEvidence ;
    rdfs:range cacontology-educational:EducatorPerpetratedExploitation .

cacontology-educational:writtenContent a owl:DatatypeProperty ;
    rdfs:label "written content"@en ;
    rdfs:comment "Content of written harassment evidence."@en ;
    rdfs:domain cacontology-educational:WrittenHarassmentEvidence ;
    rdfs:range xsd:string .

cacontology-educational:writtenOn a owl:ObjectProperty ;
    rdfs:label "written on"@en ;
    rdfs:comment "Links written harassment to academic material it was written on."@en ;
    rdfs:domain cacontology-educational:WrittenHarassment ;
    rdfs:range uco-observable:ObservableObject .

cacontology-educational:yearsOfExperience a owl:DatatypeProperty ;
    rdfs:label "years of experience"@en ;
    rdfs:comment "Years of teaching or educational experience."@en ;
    rdfs:domain cacontology-educational:EducatorRole ;
    rdfs:range xsd:decimal .

cacontology-enterprises:AccelerationistGroup a gufo:SubKind,
        owl:Class ;
    rdfs:label "Accelerationist Group"@en ;
    rdfs:comment "Extremist group with accelerationist goals seeking to hasten societal collapse through criminal activities including child exploitation."@en ;
    rdfs:subClassOf cacontology-enterprises:NihilisticViolentExtremismNetwork .

cacontology-enterprises:AlternateAccountSystemShape a sh:NodeShape ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 50 ;
            sh:message "Alt account system must have 1-50 accounts per member."@en ;
            sh:minInclusive 1 ;
            sh:path cacontology-enterprises:altAccountCount ] ;
    sh:targetClass cacontology-enterprises:AlternateAccountSystem .

cacontology-enterprises:AnimalAbuseCoercion a gufo:EventType,
        owl:Class ;
    rdfs:label "Animal Abuse Coercion"@en ;
    rdfs:comment "Coercion of victims to abuse pets or animals as part of exploitation and control."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-enterprises:ExtremeDegradationCoercion .

cacontology-enterprises:ChildExploitationEnterpriseShape a sh:NodeShape ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 10 ;
            sh:message "Enterprise must have 1-10 leaders."@en ;
            sh:minInclusive 1 ;
            sh:path cacontology-enterprises:leadershipCount ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 500 ;
            sh:message "Membership requirements must be 10-500 characters."@en ;
            sh:minLength 10 ;
            sh:path cacontology-enterprises:membershipRequirements ],
        [ sh:class cacontology-enterprises:EnterpriseHierarchy ;
            sh:maxCount 1 ;
            sh:message "Enterprise must have exactly one hierarchy."@en ;
            sh:minCount 1 ;
            sh:path cacontology-enterprises:hasHierarchy ] ;
    sh:targetClass cacontology-enterprises:ChildExploitationEnterprise .

cacontology-enterprises:CoercionSeverityConsistencyShape a sh:NodeShape ;
    sh:sparql [ sh:message "Extreme coercion severity must have degradation level of severe or extreme."@en ;
            sh:prefixes cacontology-enterprises: ;
            sh:select """
            SELECT $this WHERE {
                $this cacontology-enterprises:coercionSeverity "extreme" .
                $this rdf:type/rdfs:subClassOf* cacontology-enterprises:ExtremeDegradationCoercion .
                $this cacontology-enterprises:degradationLevel ?degradationLevel .
                FILTER (?degradationLevel NOT IN ("severe", "extreme", "inhuman"))
            }
        """ ] ;
    sh:targetClass cacontology-enterprises:SelfHarmCoercion .

cacontology-enterprises:ContentCurationAction a gufo:EventType,
        owl:Class ;
    rdfs:label "Content Curation Action"@en ;
    rdfs:comment "Action of curating and organizing exploitative content for enterprise purposes."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-enterprises:ContentCurrencyBusinessRule a sh:NodeShape ;
    sh:message "Content currency systems with 5+ items must support membership advancement."@en ;
    sh:rule [ sh:condition [ sh:property [ sh:minCount 5 ;
                            sh:path cacontology-enterprises:usesAsCurrency ] ] ;
            sh:consequence [ sh:property [ sh:hasValue cacontology-enterprises:MembershipAdvancementSystem ;
                            sh:path rdf:type ] ] ] ;
    sh:targetClass cacontology-enterprises:ContentCurrencySystem .

cacontology-enterprises:ContentCurrencySystemShape a sh:NodeShape ;
    sh:property [ sh:class cacontology-enterprises:Lorebook ;
            sh:message "Content currency system must use at least one lorebook as currency."@en ;
            sh:minCount 1 ;
            sh:path cacontology-enterprises:usesAsCurrency ] ;
    sh:targetClass cacontology-enterprises:ContentCurrencySystem .

cacontology-enterprises:ContentEditingProcessShape a sh:NodeShape ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "poor" "basic" "good" "professional" ) ;
            sh:maxCount 1 ;
            sh:message "Editing quality must be valid level."@en ;
            sh:path cacontology-enterprises:editingQuality ] ;
    sh:targetClass cacontology-enterprises:ContentEditingProcess .

cacontology-enterprises:ContentValueAssessmentShape a sh:NodeShape ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 10.0 ;
            sh:message "Content value must be between 0.0 and 10.0."@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-enterprises:contentValue ] ;
    sh:targetClass cacontology-enterprises:ContentValueAssessment .

cacontology-enterprises:CovertEmployeeOperationShape a sh:NodeShape ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "poor" "fair" "good" "excellent" ) ;
            sh:maxCount 1 ;
            sh:message "Evidence quality must be valid level."@en ;
            sh:path cacontology-enterprises:evidenceQuality ] ;
    sh:targetClass cacontology-enterprises:CovertEmployeeOperation .

cacontology-enterprises:CrossPlatformCoordinationShape a sh:NodeShape ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 20 ;
            sh:message "Cross-platform coordination must involve 2-20 platforms."@en ;
            sh:minInclusive 2 ;
            sh:path cacontology-enterprises:platformCount ] ;
    sh:targetClass cacontology-enterprises:CrossPlatformCoordination .

cacontology-enterprises:CyberExtremistNetwork a gufo:SubKind,
        owl:Class ;
    rdfs:label "Cyber Extremist Network"@en ;
    rdfs:comment "Extremist network operating primarily through digital platforms and encrypted communications."@en ;
    rdfs:subClassOf cacontology-enterprises:NihilisticViolentExtremismNetwork .

cacontology-enterprises:EncryptedChannelInfiltrationShape a sh:NodeShape ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 1095.0 ;
            sh:message "Infiltration duration must be between 1 and 1,095 days."@en ;
            sh:minInclusive 1.0 ;
            sh:path cacontology-enterprises:infiltrationDuration ] ;
    sh:targetClass cacontology-enterprises:EncryptedChannelInfiltration .

cacontology-enterprises:EncryptedChannelNetworkShape a sh:NodeShape ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "basic" "strong" "military_grade" ) ;
            sh:maxCount 1 ;
            sh:message "Encryption level must be valid level."@en ;
            sh:path cacontology-enterprises:encryptionLevel ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 100 ;
            sh:message "Encrypted network must have 1-100 channels."@en ;
            sh:minInclusive 1 ;
            sh:path cacontology-enterprises:channelCount ] ;
    sh:targetClass cacontology-enterprises:EncryptedChannelNetwork .

cacontology-enterprises:EnterpriseHierarchyBusinessRule a sh:NodeShape ;
    sh:message "Enterprises with 3+ leaders must have formal leadership structure."@en ;
    sh:rule [ sh:condition [ sh:property [ sh:minInclusive 3 ;
                            sh:path cacontology-enterprises:leadershipCount ] ] ;
            sh:consequence [ sh:property [ sh:hasValue cacontology-enterprises:LeadershipStructure ;
                            sh:path cacontology-enterprises:hasHierarchy ] ] ] ;
    sh:targetClass cacontology-enterprises:ChildExploitationEnterprise .

cacontology-enterprises:EnterpriseHierarchyShape a sh:NodeShape ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "simple" "moderate" "complex" "highly_complex" ) ;
            sh:maxCount 1 ;
            sh:message "Hierarchy complexity must be valid level."@en ;
            sh:path cacontology-enterprises:hierarchyComplexity ] ;
    sh:targetClass cacontology-enterprises:EnterpriseHierarchy .

cacontology-enterprises:EnterpriseLeadershipValidationShape a sh:NodeShape ;
    sh:property [ sh:class uco-identity:Person ;
            sh:message "Enterprise leader role must be held by at least one person."@en ;
            sh:minCount 1 ;
            sh:path [ sh:inversePath cacontology-enterprises:holdsLeadershipRole ] ] ;
    sh:targetNode cacontology-enterprises:EnterpriseLeaderRole .

cacontology-enterprises:ExtremeDegradationCoercionShape a sh:NodeShape ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "moderate" "severe" "extreme" "inhuman" ) ;
            sh:maxCount 1 ;
            sh:message "Degradation level must be valid level."@en ;
            sh:path cacontology-enterprises:degradationLevel ] ;
    sh:targetClass cacontology-enterprises:ExtremeDegradationCoercion .

cacontology-enterprises:GufoCoercionEventValidation a sh:NodeShape ;
    sh:sparql [ sh:message "Coercion events must create situations and involve participant objects."@en ;
            sh:prefixes gufo:,
                cacontology-enterprises:,
                uco-identity: ;
            sh:select """
            SELECT $this WHERE {
                $this rdf:type cacontology-enterprises:SelfHarmCoercion .
                $this rdf:type gufo:Event .
                FILTER NOT EXISTS {
                    {
                        $this cacontology-enterprises:createsVictimizationSituation ?situation .
                        ?situation rdf:type gufo:Situation .
                    }
                    UNION
                    {
                        ?person uco-identity:Person .
                        ?person cacontology-enterprises:participatesInCoercion $this .
                    }
                }
            }
        """ ] ;
    sh:targetClass cacontology-enterprises:SelfHarmCoercion .

cacontology-enterprises:GufoCollectionMembershipRule a sh:NodeShape ;
    sh:property [ sh:message "gUFO Collections must have at least one member."@en ;
            sh:minCount 1 ;
            sh:path [ sh:inversePath gufo:isCollectionMemberOf ] ] ;
    sh:targetClass gufo:Collection .

cacontology-enterprises:GufoComponentValidationShape a sh:NodeShape ;
    sh:property [ sh:class gufo:Object ;
            sh:message "Network components must be gUFO Objects."@en ;
            sh:path cacontology-enterprises:hasNetworkComponent ] ;
    sh:targetClass cacontology-enterprises:NihilisticViolentExtremismNetwork .

cacontology-enterprises:GufoEnterpriseStructureValidation a sh:NodeShape ;
    sh:sparql [ sh:message "Enterprise as functional complex must have proper part-whole relationships with its hierarchy."@en ;
            sh:prefixes gufo:,
                cacontology-enterprises: ;
            sh:select """
            SELECT $this WHERE {
                $this rdf:type cacontology-enterprises:ChildExploitationEnterprise .
                $this rdf:type gufo:FunctionalComplex .
                $this cacontology-enterprises:hasHierarchy ?hierarchy .
                FILTER NOT EXISTS {
                    ?hierarchy gufo:isComponentOf $this .
                }
            }
        """ ] ;
    sh:targetClass cacontology-enterprises:ChildExploitationEnterprise .

cacontology-enterprises:GufoEventDurationRule a sh:NodeShape ;
    sh:sparql [ sh:message "gUFO Events with both begin and end dates must have positive duration."@en ;
            sh:prefixes gufo: ;
            sh:select """
            SELECT $this WHERE {
                $this rdf:type gufo:Event .
                $this gufo:hasBeginPointInXSDDateTimeStamp ?begin .
                $this gufo:hasEndPointInXSDDateTimeStamp ?end .
                FILTER (?end <= ?begin)
            }
        """ ] ;
    sh:targetClass gufo:Event .

cacontology-enterprises:GufoEventTemporalExistenceRule a sh:NodeShape ;
    sh:property [ sh:message "gUFO Events must have at least one temporal beginning point."@en ;
            sh:minCount 1 ;
            sh:path [ sh:alternativePath ( gufo:hasBeginPointInXSDDateTimeStamp cacontology-enterprises:hasCoercionEventBeginDate cacontology-enterprises:hasInvestigationBeginDate ) ] ] ;
    sh:targetClass gufo:Event .

cacontology-enterprises:GufoEventTemporalShape a sh:NodeShape ;
    sh:property [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Coercion event must have at most one begin date."@en ;
            sh:path cacontology-enterprises:hasCoercionEventBeginDate ] ;
    sh:targetClass cacontology-enterprises:SelfHarmCoercion .

cacontology-enterprises:GufoEventTypeValidationShape a sh:NodeShape ;
    sh:property [ sh:hasValue owl:Class ;
            sh:message "gUFO Event Types must be OWL classes."@en ;
            sh:minCount 1 ;
            sh:path rdf:type ] ;
    sh:targetClass gufo:EventType .

cacontology-enterprises:GufoFunctionalComplexPartRule a sh:NodeShape ;
    sh:property [ sh:message "gUFO Functional Complexes must have at least one component or member."@en ;
            sh:minCount 1 ;
            sh:path [ sh:alternativePath ( gufo:isComponentOf cacontology-enterprises:hasNetworkComponent cacontology-enterprises:hasMember ) ] ] ;
    sh:targetClass gufo:FunctionalComplex .

cacontology-enterprises:GufoKindIdentityBusinessRule a sh:NodeShape ;
    sh:sparql [ sh:message "gUFO Kinds cannot be subclasses of other Kinds - violates identity principle."@en ;
            sh:prefixes gufo: ;
            sh:select """
            SELECT $this WHERE {
                $this rdf:type gufo:Kind .
                $this rdfs:subClassOf ?superKind .
                ?superKind rdf:type gufo:Kind .
                FILTER ($this != ?superKind)
            }
        """ ] ;
    sh:targetClass gufo:Kind .

cacontology-enterprises:GufoKindValidationShape a sh:NodeShape ;
    sh:property [ sh:hasValue owl:Class ;
            sh:message "gUFO Kinds must be OWL classes."@en ;
            sh:minCount 1 ;
            sh:path rdf:type ] ;
    sh:targetClass gufo:Kind .

cacontology-enterprises:GufoMembershipValidationShape a sh:NodeShape ;
    sh:property [ sh:class uco-identity:Person ;
            sh:message "Enterprise must have at least 2 members."@en ;
            sh:minCount 2 ;
            sh:path cacontology-enterprises:hasMember ] ;
    sh:targetClass cacontology-enterprises:ChildExploitationEnterprise .

cacontology-enterprises:GufoModeInherentRule a sh:NodeShape ;
    sh:property [ sh:class gufo:Object ;
            sh:message "gUFO Intrinsic Modes must inhere in at least one Object."@en ;
            sh:minCount 1 ;
            sh:path [ sh:inversePath [ sh:alternativePath ( gufo:hasMode cacontology-enterprises:hasEncryptionCapability cacontology-enterprises:hasRecruitmentMode ) ] ] ] ;
    sh:targetClass gufo:IntrinsicMode .

cacontology-enterprises:GufoModeValidationShape a sh:NodeShape ;
    sh:property [ sh:class gufo:IntrinsicMode ;
            sh:maxCount 1 ;
            sh:message "Encrypted network can have at most one encryption capability mode."@en ;
            sh:path cacontology-enterprises:hasEncryptionCapability ] ;
    sh:targetClass cacontology-enterprises:EncryptedChannelNetwork .

cacontology-enterprises:GufoNetworkCellValidation a sh:NodeShape ;
    sh:sparql [ sh:message "Network cells must be proper components of their parent network."@en ;
            sh:prefixes gufo:,
                cacontology-enterprises: ;
            sh:select """
            SELECT $this WHERE {
                $this rdf:type cacontology-enterprises:ExtremistNetworkCell .
                ?network cacontology-enterprises:hasNetworkCell $this .
                FILTER NOT EXISTS {
                    $this gufo:isComponentOf ?network .
                }
            }
        """ ] ;
    sh:targetClass cacontology-enterprises:ExtremistNetworkCell .

cacontology-enterprises:GufoObjectExistenceRule a sh:NodeShape ;
    sh:property [ sh:message "gUFO Objects should have temporal existence markers when applicable."@en ;
            sh:path [ sh:alternativePath ( gufo:hasBeginPointInXSDDateTimeStamp gufo:hasEndPointInXSDDateTimeStamp ) ] ] ;
    sh:targetClass gufo:Object .

cacontology-enterprises:GufoParticipationValidationShape a sh:NodeShape ;
    sh:property [ sh:class cacontology-enterprises:SelfHarmCoercion ;
            sh:message "Person participation in coercion must link to valid coercion events."@en ;
            sh:path cacontology-enterprises:participatesInCoercion ],
        [ sh:class cacontology-enterprises:ContentBasedRecruitment ;
            sh:message "Person participation in recruitment must link to valid recruitment events."@en ;
            sh:path cacontology-enterprises:participatesInRecruitment ] ;
    sh:targetClass uco-identity:Person .

cacontology-enterprises:GufoQualityInherentRule a sh:NodeShape ;
    sh:property [ sh:class gufo:Object ;
            sh:message "gUFO Qualities must inhere in at least one Object."@en ;
            sh:minCount 1 ;
            sh:path [ sh:inversePath [ sh:alternativePath ( gufo:hasQuality cacontology-enterprises:hasNetworkNotorietyQuality ) ] ] ] ;
    sh:targetClass gufo:Quality .

cacontology-enterprises:GufoQualityValidationShape a sh:NodeShape ;
    sh:property [ sh:class gufo:Quality ;
            sh:maxCount 1 ;
            sh:message "Network can have at most one notoriety quality."@en ;
            sh:path cacontology-enterprises:hasNetworkNotorietyQuality ] ;
    sh:targetClass cacontology-enterprises:NihilisticViolentExtremismNetwork .

cacontology-enterprises:GufoRelatorMediationRule a sh:NodeShape ;
    sh:sparql [ sh:message "gUFO Relators must mediate relationships between at least two distinct objects."@en ;
            sh:prefixes gufo: ;
            sh:select """
            SELECT $this WHERE {
                $this rdf:type gufo:Relator .
                FILTER NOT EXISTS {
                    $this gufo:mediates ?obj1 .
                    $this gufo:mediates ?obj2 .
                    FILTER (?obj1 != ?obj2)
                }
            }
        """ ] ;
    sh:targetClass gufo:Relator .

cacontology-enterprises:GufoRelatorValidationShape a sh:NodeShape ;
    sh:property [ sh:class gufo:Relator ;
            sh:message "Enterprise must have at least one leadership relator."@en ;
            sh:minCount 1 ;
            sh:path cacontology-enterprises:hasLeadershipRelation ],
        [ sh:class gufo:Relator ;
            sh:message "Exploitation enterprise must have at least one exploitation relator."@en ;
            sh:minCount 1 ;
            sh:path cacontology-enterprises:hasExploitationRelation ] ;
    sh:targetClass cacontology-enterprises:ChildExploitationEnterprise .

cacontology-enterprises:GufoRoleAntiRigidityRule a sh:NodeShape ;
    sh:sparql [ sh:message "gUFO Roles are anti-rigid and cannot be essential to their instances."@en ;
            sh:prefixes gufo: ;
            sh:select """
            SELECT $this WHERE {
                $this rdf:type gufo:Role .
                $this rdfs:subClassOf ?kind .
                ?kind rdf:type gufo:Kind .
            }
        """ ] ;
    sh:targetClass gufo:Role .

cacontology-enterprises:GufoRoleInstantiationValidation a sh:NodeShape ;
    sh:sparql [ sh:message "Enterprise roles must be properly instantiated by persons within enterprise context."@en ;
            sh:prefixes gufo:,
                cacontology-enterprises:,
                uco-identity: ;
            sh:select """
            SELECT $this WHERE {
                $this rdf:type cacontology-enterprises:EnterpriseRole .
                $this rdf:type gufo:Role .
                FILTER NOT EXISTS {
                    ?person rdf:type uco-identity:Person .
                    ?person ?roleProperty $this .
                    ?enterprise cacontology-enterprises:hasMember ?person .
                    ?enterprise rdf:type cacontology-enterprises:ChildExploitationEnterprise .
                }
            }
        """ ] ;
    sh:targetClass cacontology-enterprises:EnterpriseRole .

cacontology-enterprises:GufoRoleValidationShape a sh:NodeShape ;
    sh:property [ sh:hasValue owl:Class ;
            sh:message "gUFO Roles must be OWL classes."@en ;
            sh:minCount 1 ;
            sh:path rdf:type ] ;
    sh:targetClass gufo:Role .

cacontology-enterprises:GufoSituationFactualRule a sh:NodeShape ;
    sh:sparql [ sh:message "gUFO Situations must be factual and include at least one object or event."@en ;
            sh:prefixes gufo: ;
            sh:select """
            SELECT $this WHERE {
                $this rdf:type gufo:Situation .
                FILTER NOT EXISTS {
                    { ?object gufo:participatesIn $this . }
                    UNION
                    { ?event gufo:occursDuring $this . }
                    UNION  
                    { $this gufo:includesObject ?object . }
                    UNION
                    { $this gufo:includesEvent ?event . }
                }
            }
        """ ] ;
    sh:targetClass gufo:Situation .

cacontology-enterprises:GufoSituationValidationShape a sh:NodeShape ;
    sh:property [ sh:class gufo:Situation ;
            sh:message "Enterprise must operate in valid gUFO Situations."@en ;
            sh:path cacontology-enterprises:operatesInSituation ] ;
    sh:targetClass cacontology-enterprises:ChildExploitationEnterprise .

cacontology-enterprises:GufoTemporalConsistencyShape a sh:NodeShape ;
    sh:property [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Enterprise must have at most one operational begin date."@en ;
            sh:path cacontology-enterprises:hasOperationalBeginDate ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Enterprise must have at most one operational end date."@en ;
            sh:path cacontology-enterprises:hasOperationalEndDate ] ;
    sh:sparql [ sh:message "Operational end date must be after begin date."@en ;
            sh:prefixes cacontology-enterprises: ;
            sh:select """
            SELECT $this WHERE {
                $this cacontology-enterprises:hasOperationalBeginDate ?begin .
                $this cacontology-enterprises:hasOperationalEndDate ?end .
                FILTER (?end <= ?begin)
            }
        """ ] ;
    sh:targetClass cacontology-enterprises:ChildExploitationEnterprise .

cacontology-enterprises:GufoTemporalConsistencyValidation a sh:NodeShape ;
    sh:sparql [ sh:message "Enterprise temporal boundaries must be consistent with member participation events."@en ;
            sh:prefixes gufo:,
                cacontology-enterprises: ;
            sh:select """
            SELECT $this WHERE {
                $this cacontology-enterprises:hasOperationalBeginDate ?begin .
                $this cacontology-enterprises:hasOperationalEndDate ?end .
                $this cacontology-enterprises:hasMember ?member .
                ?member cacontology-enterprises:participatesInCoercion ?event .
                ?event cacontology-enterprises:hasCoercionEventBeginDate ?eventDate .
                FILTER (?eventDate < ?begin || ?eventDate > ?end)
            }
        """ ] ;
    sh:targetClass cacontology-enterprises:ChildExploitationEnterprise .

cacontology-enterprises:GufoVictimizationSituationShape a sh:NodeShape ;
    sh:property [ sh:class gufo:Situation ;
            sh:message "Self-harm coercion must create at least one victimization situation."@en ;
            sh:minCount 1 ;
            sh:path cacontology-enterprises:createsVictimizationSituation ] ;
    sh:targetClass cacontology-enterprises:SelfHarmCoercion .

cacontology-enterprises:IdentityCorrelationAnalysisShape a sh:NodeShape ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Identity correlation accuracy must be between 0.0 and 1.0."@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-enterprises:identityCorrelationAccuracy ] ;
    sh:targetClass cacontology-enterprises:IdentityCorrelationAnalysis .

cacontology-enterprises:InnerCoreAccessValidationShape a sh:NodeShape ;
    sh:property [ sh:class uco-identity:Person ;
            sh:message "Inner core must have at least one participating member."@en ;
            sh:minCount 1 ;
            sh:path [ sh:inversePath cacontology-enterprises:participatesInInnerCore ] ] ;
    sh:targetClass cacontology-enterprises:InnerCore .

cacontology-enterprises:InnerCoreMemberRole a gufo:Role,
        owl:Class ;
    rdfs:label "Inner Core Member Role"@en ;
    rdfs:comment "Role of member within enterprise inner core with access to restricted channels and advanced operations."@en ;
    rdfs:subClassOf cacontology-enterprises:EnterpriseRole .

cacontology-enterprises:InnerCoreShape a sh:NodeShape ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 50 ;
            sh:message "Inner core must have 1-50 members."@en ;
            sh:minInclusive 1 ;
            sh:path cacontology-enterprises:innerCoreSize ] ;
    sh:targetClass cacontology-enterprises:InnerCore .

cacontology-enterprises:InvestigationQualityBusinessRule a sh:NodeShape ;
    sh:message "High accuracy identity correlation (90%+) must produce good or excellent evidence quality."@en ;
    sh:rule [ sh:condition [ sh:property [ sh:minInclusive 0.9 ;
                            sh:path cacontology-enterprises:identityCorrelationAccuracy ] ] ;
            sh:consequence [ sh:property [ sh:in ( "good" "excellent" ) ;
                            sh:path cacontology-enterprises:evidenceQuality ] ] ] ;
    sh:targetClass cacontology-enterprises:IdentityCorrelationAnalysis .

cacontology-enterprises:LorebookContentValidationShape a sh:NodeShape ;
    sh:property [ sh:class uco-observable:ObservableObject ;
            sh:message "Lorebook must contain at least one piece of victim content."@en ;
            sh:minCount 1 ;
            sh:path cacontology-enterprises:containsVictimContent ] ;
    sh:targetClass cacontology-enterprises:Lorebook .

cacontology-enterprises:LorebookShape a sh:NodeShape ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 10000 ;
            sh:message "Lorebook must contain 1-10,000 items."@en ;
            sh:minInclusive 1 ;
            sh:path cacontology-enterprises:contentVolumeItems ],
        [ sh:datatype xsd:string ;
            sh:in ( "basic" "moderate" "advanced" "professional" ) ;
            sh:maxCount 1 ;
            sh:message "Compilation complexity must be valid level."@en ;
            sh:path cacontology-enterprises:compilationComplexity ],
        [ sh:datatype xsd:string ;
            sh:in ( "low" "moderate" "high" "notorious" ) ;
            sh:maxCount 1 ;
            sh:message "Content notoriety must be valid level."@en ;
            sh:path cacontology-enterprises:contentNotoriety ] ;
    sh:targetClass cacontology-enterprises:Lorebook .

cacontology-enterprises:MembershipAdvancementSystemShape a sh:NodeShape ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 500 ;
            sh:message "Advancement criteria must be 10-500 characters."@en ;
            sh:minLength 10 ;
            sh:path cacontology-enterprises:advancementCriteria ] ;
    sh:targetClass cacontology-enterprises:MembershipAdvancementSystem .

cacontology-enterprises:MembershipTierShape a sh:NodeShape ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "novice" "member" "advanced" "inner_core" "leader" ) ;
            sh:maxCount 1 ;
            sh:message "Membership level must be valid tier."@en ;
            sh:path cacontology-enterprises:membershipLevel ],
        [ sh:datatype xsd:string ;
            sh:in ( "restricted" "basic" "enhanced" "privileged" "full" ) ;
            sh:maxCount 1 ;
            sh:message "Access level must be valid level."@en ;
            sh:path cacontology-enterprises:accessLevel ] ;
    sh:targetClass cacontology-enterprises:MembershipTier .

cacontology-enterprises:MentalHealthVulnerabilityTargeting a gufo:EventType,
        owl:Class ;
    rdfs:label "Mental Health Vulnerability Targeting"@en ;
    rdfs:comment "Targeting of minors with mental health challenges and psychological vulnerabilities."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-enterprises:VulnerablePopulationTargeting .

cacontology-enterprises:NameCuttingCoercion a gufo:EventType,
        owl:Class ;
    rdfs:label "Name Cutting Coercion"@en ;
    rdfs:comment "Coercion of victims to cut enterprise member names into their bodies as ownership marking."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-enterprises:SelfHarmCoercion .

cacontology-enterprises:NetworkMappingInvestigationShape a sh:NodeShape ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Network mapping completeness must be between 0.0 and 1.0."@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-enterprises:networkMappingCompleteness ] ;
    sh:targetClass cacontology-enterprises:NetworkMappingInvestigation .

cacontology-enterprises:NetworkSizeConsistencyShape a sh:NodeShape ;
    sh:sparql [ sh:message "Network size must be consistent with inner core size and leadership count."@en ;
            sh:prefixes cacontology-enterprises: ;
            sh:select """
            SELECT $this WHERE {
                $this cacontology-enterprises:networkSize ?networkSize .
                $this cacontology-enterprises:operatesEnterprise ?enterprise .
                ?enterprise cacontology-enterprises:hasInnerCore ?innerCore .
                ?innerCore cacontology-enterprises:innerCoreSize ?innerCoreSize .
                ?enterprise cacontology-enterprises:leadershipCount ?leadershipCount .
                FILTER (?networkSize < (?innerCoreSize + ?leadershipCount))
            }
        """ ] ;
    sh:targetClass cacontology-enterprises:NihilisticViolentExtremismNetwork .

cacontology-enterprises:NihilisticViolentExtremismNetworkShape a sh:NodeShape ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:message "NVE network must have at least 2 members."@en ;
            sh:minInclusive 2 ;
            sh:path cacontology-enterprises:networkSize ],
        [ sh:datatype xsd:string ;
            sh:in ( "local" "national" "international" ) ;
            sh:maxCount 1 ;
            sh:message "Operational scope must be local, national, or international."@en ;
            sh:path cacontology-enterprises:operationalScope ],
        [ sh:datatype xsd:string ;
            sh:in ( "nihilistic" "accelerationist" "anarchist" "mixed" ) ;
            sh:maxCount 1 ;
            sh:message "Ideological framework must be recognized extremist ideology."@en ;
            sh:path cacontology-enterprises:ideologicalFramework ],
        [ sh:datatype xsd:string ;
            sh:in ( "low" "moderate" "high" "international" ) ;
            sh:maxCount 1 ;
            sh:message "Network notoriety must be valid level."@en ;
            sh:path cacontology-enterprises:networkNotoriety ] ;
    sh:targetClass cacontology-enterprises:NihilisticViolentExtremismNetwork .

cacontology-enterprises:PlatformCoordinationConsistencyShape a sh:NodeShape ;
    sh:sparql [ sh:message "Platform count must be consistent with encrypted channel count."@en ;
            sh:prefixes cacontology-enterprises: ;
            sh:select """
            SELECT $this WHERE {
                $this cacontology-enterprises:platformCount ?platformCount .
                ?enterprise cacontology-enterprises:coordinatesAcrossPlatforms $this .
                ?enterprise cacontology-enterprises:utilizesEncryptedChannels ?encryptedNetwork .
                ?encryptedNetwork cacontology-enterprises:channelCount ?channelCount .
                FILTER (?channelCount < ?platformCount)
            }
        """ ] ;
    sh:targetClass cacontology-enterprises:CrossPlatformCoordination .

cacontology-enterprises:PlatformMigrationStrategy a gufo:EventType,
        owl:Class ;
    rdfs:label "Platform Migration Strategy"@en ;
    rdfs:comment "Strategy for migrating operations between platforms when accounts are terminated or restricted."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-enterprises:PrivateGroupManagement a gufo:EventType,
        owl:Class ;
    rdfs:label "Private Group Management"@en ;
    rdfs:comment "Management of private groups and channels with restricted access for enterprise operations."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-enterprises:RecruitmentHierarchy a gufo:SubKind,
        owl:Class ;
    rdfs:label "Recruitment Hierarchy"@en ;
    rdfs:comment "Hierarchy governing recruitment of new members based on content quality and notoriety."@en ;
    rdfs:subClassOf cacontology-enterprises:EnterpriseHierarchy .

cacontology-enterprises:SelfHarmCoercionShape a sh:NodeShape ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "moderate" "severe" "extreme" "life_threatening" ) ;
            sh:maxCount 1 ;
            sh:message "Coercion severity must be valid level."@en ;
            sh:path cacontology-enterprises:coercionSeverity ],
        [ sh:datatype xsd:string ;
            sh:in ( "cutting" "burning" "bruising" "other" ) ;
            sh:maxCount 1 ;
            sh:message "Self-harm type must be valid type."@en ;
            sh:path cacontology-enterprises:selfHarmType ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Coercion effectiveness must be between 0.0 and 1.0."@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-enterprises:coercionEffectiveness ] ;
    sh:targetClass cacontology-enterprises:SelfHarmCoercion .

cacontology-enterprises:SelfImmolationCoercion a gufo:EventType,
        owl:Class ;
    rdfs:label "Self Immolation Coercion"@en ;
    rdfs:comment "Coercion of victims to set themselves on fire or engage in burning activities."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-enterprises:SelfHarmCoercion .

cacontology-enterprises:SiblingAbuseCoercion a gufo:EventType,
        owl:Class ;
    rdfs:label "Sibling Abuse Coercion"@en ;
    rdfs:comment "Coercion of victims to abuse siblings or family members as part of exploitation."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-enterprises:ExtremeDegradationCoercion .

cacontology-enterprises:SocialEngineeringCampaignShape a sh:NodeShape ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "basic" "intermediate" "advanced" "sophisticated" ) ;
            sh:maxCount 1 ;
            sh:message "Social engineering complexity must be valid level."@en ;
            sh:path cacontology-enterprises:socialEngineeringComplexity ] ;
    sh:targetClass cacontology-enterprises:SocialEngineeringCampaign .

cacontology-enterprises:SuicideCoercion a gufo:EventType,
        owl:Class ;
    rdfs:label "Suicide Coercion"@en ;
    rdfs:comment "Coercion of victims toward suicide as ultimate form of exploitation and control."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-enterprises:ExtremeDegradationCoercion .

cacontology-enterprises:TrustBuildingProcessShape a sh:NodeShape ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 365.0 ;
            sh:message "Trust building duration must be between 0.1 and 365 days."@en ;
            sh:minInclusive 0.1 ;
            sh:path cacontology-enterprises:trustBuildingDuration ] ;
    sh:targetClass cacontology-enterprises:TrustBuildingProcess .

cacontology-enterprises:VictimContentCompilation a gufo:SubKind,
        owl:Class ;
    rdfs:label "Victim Content Compilation"@en ;
    rdfs:comment "Organized compilation of content obtained from specific victim through exploitation and coercion."@en ;
    rdfs:subClassOf cacontology-enterprises:Lorebook .

cacontology-enterprises:VictimProfileDevelopment a gufo:EventType,
        owl:Class ;
    rdfs:label "Victim Profile Development"@en ;
    rdfs:comment "Development of detailed victim profiles including vulnerabilities and exploitation opportunities."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-enterprises:VulnerablePopulationTargetingShape a sh:NodeShape ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "mental_health" "isolation" "trauma" "substance_abuse" "financial" "social" ) ;
            sh:maxCount 1 ;
            sh:message "Vulnerability type must be valid type."@en ;
            sh:path cacontology-enterprises:vulnerabilityType ],
        [ sh:datatype xsd:string ;
            sh:in ( "broad" "focused" "precise" "surgical" ) ;
            sh:maxCount 1 ;
            sh:message "Targeting precision must be valid level."@en ;
            sh:path cacontology-enterprises:targetingPrecision ] ;
    sh:targetClass cacontology-enterprises:VulnerablePopulationTargeting .

cacontology-enterprises:buildsVictimTrust a owl:ObjectProperty ;
    rdfs:label "builds victim trust"@en ;
    rdfs:comment "Links social engineering to trust building process."@en ;
    rdfs:domain cacontology-enterprises:SocialEngineeringCampaign ;
    rdfs:range cacontology-enterprises:TrustBuildingProcess .

cacontology-enterprises:coercesIntoSelfHarm a owl:ObjectProperty ;
    rdfs:label "coerces into self harm"@en ;
    rdfs:comment "Links enterprise role to victims coerced into self-harm."@en ;
    rdfs:domain cacontology-enterprises:EnterpriseRole ;
    rdfs:range uco-identity:Person .

cacontology-enterprises:compilesContent a owl:ObjectProperty ;
    rdfs:label "compiles content"@en ;
    rdfs:comment "Links compilation system to content it compiles."@en ;
    rdfs:domain cacontology-enterprises:ContentCompilationSystem ;
    rdfs:range uco-observable:ObservableObject .

cacontology-enterprises:coordinatesAcrossPlatforms a owl:ObjectProperty ;
    rdfs:label "coordinates across platforms"@en ;
    rdfs:comment "Links enterprise to cross-platform coordination activities."@en ;
    rdfs:domain cacontology-enterprises:ChildExploitationEnterprise ;
    rdfs:range cacontology-enterprises:CrossPlatformCoordination .

cacontology-enterprises:coordinatesActivities a owl:ObjectProperty ;
    rdfs:label "coordinates activities"@en ;
    rdfs:comment "Links coordinator to activities they coordinate."@en ;
    rdfs:domain cacontology-enterprises:CoordinatorRole ;
    rdfs:range uco-action:Action .

cacontology-enterprises:correlatesEvidence a owl:ObjectProperty ;
    rdfs:label "correlates evidence"@en ;
    rdfs:comment "Links investigation to evidence correlation performed."@en ;
    rdfs:domain cacontology-enterprises:CrossPlatformEvidenceCorrelation ;
    rdfs:range uco-observable:ObservableObject .

cacontology-enterprises:exploitsVictim a owl:ObjectProperty ;
    rdfs:label "exploits victim"@en ;
    rdfs:comment "Links enterprise role to victims they exploit."@en ;
    rdfs:domain cacontology-enterprises:EnterpriseRole ;
    rdfs:range uco-identity:Person .

cacontology-enterprises:hasFormationEvent a owl:ObjectProperty ;
    rdfs:label "has formation event"@en ;
    rdfs:comment "Links network to the event of its formation."@en ;
    rdfs:domain cacontology-enterprises:NihilisticViolentExtremismNetwork ;
    rdfs:range gufo:Event .

cacontology-enterprises:hasInnerCore a owl:ObjectProperty ;
    rdfs:label "has inner core"@en ;
    rdfs:comment "Links enterprise to its inner core structure."@en ;
    rdfs:domain cacontology-enterprises:ChildExploitationEnterprise ;
    rdfs:range cacontology-enterprises:InnerCore .

cacontology-enterprises:hasNetworkCell a owl:ObjectProperty ;
    rdfs:label "has network cell"@en ;
    rdfs:comment "Links extremist network to its operational cells."@en ;
    rdfs:domain cacontology-enterprises:NihilisticViolentExtremismNetwork ;
    rdfs:range cacontology-enterprises:ExtremistNetworkCell .

cacontology-enterprises:hasOperationalPeriod a owl:ObjectProperty ;
    rdfs:label "has operational period"@en ;
    rdfs:comment "Links enterprise to its operational time period."@en ;
    rdfs:domain cacontology-enterprises:ChildExploitationEnterprise ;
    rdfs:range gufo:Event .

cacontology-enterprises:historicallyDependsOn a owl:ObjectProperty ;
    rdfs:label "historically depends on"@en ;
    rdfs:comment "Captures historical dependence between enterprise events and prior enabling events."@en ;
    rdfs:domain gufo:Event ;
    rdfs:range gufo:Event .

cacontology-enterprises:identifiesNetworkMember a owl:ObjectProperty ;
    rdfs:label "identifies network member"@en ;
    rdfs:comment "Links investigation to network members identified."@en ;
    rdfs:domain cacontology-enterprises:IdentityCorrelationAnalysis ;
    rdfs:range uco-identity:Person .

cacontology-enterprises:infiltratesNetwork a owl:ObjectProperty ;
    rdfs:label "infiltrates network"@en ;
    rdfs:comment "Links covert operation to network being infiltrated."@en ;
    rdfs:domain cacontology-enterprises:CovertEmployeeOperation ;
    rdfs:range cacontology-enterprises:NihilisticViolentExtremismNetwork .

cacontology-enterprises:maintainsAltAccounts a owl:ObjectProperty ;
    rdfs:label "maintains alt accounts"@en ;
    rdfs:comment "Links enterprise member to alternate accounts they maintain."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range cacontology-enterprises:AlternateAccountSystem .

cacontology-enterprises:managesPrivateGroups a owl:ObjectProperty ;
    rdfs:label "manages private groups"@en ;
    rdfs:comment "Links coordinator to private groups they manage."@en ;
    rdfs:domain cacontology-enterprises:CoordinatorRole ;
    rdfs:range uco-observable:ObservableObject .

cacontology-enterprises:mapsNetworkStructure a owl:ObjectProperty ;
    rdfs:label "maps network structure"@en ;
    rdfs:comment "Links mapping investigation to network structure mapped."@en ;
    rdfs:domain cacontology-enterprises:NetworkMappingInvestigation ;
    rdfs:range cacontology-enterprises:EnterpriseHierarchy .

cacontology-enterprises:operatesEnterprise a owl:ObjectProperty ;
    rdfs:label "operates enterprise"@en ;
    rdfs:comment "Links network to child exploitation enterprise it operates."@en ;
    rdfs:domain cacontology-enterprises:NihilisticViolentExtremismNetwork ;
    rdfs:range cacontology-enterprises:ChildExploitationEnterprise .

cacontology-enterprises:producesLorebook a owl:ObjectProperty ;
    rdfs:label "produces lorebook"@en ;
    rdfs:comment "Links content producer to lorebook they create."@en ;
    rdfs:domain cacontology-enterprises:ContentProducerRole ;
    rdfs:range cacontology-enterprises:Lorebook .

cacontology-enterprises:recruitsMembers a owl:ObjectProperty ;
    rdfs:label "recruits members"@en ;
    rdfs:comment "Links recruitment specialist to members they recruit."@en ;
    rdfs:domain cacontology-enterprises:RecruitmentSpecialistRole ;
    rdfs:range uco-identity:Person .

cacontology-enterprises:targetsVulnerability a owl:ObjectProperty ;
    rdfs:label "targets vulnerability"@en ;
    rdfs:comment "Links targeting action to specific vulnerability exploited."@en ;
    rdfs:domain cacontology-enterprises:VulnerablePopulationTargeting ;
    rdfs:range uco-core:UcoObject .

cacontology-enterprises:utilizesEncryptedChannels a owl:ObjectProperty ;
    rdfs:label "utilizes encrypted channels"@en ;
    rdfs:comment "Links enterprise to encrypted channel networks used."@en ;
    rdfs:domain cacontology-enterprises:ChildExploitationEnterprise ;
    rdfs:range cacontology-enterprises:EncryptedChannelNetwork .

cacontology-forensics:AcquisitionPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Acquisition Phase"@en ;
    rdfs:comment "Phase involving forensic acquisition of digital evidence."@en ;
    rdfs:subClassOf cacontology-forensics:ForensicAcquisitionAction .

cacontology-forensics:AdvancedSearchTechnique a owl:Class ;
    rdfs:label "Advanced Search Technique"@en ;
    rdfs:comment "Specialized search techniques for locating digital evidence."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-forensics:AnalysisPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Analysis Phase"@en ;
    rdfs:comment "Phase involving detailed forensic analysis of acquired evidence."@en ;
    rdfs:subClassOf cacontology-forensics:TimelineAnalysisAction .

cacontology-forensics:AutomatedContentAnalysisShape a sh:NodeShape ;
    rdfs:label "Automated Content Analysis Shape"@en ;
    rdfs:comment "Validation shape for automated content analysis instances."@en ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 100.0 ;
            sh:message "Automation percentage must be between 0.0 and 100.0."@en ;
            sh:minCount 1 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-forensics:automationPercentage ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 1000000.0 ;
            sh:message "Processing speed must be between 1.0 and 1000000.0 files per hour."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1.0 ;
            sh:path cacontology-forensics:processingSpeed ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "False positive rate must be between 0.0 and 1.0."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-forensics:falsePositiveRate ] ;
    sh:targetClass cacontology-forensics:AutomatedContentAnalysis .

cacontology-forensics:BehavioralFingerprintingShape a sh:NodeShape ;
    rdfs:label "Behavioral Fingerprinting Shape"@en ;
    rdfs:comment "Validation shape for behavioral fingerprinting instances."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Behavioral fingerprinting must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ] ;
    sh:targetClass cacontology-forensics:BehavioralFingerprinting .

cacontology-forensics:ChainOfCustodyActionShape a sh:NodeShape ;
    rdfs:label "Chain of Custody Action Shape"@en ;
    sh:property [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Chain of custody transfer must have exactly one begin timestamp (gUFO temporal)"@en ;
            sh:minCount 1 ;
            sh:path gufo:hasBeginPointInXSDDateTimeStamp ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Chain of custody transfer must have at most one end timestamp (gUFO temporal)"@en ;
            sh:path gufo:hasEndPointInXSDDateTimeStamp ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "A chain of custody action must have exactly one start time"@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ],
        [ sh:class uco-core:UcoObject ;
            sh:maxCount 1 ;
            sh:message "A chain of custody action must specify exactly one transferring party"@en ;
            sh:minCount 1 ;
            sh:path cacontology-forensics:custodyTransferredFrom ],
        [ sh:class uco-core:UcoObject ;
            sh:maxCount 1 ;
            sh:message "A chain of custody action must specify exactly one receiving party"@en ;
            sh:minCount 1 ;
            sh:path cacontology-forensics:custodyTransferredTo ],
        [ sh:datatype xsd:string ;
            sh:in ( "analysis" "storage" "transport" "examination" "disposal" "court-presentation" ) ;
            sh:maxCount 1 ;
            sh:message "Custody reason must be from allowed list: analysis, storage, transport, examination, disposal, court-presentation"@en ;
            sh:minCount 1 ;
            sh:path cacontology-forensics:custodyReason ],
        [ sh:datatype xsd:string ;
            sh:in ( "maintained" "compromised" "unknown" ) ;
            sh:maxCount 1 ;
            sh:message "Custody integrity must be maintained, compromised, or unknown (gUFO quality aspect)"@en ;
            sh:path cacontology-forensics:custodyIntegrity ] ;
    sh:targetClass cacontology-forensics:ChainOfCustodyAction .

cacontology-forensics:ChainOfCustodyIntegrityBusinessRule a sh:NodeShape ;
    sh:sparql [ sh:message "Chain of custody gaps compromise evidence integrity"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/forensics#"^^xsd:anyURI ;
                            sh:prefix "cacontology-forensics" ],
                        [ sh:namespace "https://ontology.unifiedcyberontology.org/uco/core/"^^xsd:anyURI ;
                            sh:prefix "uco-core" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this uco-core:startTime ?thisStart .
                ?previousAction uco-core:endTime ?previousEnd .
                ?previousAction cacontology-forensics:custodyTransferredTo ?transferee .
                $this cacontology-forensics:custodyTransferredFrom ?transferee .
                FILTER (?thisStart > (?previousEnd + "PT1H"^^xsd:duration))
            }
        """ ] ;
    sh:targetClass cacontology-forensics:ChainOfCustodyAction .

cacontology-forensics:ChainOfCustodyTemporalOrderingShape a sh:NodeShape ;
    sh:sparql [ sh:message "Chain of custody actions must maintain temporal ordering (gUFO temporal succession)"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/forensics#"^^xsd:anyURI ;
                            sh:prefix "cacontology-forensics" ],
                        [ sh:namespace "https://ontology.unifiedcyberontology.org/uco/core/"^^xsd:anyURI ;
                            sh:prefix "uco-core" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this uco-core:startTime ?thisTime .
                ?previousAction uco-core:endTime ?previousTime .
                ?previousAction cacontology-forensics:custodyTransferredTo ?transferee .
                $this cacontology-forensics:custodyTransferredFrom ?transferee .
                FILTER (?thisTime < ?previousTime)
            }
        """ ] ;
    sh:targetClass cacontology-forensics:ChainOfCustodyAction .

cacontology-forensics:CrossPlatformCorrelationShape a sh:NodeShape ;
    rdfs:label "Cross Platform Correlation Shape"@en ;
    rdfs:comment "Validation shape for cross platform correlation instances."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Cross platform correlation must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ],
        [ sh:class uco-tool:Tool ;
            sh:message "Cross platform correlation must specify at least one analysis tool."@en ;
            sh:minCount 1 ;
            sh:path uco-action:usesTool ] ;
    sh:targetClass cacontology-forensics:CrossPlatformCorrelation .

cacontology-forensics:CrossReferenceAnalysis a owl:Class ;
    rdfs:label "Cross Reference Analysis"@en ;
    rdfs:comment "Cross-referencing of digital evidence across multiple cases and international databases for victim identification."@en ;
    rdfs:subClassOf cacontology-forensics:VictimIdentificationProcess .

cacontology-forensics:CustodyDocumentShape a sh:NodeShape ;
    rdfs:label "Custody Document Shape"@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "A custody document must have exactly one creation time"@en ;
            sh:minCount 1 ;
            sh:path uco-core:createdTime ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Custody document must have creation timestamp (gUFO temporal)"@en ;
            sh:minCount 1 ;
            sh:path gufo:hasBeginPointInXSDDateTimeStamp ],
        [ sh:datatype xsd:string ;
            sh:in ( "evidence-receipt" "custody-transfer" "examination-log" "disposal-certificate" ) ;
            sh:maxCount 1 ;
            sh:message "Document type must be evidence-receipt, custody-transfer, examination-log, or disposal-certificate"@en ;
            sh:path cacontology-forensics:documentType ],
        [ sh:datatype xsd:string ;
            sh:in ( "draft" "final" "archived" "destroyed" ) ;
            sh:maxCount 1 ;
            sh:message "Document status must be draft, final, archived, or destroyed (gUFO mode aspect)"@en ;
            sh:path cacontology-forensics:documentStatus ] ;
    sh:targetClass cacontology-forensics:CustodyDocument .

cacontology-forensics:DataQualityShape a sh:NodeShape ;
    rdfs:label "Data Quality Shape"@en ;
    rdfs:comment "Validates data quality for forensic entities."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Label should be between 5 and 200 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 5 ;
            sh:path rdfs:label ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 1000 ;
            sh:message "Comment should be between 10 and 1000 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 10 ;
            sh:path rdfs:comment ] ;
    sh:targetClass cacontology-forensics:ForensicAcquisitionAction,
        cacontology-forensics:ForensicImage,
        cacontology-forensics:MassDigitalEvidenceProcessing .

cacontology-forensics:ElectronicStorageDeviceDetectionShape a sh:NodeShape ;
    rdfs:label "Electronic Storage Device Detection Shape"@en ;
    rdfs:comment "Validation shape for electronic storage device detection instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "k9_detection" "manual_search" "electronic_scanning" "x_ray_scanning" "metal_detection" "thermal_imaging" ) ;
            sh:maxCount 1 ;
            sh:message "Detection method must be from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-forensics:detectionMethod ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Detection accuracy must be between 0.0 and 1.0."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-forensics:detectionAccuracy ] ;
    sh:targetClass cacontology-forensics:ElectronicStorageDeviceDetection .

cacontology-forensics:EvidenceCustodianRoleShape a sh:NodeShape ;
    rdfs:label "Evidence Custodian Role Shape"@en ;
    sh:property [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Evidence custodian role must have begin timestamp (gUFO temporal)"@en ;
            sh:minCount 1 ;
            sh:path gufo:hasBeginPointInXSDDateTimeStamp ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Evidence custodian role may have end timestamp (gUFO temporal)"@en ;
            sh:path gufo:hasEndPointInXSDDateTimeStamp ],
        [ sh:hasValue "custodian" ;
            sh:message "An evidence custodian role must have kindOfRelationship value 'custodian'"@en ;
            sh:path uco-core:kindOfRelationship ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:message "Custody authority should be specified (gUFO quality aspect)"@en ;
            sh:path cacontology-forensics:custodyAuthority ],
        [ sh:datatype xsd:string ;
            sh:in ( "full" "limited" "read-only" "none" ) ;
            sh:maxCount 1 ;
            sh:message "Access level must be full, limited, read-only, or none (gUFO mode aspect)"@en ;
            sh:path cacontology-forensics:accessLevel ] ;
    sh:targetClass cacontology-forensics:EvidenceCustodianRole .

cacontology-forensics:EvidenceTriageSystemShape a sh:NodeShape ;
    rdfs:label "Evidence Triage System Shape"@en ;
    rdfs:comment "Validation shape for evidence triage system instances."@en ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Triage accuracy must be between 0.0 and 1.0."@en ;
            sh:minCount 1 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-forensics:triageAccuracy ],
        [ sh:datatype xsd:string ;
            sh:in ( "critical" "high" "medium" "low" "unknown" ) ;
            sh:maxCount 1 ;
            sh:message "Priority classification must be from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-forensics:priorityClassification ] ;
    sh:targetClass cacontology-forensics:EvidenceTriageSystem .

cacontology-forensics:EvidenceVerificationActionExtendedShape a sh:NodeShape ;
    rdfs:label "Evidence Verification Action Extended Shape"@en ;
    rdfs:comment "Extended validation shape for evidence verification action instances."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Evidence verification must specify verification time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ],
        [ sh:class uco-tool:Tool ;
            sh:maxCount 1 ;
            sh:message "Evidence verification must specify verification tool used."@en ;
            sh:minCount 1 ;
            sh:path uco-action:usesTool ] ;
    sh:targetClass cacontology-forensics:EvidenceVerificationAction .

cacontology-forensics:EvidenceVerificationActionShape a sh:NodeShape ;
    rdfs:label "Evidence Verification Action Shape"@en ;
    sh:property [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Evidence verification must have exactly one begin timestamp (gUFO temporal)"@en ;
            sh:minCount 1 ;
            sh:path gufo:hasBeginPointInXSDDateTimeStamp ],
        [ sh:class uco-core:UcoObject ;
            sh:message "An evidence verification action must specify at least one object being verified"@en ;
            sh:minCount 1 ;
            sh:path uco-core:object ],
        [ sh:class uco-core:UcoObject ;
            sh:message "An evidence verification action must include at least one verification hash"@en ;
            sh:minCount 1 ;
            sh:path cacontology-forensics:verificationHash ],
        [ sh:datatype xsd:string ;
            sh:in ( "MD5" "SHA1" "SHA256" "SHA512" "CRC32" ) ;
            sh:message "Verification method must be specified from allowed hash algorithms"@en ;
            sh:minCount 1 ;
            sh:path cacontology-forensics:verificationMethod ],
        [ sh:datatype xsd:string ;
            sh:in ( "verified" "failed" "incomplete" ) ;
            sh:maxCount 1 ;
            sh:message "Verification result must be verified, failed, or incomplete (gUFO quality aspect)"@en ;
            sh:path cacontology-forensics:verificationResult ] ;
    sh:targetClass cacontology-forensics:EvidenceVerificationAction .

cacontology-forensics:EvidenceVerificationCompletenessBusinessRule a sh:NodeShape ;
    sh:sparql [ sh:message "Failed evidence verification requires re-acquisition"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/forensics#"^^xsd:anyURI ;
                            sh:prefix "cacontology-forensics" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-forensics:verificationResult "failed" .
                FILTER NOT EXISTS {
                    ?reacquisition rdf:type cacontology-forensics:ForensicAcquisitionAction .
                    ?reacquisition cacontology-forensics:evidenceSeized ?evidence .
                    $this uco-core:object ?evidence .
                }
            }
        """ ] ;
    sh:targetClass cacontology-forensics:EvidenceVerificationAction .

cacontology-forensics:ExaminerCertificationBusinessRule a sh:NodeShape ;
    sh:sparql [ sh:message "Critical evidence acquisition requires certified examiner"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/forensics#"^^xsd:anyURI ;
                            sh:prefix "cacontology-forensics" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-forensics:acquisitionQuality "excellent" .
                $this cacontology-forensics:examinedBy ?examiner .
                ?examiner cacontology-forensics:certificationLevel ?level .
                FILTER (?level = "trainee")
            }
        """ ] ;
    sh:targetClass cacontology-forensics:ForensicAcquisitionAction .

cacontology-forensics:ForensicAcquisitionActionExtendedShape a sh:NodeShape ;
    rdfs:label "Forensic Acquisition Action Extended Shape"@en ;
    rdfs:comment "Extended validation shape for forensic acquisition action instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "physical" "logical" "live" "chip_off" "jtag" "selective" ) ;
            sh:maxCount 1 ;
            sh:message "Forensic acquisition must specify acquisition method from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-forensics:acquisitionMethod ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Forensic acquisition must specify if write blocking was used."@en ;
            sh:minCount 1 ;
            sh:path cacontology-forensics:writeBlockingUsed ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Forensic acquisition must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Forensic acquisition may specify end time."@en ;
            sh:minCount 0 ;
            sh:path uco-core:endTime ] ;
    sh:targetClass cacontology-forensics:ForensicAcquisitionAction .

cacontology-forensics:ForensicAcquisitionActionShape a sh:NodeShape ;
    rdfs:label "Forensic Acquisition Action Shape"@en ;
    sh:property [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Forensic acquisition must have exactly one begin timestamp (gUFO temporal)"@en ;
            sh:minCount 1 ;
            sh:path gufo:hasBeginPointInXSDDateTimeStamp ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Forensic acquisition must have at most one end timestamp (gUFO temporal)"@en ;
            sh:path gufo:hasEndPointInXSDDateTimeStamp ],
        [ sh:class uco-tool:Tool ;
            sh:message "A forensic acquisition action must specify at least one tool used"@en ;
            sh:minCount 1 ;
            sh:path uco-action:usesTool ],
        [ sh:datatype xsd:string ;
            sh:in ( "physical" "logical" "live" "remote" "network" ) ;
            sh:maxCount 1 ;
            sh:message "Acquisition method must be one of: physical, logical, live, remote, network"@en ;
            sh:minCount 1 ;
            sh:path cacontology-forensics:acquisitionMethod ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "A forensic acquisition action must specify whether write-blocking was used"@en ;
            sh:minCount 1 ;
            sh:path cacontology-forensics:writeBlockingUsed ],
        [ sh:class uco-core:UcoObject ;
            sh:message "A forensic acquisition action must specify at least one evidence item seized"@en ;
            sh:minCount 1 ;
            sh:path cacontology-forensics:evidenceSeized ],
        [ sh:class cacontology-forensics:ForensicImage ;
            sh:message "A forensic acquisition action must produce at least one forensic copy"@en ;
            sh:minCount 1 ;
            sh:path cacontology-forensics:forensicCopy ],
        [ sh:datatype xsd:string ;
            sh:in ( "excellent" "good" "acceptable" "poor" ) ;
            sh:maxCount 1 ;
            sh:message "Acquisition quality must be excellent, good, acceptable, or poor (gUFO quality aspect)"@en ;
            sh:path cacontology-forensics:acquisitionQuality ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Acquisition completeness must be between 0.0 and 1.0 (gUFO quality aspect)"@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-forensics:acquisitionCompleteness ] ;
    sh:targetClass cacontology-forensics:ForensicAcquisitionAction .

cacontology-forensics:ForensicAcquisitionCrossReferenceShape a sh:NodeShape ;
    rdfs:label "Forensic Acquisition Cross Reference Shape"@en ;
    rdfs:comment "Validates cross-references between forensic acquisition and related entities."@en ;
    sh:sparql [ sh:message "Forensic acquisition must have tool, evidence seized, and forensic copy."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-forensics:ForensicAcquisitionAction .
                FILTER NOT EXISTS {
                    $this uco-action:usesTool ?tool ;
                          cacontology-forensics:evidenceSeized ?evidence ;
                          cacontology-forensics:forensicCopy ?copy .
                }
            }
        """ ] ;
    sh:targetClass cacontology-forensics:ForensicAcquisitionAction .

cacontology-forensics:ForensicActionTemporalShape a sh:NodeShape ;
    sh:property [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Forensic action must have at most one begin timestamp (gUFO temporal constraint)"@en ;
            sh:path gufo:hasBeginPointInXSDDateTimeStamp ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Forensic action must have at most one end timestamp (gUFO temporal constraint)"@en ;
            sh:path gufo:hasEndPointInXSDDateTimeStamp ] ;
    sh:sparql [ sh:message "Forensic action end time must be after begin time (gUFO temporal ordering)"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "http://purl.org/nemo/gufo#"^^xsd:anyURI ;
                            sh:prefix "gufo" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this gufo:hasBeginPointInXSDDateTimeStamp ?beginTime .
                $this gufo:hasEndPointInXSDDateTimeStamp ?endTime .
                FILTER (?endTime <= ?beginTime)
            }
        """ ] ;
    sh:targetClass gufo:Event .

cacontology-forensics:ForensicEventParticipationShape a sh:NodeShape ;
    sh:property [ sh:message "Every forensic event must have at least one participant (gUFO participation)"@en ;
            sh:minCount 1 ;
            sh:path [ sh:alternativePath ( cacontology-forensics:examinedBy cacontology-forensics:performedBy cacontology-forensics:witnessedBy cacontology-forensics:authorizedBy ) ] ] ;
    sh:targetClass gufo:Event .

cacontology-forensics:ForensicEventTypeValidationShape a sh:NodeShape ;
    sh:message "Every forensic EventType must extend gufo:Event"@en ;
    sh:property [ sh:hasValue gufo:EventType ;
            sh:minCount 1 ;
            sh:path rdf:type ],
        [ sh:class gufo:Event ;
            sh:minCount 1 ;
            sh:path rdfs:subClassOf ] ;
    sh:targetClass gufo:EventType .

cacontology-forensics:ForensicExaminerRoleShape a sh:NodeShape ;
    rdfs:label "Forensic Examiner Role Shape"@en ;
    sh:property [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Forensic examiner role must have begin timestamp (gUFO temporal)"@en ;
            sh:minCount 1 ;
            sh:path gufo:hasBeginPointInXSDDateTimeStamp ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Forensic examiner role may have end timestamp (gUFO temporal)"@en ;
            sh:path gufo:hasEndPointInXSDDateTimeStamp ],
        [ sh:hasValue "examiner" ;
            sh:message "A forensic examiner role must have kindOfRelationship value 'examiner'"@en ;
            sh:path uco-core:kindOfRelationship ],
        [ sh:datatype xsd:string ;
            sh:in ( "trainee" "certified" "senior" "expert" ) ;
            sh:maxCount 1 ;
            sh:message "Certification level must be trainee, certified, senior, or expert (gUFO quality aspect)"@en ;
            sh:path cacontology-forensics:certificationLevel ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:message "Specialization area should be specified (gUFO quality aspect)"@en ;
            sh:path cacontology-forensics:specializationArea ] ;
    sh:targetClass cacontology-forensics:ForensicExaminerRole .

cacontology-forensics:ForensicFunctionalComplexValidationShape a sh:NodeShape ;
    sh:message "Forensic tools must be properly classified as gUFO FunctionalComplex"@en ;
    sh:property [ sh:hasValue gufo:FunctionalComplex ;
            sh:minCount 1 ;
            sh:path rdf:type ] ;
    sh:targetClass gufo:FunctionalComplex .

cacontology-forensics:ForensicImageExtendedShape a sh:NodeShape ;
    rdfs:label "Forensic Image Extended Shape"@en ;
    rdfs:comment "Extended validation shape for forensic image instances with comprehensive digital evidence requirements."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "physical_imaging" "logical_imaging" "live_imaging" "chip_off" "jtag" "selective_imaging" ) ;
            sh:maxCount 1 ;
            sh:message "Forensic image must specify acquisition method from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-forensics:acquisitionMethod ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Forensic image must specify creation time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:createdTime ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Forensic image must specify if write blocking was used."@en ;
            sh:minCount 1 ;
            sh:path cacontology-forensics:writeBlockingUsed ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 1000000000000.0 ;
            sh:message "Image size must be between 0 and 1TB (in bytes)."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.0 ;
            sh:path uco-core:sizeInBytes ] ;
    sh:targetClass cacontology-forensics:ForensicImage .

cacontology-forensics:ForensicImageShape a sh:NodeShape ;
    rdfs:label "Forensic Image Shape"@en ;
    sh:property [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Forensic image must have creation timestamp (gUFO temporal)"@en ;
            sh:minCount 1 ;
            sh:path gufo:hasBeginPointInXSDDateTimeStamp ],
        [ sh:class uco-core:UcoObject ;
            sh:message "A forensic image must have at least one verification hash"@en ;
            sh:minCount 1 ;
            sh:path cacontology-forensics:verificationHash ],
        [ sh:class uco-core:UcoObject ;
            sh:message "A forensic image must have at least one source hash for verification"@en ;
            sh:minCount 1 ;
            sh:path cacontology-forensics:sourceHash ],
        [ sh:datatype xsd:string ;
            sh:in ( "E01" "DD" "AFF" "VMDK" "VHD" ) ;
            sh:maxCount 1 ;
            sh:message "Image format must be E01, DD, AFF, VMDK, or VHD"@en ;
            sh:path cacontology-forensics:imageFormat ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Must specify if compression was used (gUFO quality aspect)"@en ;
            sh:path cacontology-forensics:compressionUsed ],
        [ sh:datatype xsd:string ;
            sh:in ( "verified" "corrupted" "unknown" ) ;
            sh:maxCount 1 ;
            sh:message "Image integrity must be verified, corrupted, or unknown (gUFO quality aspect)"@en ;
            sh:path cacontology-forensics:imageIntegrity ] ;
    sh:targetClass cacontology-forensics:ForensicImage .

cacontology-forensics:ForensicInvestigationCompositionShape a sh:NodeShape ;
    sh:property [ sh:class gufo:Event ;
            sh:message "Forensic investigation must have at least one forensic action (gUFO part-whole)"@en ;
            sh:minCount 1 ;
            sh:path cacontology-forensics:hasForensicAction ] ;
    sh:targetClass cacontology-forensics:ForensicInvestigation .

cacontology-forensics:ForensicKindValidationShape a sh:NodeShape ;
    sh:message "Every forensic Kind must be declared as rdf:type gufo:Kind"@en ;
    sh:property [ sh:hasValue gufo:Kind ;
            sh:minCount 1 ;
            sh:path rdf:type ] ;
    sh:targetClass gufo:Kind .

cacontology-forensics:ForensicRoleValidationShape a sh:NodeShape ;
    sh:message "Forensic roles are anti-rigid and cannot be subclasses of rigid Kinds"@en ;
    sh:not [ sh:property [ sh:class gufo:Kind ;
                    sh:path rdfs:subClassOf ] ] ;
    sh:property [ sh:hasValue gufo:Role ;
            sh:minCount 1 ;
            sh:path rdf:type ] ;
    sh:targetClass gufo:Role .

cacontology-forensics:ForensicToolShape a sh:NodeShape ;
    rdfs:label "Forensic Tool Shape"@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:message "A forensic tool must have exactly one name"@en ;
            sh:minCount 1 ;
            sh:path uco-core:name ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:message "Tool version should be specified (gUFO quality aspect)"@en ;
            sh:path cacontology-forensics:toolVersion ],
        [ sh:datatype xsd:string ;
            sh:in ( "validated" "approved" "testing" "deprecated" ) ;
            sh:maxCount 1 ;
            sh:message "Validation status must be validated, approved, testing, or deprecated (gUFO mode aspect)"@en ;
            sh:path cacontology-forensics:validationStatus ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Tool reliability must be between 0.0 and 1.0 (gUFO quality aspect)"@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-forensics:toolReliability ] ;
    sh:targetClass cacontology-forensics:ForensicImagingTool,
        cacontology-forensics:HashingTool,
        cacontology-forensics:MemoryForensicTool,
        cacontology-forensics:MobileForensicTool,
        cacontology-forensics:NetworkForensicTool .

cacontology-forensics:ForensicToolValidationBusinessRule a sh:NodeShape ;
    sh:sparql [ sh:message "Critical forensic acquisitions must use validated tools"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/forensics#"^^xsd:anyURI ;
                            sh:prefix "cacontology-forensics" ],
                        [ sh:namespace "https://ontology.unifiedcyberontology.org/uco/action/"^^xsd:anyURI ;
                            sh:prefix "uco-action" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-forensics:acquisitionQuality "excellent" .
                $this uco-action:usesTool ?tool .
                ?tool cacontology-forensics:validationStatus ?status .
                FILTER (?status != "validated")
            }
        """ ] ;
    sh:targetClass cacontology-forensics:ForensicAcquisitionAction .

cacontology-forensics:HasVerificationHashShape a sh:PropertyShape ;
    sh:class uco-core:UcoObject ;
    sh:description "Links forensic artifacts to verification hashes" ;
    sh:minCount 1 ;
    sh:name "has verification hash" ;
    sh:path cacontology-forensics:verificationHash .

cacontology-forensics:HiddenDeviceRecoveryShape a sh:NodeShape ;
    rdfs:label "Hidden Device Recovery Shape"@en ;
    rdfs:comment "Validation shape for hidden device recovery instances."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 1000 ;
            sh:message "Devices recovered must be between 1 and 1000."@en ;
            sh:minCount 1 ;
            sh:minInclusive 1 ;
            sh:path cacontology-forensics:devicesRecovered ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Hidden device recovery must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ] ;
    sh:targetClass cacontology-forensics:HiddenDeviceRecovery .

cacontology-forensics:ImageAnalysisForVictimIDShape a sh:NodeShape ;
    rdfs:label "Image Analysis for Victim ID Shape"@en ;
    rdfs:comment "Validation shape for image analysis for victim identification instances."@en ;
    sh:property [ sh:class uco-tool:Tool ;
            sh:message "Image analysis for victim ID must specify at least one analysis tool."@en ;
            sh:minCount 1 ;
            sh:path uco-action:usesTool ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Image analysis must specify analysis time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ] ;
    sh:targetClass cacontology-forensics:ImageAnalysisForVictimID .

cacontology-forensics:K9AssistedForensicsShape a sh:NodeShape ;
    rdfs:label "K9 Assisted Forensics Shape"@en ;
    rdfs:comment "Validation shape for K9 assisted forensics instances."@en ;
    sh:property [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "K9 assisted forensics must specify if K9 assistance was provided."@en ;
            sh:minCount 1 ;
            sh:path cacontology-forensics:k9AssistanceProvided ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "K9 assisted forensics must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ] ;
    sh:targetClass cacontology-forensics:K9AssistedForensics .

cacontology-forensics:MassDigitalEvidenceProcessingShape a sh:NodeShape ;
    rdfs:label "Mass Digital Evidence Processing Shape"@en ;
    rdfs:comment "Validation shape for mass digital evidence processing instances."@en ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 10000.0 ;
            sh:message "Evidence volume must be between 0.001 and 10000 terabytes."@en ;
            sh:minCount 1 ;
            sh:minInclusive 0.001 ;
            sh:path cacontology-forensics:evidenceVolumeTerabytes ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 1000.0 ;
            sh:message "Files processed must be between 0.001 and 1000 million."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.001 ;
            sh:path cacontology-forensics:filesProcessedMillions ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 3650 ;
            sh:message "Processing timeframe must be between 1 and 3650 days (10 years)."@en ;
            sh:minCount 1 ;
            sh:minInclusive 1 ;
            sh:path cacontology-forensics:processingTimeframeDays ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Mass processing must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ] ;
    sh:targetClass cacontology-forensics:MassDigitalEvidenceProcessing .

cacontology-forensics:MassProcessingValidationShape a sh:NodeShape ;
    rdfs:label "Mass Processing Validation Shape"@en ;
    rdfs:comment "Validates mass digital evidence processing consistency."@en ;
    sh:sparql [ sh:message "Large evidence volumes should have reasonable processing timeframes."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-forensics:evidenceVolumeTerabytes ?volume ;
                      cacontology-forensics:processingTimeframeDays ?days .
                FILTER (?volume > 100.0 && ?days < 30)
            }
        """ ] ;
    sh:targetClass cacontology-forensics:MassDigitalEvidenceProcessing .

cacontology-forensics:MemoryDump a owl:Class ;
    rdfs:label "Memory Dump"@en ;
    rdfs:comment "A snapshot of volatile system memory captured for forensic analysis."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:ObservableObject .

cacontology-forensics:MetadataCorrelation a owl:Class ;
    rdfs:label "Metadata Correlation"@en ;
    rdfs:comment "Correlation analysis of metadata across multiple files and platforms."@en ;
    rdfs:subClassOf cacontology-forensics:ContentCorrelationAnalysis .

cacontology-forensics:MetadataExtractionActionShape a sh:NodeShape ;
    rdfs:label "Metadata Extraction Action Shape"@en ;
    sh:property [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Metadata extraction must have exactly one begin timestamp (gUFO temporal)"@en ;
            sh:minCount 1 ;
            sh:path gufo:hasBeginPointInXSDDateTimeStamp ],
        [ sh:class uco-core:UcoObject ;
            sh:message "A metadata extraction action must specify at least one source object"@en ;
            sh:minCount 1 ;
            sh:path uco-core:object ],
        [ sh:class uco-tool:Tool ;
            sh:message "A metadata extraction action must specify at least one extraction tool used"@en ;
            sh:minCount 1 ;
            sh:path uco-action:usesTool ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Extraction completeness must be between 0.0 and 1.0 (gUFO quality aspect)"@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-forensics:extractionCompleteness ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:message "Metadata types extracted should be specified (gUFO quality aspect)"@en ;
            sh:path cacontology-forensics:metadataTypes ] ;
    sh:targetClass cacontology-forensics:MetadataExtractionAction .

cacontology-forensics:MobileForensicToolExtendedShape a sh:NodeShape ;
    rdfs:label "Mobile Forensic Tool Extended Shape"@en ;
    rdfs:comment "Extended validation shape for mobile forensic tool instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 100 ;
            sh:message "Mobile forensic tool must specify name (3-100 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 3 ;
            sh:path uco-core:name ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 50 ;
            sh:message "Tool version should be 1-50 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 1 ;
            sh:path uco-tool:version ] ;
    sh:targetClass cacontology-forensics:MobileForensicTool .

cacontology-forensics:NetworkCapture a owl:Class ;
    rdfs:label "Network Capture"@en ;
    rdfs:comment "A capture of network traffic packets for forensic analysis."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:ObservableObject .

cacontology-forensics:ProducesForensicImageShape a sh:PropertyShape ;
    sh:class cacontology-forensics:ForensicImage ;
    sh:description "Links acquisition to forensic image produced" ;
    sh:minCount 1 ;
    sh:name "produces forensic image" ;
    sh:path cacontology-forensics:forensicCopy .

cacontology-forensics:RecoveredFileExtendedShape a sh:NodeShape ;
    rdfs:label "Recovered File Extended Shape"@en ;
    rdfs:comment "Extended validation shape for recovered file instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "file_carving" "undelete_utility" "hex_editor" "specialized_software" "hardware_recovery" "manual_reconstruction" ) ;
            sh:maxCount 1 ;
            sh:message "Recovered file must specify recovery method from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-forensics:recoveryMethod ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 255 ;
            sh:message "Recovered file must specify file name (1-255 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 1 ;
            sh:path uco-observable:fileName ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 1000 ;
            sh:message "Recovered file must specify file path (1-1000 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 1 ;
            sh:path uco-observable:filePath ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Recovered file may specify creation time."@en ;
            sh:minCount 0 ;
            sh:path uco-core:createdTime ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Recovered file may specify modification time."@en ;
            sh:minCount 0 ;
            sh:path uco-core:modifiedTime ] ;
    sh:targetClass cacontology-forensics:RecoveredFile .

cacontology-forensics:RecoveredFileShape a sh:NodeShape ;
    rdfs:label "Recovered File Shape"@en ;
    sh:property [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Recovery confidence must be between 0.0 and 1.0 (gUFO quality aspect)"@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-forensics:recoveryConfidence ],
        [ sh:datatype xsd:string ;
            sh:in ( "complete" "partial" "corrupted" ) ;
            sh:maxCount 1 ;
            sh:message "Data integrity must be complete, partial, or corrupted (gUFO quality aspect)"@en ;
            sh:path cacontology-forensics:dataIntegrity ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Recovered file may have recovery timestamp (gUFO temporal)"@en ;
            sh:path gufo:hasBeginPointInXSDDateTimeStamp ],
        [ sh:datatype xsd:string ;
            sh:in ( "undelete" "carving" "slack-space" "unallocated-space" "registry-recovery" ) ;
            sh:maxCount 1 ;
            sh:message "Recovery method must be from allowed list: undelete, carving, slack-space, unallocated-space, registry-recovery"@en ;
            sh:minCount 1 ;
            sh:path cacontology-forensics:recoveryMethod ] ;
    sh:targetClass cacontology-forensics:RecoveredFile .

cacontology-forensics:ReportingPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Reporting Phase"@en ;
    rdfs:comment "Phase involving preparation of forensic reports and findings."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-forensics:ScalableHashAnalysisShape a sh:NodeShape ;
    rdfs:label "Scalable Hash Analysis Shape"@en ;
    rdfs:comment "Validation shape for scalable hash analysis instances."@en ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 10000.0 ;
            sh:message "Hash database size must be between 0.001 and 10000 million entries."@en ;
            sh:minCount 1 ;
            sh:minInclusive 0.001 ;
            sh:path cacontology-forensics:hashDatabaseSize ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 10000000 ;
            sh:message "Hash matches found must be between 0 and 10 million."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0 ;
            sh:path cacontology-forensics:hashMatchesFound ] ;
    sh:targetClass cacontology-forensics:ScalableHashAnalysis .

cacontology-forensics:TemporalConsistencyBusinessRule a sh:NodeShape ;
    sh:sparql [ sh:message "Timeline analysis must have sufficient temporal accuracy for evidence quality"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/forensics#"^^xsd:anyURI ;
                            sh:prefix "cacontology-forensics" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-forensics:timelineScope "comprehensive" .
                $this cacontology-forensics:temporalAccuracy ?accuracy .
                FILTER (?accuracy < 0.9)
            }
        """ ] ;
    sh:targetClass cacontology-forensics:TimelineAnalysisAction .

cacontology-forensics:TemporalPatternAnalysisShape a sh:NodeShape ;
    rdfs:label "Temporal Pattern Analysis Shape"@en ;
    rdfs:comment "Validation shape for temporal pattern analysis instances."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Temporal pattern analysis must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Temporal pattern analysis may specify end time."@en ;
            sh:minCount 0 ;
            sh:path uco-core:endTime ] ;
    sh:targetClass cacontology-forensics:TemporalPatternAnalysis .

cacontology-forensics:TemporalValidationShape a sh:NodeShape ;
    rdfs:label "Temporal Validation Shape"@en ;
    rdfs:comment "Validates temporal consistency in forensic actions."@en ;
    sh:sparql [ sh:message "Acquisition start time must be before end time when both are specified."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this uco-core:startTime ?start ;
                      uco-core:endTime ?end .
                FILTER (?start >= ?end)
            }
        """ ] ;
    sh:targetClass cacontology-forensics:ForensicAcquisitionAction .

cacontology-forensics:TestimonyPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Testimony Phase"@en ;
    rdfs:comment "Phase involving expert testimony and courtroom presentation."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-forensics:TimelineAnalysisActionShape a sh:NodeShape ;
    rdfs:label "Timeline Analysis Action Shape"@en ;
    sh:property [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Timeline analysis must have exactly one begin timestamp (gUFO temporal)"@en ;
            sh:minCount 1 ;
            sh:path gufo:hasBeginPointInXSDDateTimeStamp ],
        [ sh:class uco-core:UcoObject ;
            sh:message "A timeline analysis action must include at least one timeline event"@en ;
            sh:minCount 1 ;
            sh:path cacontology-forensics:timelineEvent ],
        [ sh:class uco-tool:Tool ;
            sh:message "A timeline analysis action must specify at least one analysis tool used"@en ;
            sh:minCount 1 ;
            sh:path uco-action:usesTool ],
        [ sh:datatype xsd:string ;
            sh:in ( "file-system" "application" "network" "memory" "comprehensive" ) ;
            sh:maxCount 1 ;
            sh:message "Timeline scope must be file-system, application, network, memory, or comprehensive"@en ;
            sh:path cacontology-forensics:timelineScope ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Temporal accuracy must be between 0.0 and 1.0 (gUFO quality aspect)"@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-forensics:temporalAccuracy ] ;
    sh:targetClass cacontology-forensics:TimelineAnalysisAction .

cacontology-forensics:UsesForensicToolShape a sh:PropertyShape ;
    sh:class uco-tool:Tool ;
    sh:description "Links forensic actions to tools used" ;
    sh:minCount 1 ;
    sh:name "uses forensic tool" ;
    sh:path uco-action:usesTool .

cacontology-forensics:VerificationTimingShape a sh:NodeShape ;
    rdfs:label "Verification Timing Shape"@en ;
    rdfs:comment "Validates evidence verification timing."@en ;
    sh:sparql [ sh:message "Evidence verification should occur after acquisition."@en ;
            sh:select """
            SELECT $this
            WHERE {
                ?acquisition cacontology-forensics:forensicCopy ?image .
                ?image cacontology-forensics:verificationHash ?hash .
                $this uco-core:object ?hash ;
                      uco-core:startTime ?verificationTime .
                ?acquisition uco-core:startTime ?acquisitionTime .
                FILTER (?verificationTime < ?acquisitionTime)
            }
        """ ] ;
    sh:targetClass cacontology-forensics:EvidenceVerificationAction .

cacontology-forensics:VictimIdentificationProcessShape a sh:NodeShape ;
    rdfs:label "Victim Identification Process Shape"@en ;
    rdfs:comment "Validation shape for victim identification process instances."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 10000 ;
            sh:message "Victims identified count must be between 0 and 10000."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0 ;
            sh:path cacontology-forensics:victimsIdentifiedCount ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 100 ;
            sh:message "Victim geographic origin should be 2-100 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 2 ;
            sh:path cacontology-forensics:victimGeographicOrigin ],
        [ sh:datatype xsd:string ;
            sh:in ( "toddlers" "children" "teenagers" "toddlers_to_children" "children_to_teenagers" "toddlers_to_teenagers" "unknown" ) ;
            sh:maxCount 1 ;
            sh:message "Victim age range must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-forensics:victimAgeRange ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Victim identification process must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ] ;
    sh:targetClass cacontology-forensics:VictimIdentificationProcess .

cacontology-forensics:VictimIdentificationSpecialist a gufo:Role,
        owl:Class ;
    rdfs:label "Victim Identification Specialist"@en ;
    rdfs:comment "Role of specialist focused on identifying child victims from digital evidence."@en ;
    rdfs:subClassOf uco-core:Role .

cacontology-forensics:VictimRemovalAction a owl:Class ;
    rdfs:label "Victim Removal Action"@en ;
    rdfs:comment "Action taken to remove identified victims from further harm and exploitation."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-forensics:WriteBlockingValidationShape a sh:NodeShape ;
    rdfs:label "Write Blocking Validation Shape"@en ;
    rdfs:comment "Validates write blocking usage in forensic acquisitions."@en ;
    sh:sparql [ sh:message "Physical acquisitions should use write blocking."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-forensics:acquisitionMethod "physical" ;
                      cacontology-forensics:writeBlockingUsed false .
            }
        """ ] ;
    sh:targetClass cacontology-forensics:ForensicAcquisitionAction .

cacontology-forensics:analysesUserBehavior a owl:ObjectProperty ;
    rdfs:label "analyses user behavior"@en ;
    rdfs:comment "Links processing to user behavior forensic analysis."@en ;
    rdfs:domain cacontology-forensics:MassDigitalEvidenceProcessing ;
    rdfs:range cacontology-forensics:UserBehaviorForensics .

cacontology-forensics:analyzesCommunicationPatterns a owl:ObjectProperty ;
    rdfs:label "analyzes communication patterns"@en ;
    rdfs:comment "Links user behavior analysis to communication pattern analysis."@en ;
    rdfs:domain cacontology-forensics:UserBehaviorForensics ;
    rdfs:range cacontology-forensics:CommunicationPatternAnalysis .

cacontology-forensics:analyzesNetworkTraffic a owl:ObjectProperty ;
    rdfs:label "analyzes network traffic"@en ;
    rdfs:comment "Links user behavior analysis to network traffic analysis."@en ;
    rdfs:domain cacontology-forensics:UserBehaviorForensics ;
    rdfs:range cacontology-forensics:NetworkTrafficAnalysis .

cacontology-forensics:analyzesTemporalPatterns a owl:ObjectProperty ;
    rdfs:label "analyzes temporal patterns"@en ;
    rdfs:comment "Links content correlation to temporal pattern analysis."@en ;
    rdfs:domain cacontology-forensics:ContentCorrelationAnalysis ;
    rdfs:range cacontology-forensics:TemporalPatternAnalysis .

cacontology-forensics:arrestsResulting a owl:DatatypeProperty ;
    rdfs:label "arrests resulting"@en ;
    rdfs:comment "Number of arrests resulting from forensic investigations (e.g., 654 for SA JACET)."@en ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-forensics:behaviorPatternsIdentified a owl:DatatypeProperty ;
    rdfs:label "behavior patterns identified"@en ;
    rdfs:comment "Number of distinct behavior patterns identified in user analysis."@en ;
    rdfs:domain cacontology-forensics:UserBehaviorForensics ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-forensics:behavioralFingerprintsCreated a owl:DatatypeProperty ;
    rdfs:label "behavioral fingerprints created"@en ;
    rdfs:comment "Number of unique behavioral fingerprints created from analysis."@en ;
    rdfs:domain cacontology-forensics:BehavioralFingerprinting ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-forensics:caseExhibitNumber a owl:DatatypeProperty ;
    rdfs:label "case exhibit number"@en ;
    rdfs:comment "The official exhibit number assigned to evidence for legal proceedings."@en ;
    rdfs:range xsd:string .

cacontology-forensics:communicationGraphComplexity a owl:DatatypeProperty ;
    rdfs:label "communication graph complexity"@en ;
    rdfs:comment "Complexity measure of communication graph analysis (simple, moderate, complex, highly_complex)."@en ;
    rdfs:domain cacontology-forensics:CommunicationPatternAnalysis ;
    rdfs:range xsd:string .

cacontology-forensics:coordinatesInternationalProcessing a owl:ObjectProperty ;
    rdfs:label "coordinates international processing"@en ;
    rdfs:comment "Links mass processing to international evidence processing coordination."@en ;
    rdfs:domain cacontology-forensics:MassDigitalEvidenceProcessing ;
    rdfs:range cacontology-forensics:InternationalEvidenceProcessing .

cacontology-forensics:correlatesAcrossPlatforms a owl:ObjectProperty ;
    rdfs:label "correlates across platforms"@en ;
    rdfs:comment "Links analysis to cross-platform correlation performed."@en ;
    rdfs:domain cacontology-forensics:ContentCorrelationAnalysis ;
    rdfs:range cacontology-forensics:CrossPlatformCorrelation .

cacontology-forensics:correlatesContent a owl:ObjectProperty ;
    rdfs:label "correlates content"@en ;
    rdfs:comment "Links automated analysis to content correlation analysis."@en ;
    rdfs:domain cacontology-forensics:AutomatedContentAnalysis ;
    rdfs:range cacontology-forensics:ContentCorrelationAnalysis .

cacontology-forensics:correlationLatency a owl:DatatypeProperty ;
    rdfs:label "correlation latency"@en ;
    rdfs:comment "Average latency for real-time correlation analysis in milliseconds."@en ;
    rdfs:domain cacontology-forensics:RealTimeCorrelation ;
    rdfs:range xsd:decimal .

cacontology-forensics:correlationStrength a owl:DatatypeProperty ;
    rdfs:label "correlation strength"@en ;
    rdfs:comment "Strength of content correlation found (weak, moderate, strong, very_strong)."@en ;
    rdfs:domain cacontology-forensics:ContentCorrelationAnalysis ;
    rdfs:range xsd:string .

cacontology-forensics:createsBehavioralFingerprints a owl:ObjectProperty ;
    rdfs:label "creates behavioral fingerprints"@en ;
    rdfs:comment "Links user behavior analysis to fingerprinting performed."@en ;
    rdfs:domain cacontology-forensics:UserBehaviorForensics ;
    rdfs:range cacontology-forensics:BehavioralFingerprinting .

cacontology-forensics:crossBorderDataSharing a owl:DatatypeProperty ;
    rdfs:label "cross-border data sharing"@en ;
    rdfs:comment "Whether cross-border data sharing protocols are enabled."@en ;
    rdfs:domain cacontology-forensics:InternationalEvidenceProcessing ;
    rdfs:range xsd:boolean .

cacontology-forensics:crossPlatformMatches a owl:DatatypeProperty ;
    rdfs:label "cross-platform matches"@en ;
    rdfs:comment "Number of matches found across different platforms."@en ;
    rdfs:domain cacontology-forensics:CrossPlatformCorrelation ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-forensics:dataTransferVolume a owl:DatatypeProperty ;
    rdfs:label "data transfer volume"@en ;
    rdfs:comment "Volume of data transfers analyzed in terabytes."@en ;
    rdfs:domain cacontology-forensics:NetworkTrafficAnalysis ;
    rdfs:range xsd:decimal .

cacontology-forensics:databasesIntegrated a owl:DatatypeProperty ;
    rdfs:label "databases integrated"@en ;
    rdfs:comment "Number of international databases integrated for intelligence correlation."@en ;
    rdfs:domain cacontology-forensics:DatabaseIntelligenceIntegration ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-forensics:discoversNetworks a owl:ObjectProperty ;
    rdfs:label "discovers networks"@en ;
    rdfs:comment "Links content correlation to criminal networks discovered."@en ;
    rdfs:domain cacontology-forensics:ContentCorrelationAnalysis ;
    rdfs:range uco-observable:ObservableObject .

cacontology-forensics:distributesProcessing a owl:ObjectProperty ;
    rdfs:label "distributes processing"@en ;
    rdfs:comment "Links mass processing to distributed processing systems."@en ;
    rdfs:domain cacontology-forensics:MassDigitalEvidenceProcessing ;
    rdfs:range cacontology-forensics:DistributedForensicProcessing .

cacontology-forensics:enablesRealTimeCorrelation a owl:ObjectProperty ;
    rdfs:label "enables real-time correlation"@en ;
    rdfs:comment "Links automated analysis to real-time correlation capabilities."@en ;
    rdfs:domain cacontology-forensics:AutomatedContentAnalysis ;
    rdfs:range cacontology-forensics:RealTimeCorrelation .

cacontology-forensics:evidenceLocation a owl:DatatypeProperty ;
    rdfs:label "evidence location"@en ;
    rdfs:comment "The physical or logical location where evidence was found (e.g., 'bedroom computer', 'cloud storage', 'mobile device')."@en ;
    rdfs:range xsd:string .

cacontology-forensics:featureVectorsUsed a owl:DatatypeProperty ;
    rdfs:label "feature vectors used"@en ;
    rdfs:comment "Number of feature vectors used in machine learning analysis."@en ;
    rdfs:domain cacontology-forensics:MachineLearningCorrelation ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-forensics:fingerprintAccuracy a owl:DatatypeProperty ;
    rdfs:label "fingerprint accuracy"@en ;
    rdfs:comment "Accuracy of behavioral fingerprint matching (0.0-1.0)."@en ;
    rdfs:domain cacontology-forensics:BehavioralFingerprinting ;
    rdfs:range xsd:decimal .

cacontology-forensics:forensicLabsInvolved a owl:DatatypeProperty ;
    rdfs:label "forensic labs involved"@en ;
    rdfs:comment "Number of forensic laboratories involved in international evidence processing."@en ;
    rdfs:domain cacontology-forensics:InternationalEvidenceProcessing ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-forensics:forensicPhaseDuration a owl:DatatypeProperty ;
    rdfs:label "forensic phase duration"@en ;
    rdfs:comment "Duration of forensic phase."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:duration .

cacontology-forensics:forensicReport a owl:ObjectProperty ;
    rdfs:label "forensic report"@en ;
    rdfs:comment "Links a forensic action to its associated report or documentation."@en ;
    rdfs:range uco-observable:ObservableObject .

cacontology-forensics:generatesRealTimeAlerts a owl:ObjectProperty ;
    rdfs:label "generates real-time alerts"@en ;
    rdfs:comment "Links real-time correlation to alerts generated."@en ;
    rdfs:domain cacontology-forensics:RealTimeCorrelation ;
    rdfs:range uco-observable:ObservableObject .

cacontology-forensics:generatesTriageResults a owl:ObjectProperty ;
    rdfs:label "generates triage results"@en ;
    rdfs:comment "Links triage system to results generated."@en ;
    rdfs:domain cacontology-forensics:EvidenceTriageSystem ;
    rdfs:range uco-observable:ObservableObject .

cacontology-forensics:geographicDistribution a owl:DatatypeProperty ;
    rdfs:label "geographic distribution"@en ;
    rdfs:comment "Geographic distribution of processing nodes (countries involved)."@en ;
    rdfs:domain cacontology-forensics:DistributedForensicProcessing ;
    rdfs:range xsd:string .

cacontology-forensics:geographicRadius a owl:DatatypeProperty ;
    rdfs:label "geographic radius"@en ;
    rdfs:comment "Geographic radius of correlation analysis in kilometers."@en ;
    rdfs:domain cacontology-forensics:GeospatialCorrelation ;
    rdfs:range xsd:decimal .

cacontology-forensics:geospatialAccuracy a owl:DatatypeProperty ;
    rdfs:label "geospatial accuracy"@en ;
    rdfs:comment "Accuracy of geospatial correlation analysis in meters."@en ;
    rdfs:domain cacontology-forensics:GeospatialCorrelation ;
    rdfs:range xsd:decimal .

cacontology-forensics:hasForensicPhaseBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has forensic phase begin point"@en ;
    rdfs:comment "Temporal begin point for forensic phase."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-forensics:hasForensicPhaseEndPoint a owl:DatatypeProperty ;
    rdfs:label "has forensic phase end point"@en ;
    rdfs:comment "Temporal end point for forensic phase."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-forensics:hasRoleBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has role begin point"@en ;
    rdfs:comment "Temporal begin point for forensic role."@en ;
    rdfs:domain gufo:Role ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-forensics:hasRoleEndPoint a owl:DatatypeProperty ;
    rdfs:label "has role end point"@en ;
    rdfs:comment "Temporal end point for forensic role."@en ;
    rdfs:domain gufo:Role ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-forensics:identifiesCrossPlatformActivity a owl:ObjectProperty ;
    rdfs:label "identifies cross-platform activity"@en ;
    rdfs:comment "Links cross-platform analysis to activities identified."@en ;
    rdfs:domain cacontology-forensics:CrossPlatformCorrelation ;
    rdfs:range uco-observable:ObservableObject .

cacontology-forensics:identifiesGeographicClusters a owl:ObjectProperty ;
    rdfs:label "identifies geographic clusters"@en ;
    rdfs:comment "Links geospatial analysis to geographic clusters identified."@en ;
    rdfs:domain cacontology-forensics:GeospatialCorrelation ;
    rdfs:range uco-observable:ObservableObject .

cacontology-forensics:identifiesNetworkAnomalies a owl:ObjectProperty ;
    rdfs:label "identifies network anomalies"@en ;
    rdfs:comment "Links network analysis to anomalies identified."@en ;
    rdfs:domain cacontology-forensics:NetworkTrafficAnalysis ;
    rdfs:range uco-observable:ObservableObject .

cacontology-forensics:identifiesPatterns a owl:ObjectProperty ;
    rdfs:label "identifies patterns"@en ;
    rdfs:comment "Links user behavior analysis to patterns identified."@en ;
    rdfs:domain cacontology-forensics:UserBehaviorForensics ;
    rdfs:range uco-observable:ObservableObject .

cacontology-forensics:identifiesTemporalClusters a owl:ObjectProperty ;
    rdfs:label "identifies temporal clusters"@en ;
    rdfs:comment "Links temporal analysis to time-based clusters identified."@en ;
    rdfs:domain cacontology-forensics:TemporalPatternAnalysis ;
    rdfs:range uco-observable:ObservableObject .

cacontology-forensics:integratesIntelligenceDatabases a owl:ObjectProperty ;
    rdfs:label "integrates intelligence databases"@en ;
    rdfs:comment "Links mass processing to database intelligence integration."@en ;
    rdfs:domain cacontology-forensics:MassDigitalEvidenceProcessing ;
    rdfs:range cacontology-forensics:DatabaseIntelligenceIntegration .

cacontology-forensics:intelligenceHits a owl:DatatypeProperty ;
    rdfs:label "intelligence hits"@en ;
    rdfs:comment "Number of intelligence hits found across integrated databases."@en ;
    rdfs:domain cacontology-forensics:DatabaseIntelligenceIntegration ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-forensics:investigationDuration a owl:DatatypeProperty ;
    rdfs:label "investigation duration"@en ;
    rdfs:comment "Duration of extended investigation (e.g., 'weeks', 'months', 'years')."@en ;
    rdfs:domain cacontology-forensics:ExtendedInvestigationTimeline ;
    rdfs:range xsd:string .

cacontology-forensics:involvesForensicLab a owl:ObjectProperty ;
    rdfs:label "involves forensic lab"@en ;
    rdfs:comment "Links international processing to participating forensic laboratories."@en ;
    rdfs:domain cacontology-forensics:InternationalEvidenceProcessing ;
    rdfs:range uco-identity:Organization .

cacontology-forensics:locationPointsAnalyzed a owl:DatatypeProperty ;
    rdfs:label "location points analyzed"@en ;
    rdfs:comment "Number of location points included in geospatial analysis."@en ;
    rdfs:domain cacontology-forensics:GeospatialCorrelation ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-forensics:mlModelAccuracy a owl:DatatypeProperty ;
    rdfs:label "ML model accuracy"@en ;
    rdfs:comment "Accuracy of machine learning correlation models (0.0-1.0)."@en ;
    rdfs:domain cacontology-forensics:MachineLearningCorrelation ;
    rdfs:range xsd:decimal .

cacontology-forensics:networkConnectionsFound a owl:DatatypeProperty ;
    rdfs:label "network connections found"@en ;
    rdfs:comment "Number of network connections identified through content correlation."@en ;
    rdfs:domain cacontology-forensics:ContentCorrelationAnalysis ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-forensics:networkSessionsAnalyzed a owl:DatatypeProperty ;
    rdfs:label "network sessions analyzed"@en ;
    rdfs:comment "Number of network sessions included in traffic analysis."@en ;
    rdfs:domain cacontology-forensics:NetworkTrafficAnalysis ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-forensics:parallelProcessingEnabled a owl:DatatypeProperty ;
    rdfs:label "parallel processing enabled"@en ;
    rdfs:comment "Whether parallel processing capabilities are enabled."@en ;
    rdfs:domain cacontology-forensics:DistributedForensicProcessing ;
    rdfs:range xsd:boolean .

cacontology-forensics:performsGeospatialAnalysis a owl:ObjectProperty ;
    rdfs:label "performs geospatial analysis"@en ;
    rdfs:comment "Links evidence processing to geospatial correlation analysis."@en ;
    rdfs:domain cacontology-forensics:MassDigitalEvidenceProcessing ;
    rdfs:range cacontology-forensics:GeospatialCorrelation .

cacontology-forensics:performsHashAnalysis a owl:ObjectProperty ;
    rdfs:label "performs hash analysis"@en ;
    rdfs:comment "Links automated analysis to scalable hash analysis systems."@en ;
    rdfs:domain cacontology-forensics:AutomatedContentAnalysis ;
    rdfs:range cacontology-forensics:ScalableHashAnalysis .

cacontology-forensics:platformCorrelationScore a owl:DatatypeProperty ;
    rdfs:label "platform correlation score"@en ;
    rdfs:comment "Correlation score across platforms (0.0-1.0)."@en ;
    rdfs:domain cacontology-forensics:CrossPlatformCorrelation ;
    rdfs:range xsd:decimal .

cacontology-forensics:platformsAnalyzed a owl:DatatypeProperty ;
    rdfs:label "platforms analyzed"@en ;
    rdfs:comment "Number of platforms included in cross-platform correlation analysis."@en ;
    rdfs:domain cacontology-forensics:CrossPlatformCorrelation ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-forensics:processesEvidence a owl:ObjectProperty ;
    rdfs:label "processes evidence"@en ;
    rdfs:comment "Links mass processing system to evidence being processed."@en ;
    rdfs:domain cacontology-forensics:MassDigitalEvidenceProcessing ;
    rdfs:range uco-observable:ObservableObject .

cacontology-forensics:processingNodes a owl:DatatypeProperty ;
    rdfs:label "processing nodes"@en ;
    rdfs:comment "Number of processing nodes used in distributed forensic processing."@en ;
    rdfs:domain cacontology-forensics:DistributedForensicProcessing ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-forensics:producesIntelligence a owl:ObjectProperty ;
    rdfs:label "produces intelligence"@en ;
    rdfs:comment "Links forensic analysis to intelligence products generated."@en ;
    rdfs:domain cacontology-forensics:MassDigitalEvidenceProcessing ;
    rdfs:range uco-observable:ObservableObject .

cacontology-forensics:queriesIntelligenceDatabase a owl:ObjectProperty ;
    rdfs:label "queries intelligence database"@en ;
    rdfs:comment "Links integration to specific databases queried."@en ;
    rdfs:domain cacontology-forensics:DatabaseIntelligenceIntegration ;
    rdfs:range uco-observable:ObservableObject .

cacontology-forensics:queryResponseTime a owl:DatatypeProperty ;
    rdfs:label "query response time"@en ;
    rdfs:comment "Average response time for database queries in seconds."@en ;
    rdfs:domain cacontology-forensics:DatabaseIntelligenceIntegration ;
    rdfs:range xsd:decimal .

cacontology-forensics:realTimeAlerts a owl:DatatypeProperty ;
    rdfs:label "real-time alerts"@en ;
    rdfs:comment "Number of real-time alerts generated from correlation analysis."@en ;
    rdfs:domain cacontology-forensics:RealTimeCorrelation ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-forensics:referralsReceived a owl:DatatypeProperty ;
    rdfs:label "referrals received"@en ;
    rdfs:comment "Number of referrals received from national and international law enforcement (e.g., 677 for SA JACET)."@en ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-forensics:riskLevelsAssigned a owl:DatatypeProperty ;
    rdfs:label "risk levels assigned"@en ;
    rdfs:comment "Number of users assigned risk levels through behavioral analysis."@en ;
    rdfs:domain cacontology-forensics:UserBehaviorForensics ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-forensics:searchWarrantAssisted a owl:DatatypeProperty ;
    rdfs:label "search warrant assisted"@en ;
    rdfs:comment "Whether detection dog assisted in search warrant execution."@en ;
    rdfs:domain cacontology-forensics:DetectionDogAssist ;
    rdfs:range xsd:boolean .

cacontology-forensics:sharesProcessingLoad a owl:ObjectProperty ;
    rdfs:label "shares processing load"@en ;
    rdfs:comment "Links distributed processing to load sharing arrangements."@en ;
    rdfs:domain cacontology-forensics:DistributedForensicProcessing ;
    rdfs:range uco-identity:Organization .

cacontology-forensics:standardizedProcessing a owl:DatatypeProperty ;
    rdfs:label "standardized processing"@en ;
    rdfs:comment "Whether standardized international processing protocols are used."@en ;
    rdfs:domain cacontology-forensics:InternationalEvidenceProcessing ;
    rdfs:range xsd:boolean .

cacontology-forensics:streamingDataRate a owl:DatatypeProperty ;
    rdfs:label "streaming data rate"@en ;
    rdfs:comment "Rate of streaming data processing in MB per second."@en ;
    rdfs:domain cacontology-forensics:RealTimeCorrelation ;
    rdfs:range xsd:decimal .

cacontology-forensics:suspiciousConnectionsIdentified a owl:DatatypeProperty ;
    rdfs:label "suspicious connections identified"@en ;
    rdfs:comment "Number of suspicious network connections identified."@en ;
    rdfs:domain cacontology-forensics:NetworkTrafficAnalysis ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-forensics:temporalPatternsIdentified a owl:DatatypeProperty ;
    rdfs:label "temporal patterns identified"@en ;
    rdfs:comment "Number of distinct temporal patterns identified."@en ;
    rdfs:domain cacontology-forensics:TemporalPatternAnalysis ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-forensics:temporalResolution a owl:DatatypeProperty ;
    rdfs:label "temporal resolution"@en ;
    rdfs:comment "Temporal resolution of analysis (seconds, minutes, hours, days)."@en ;
    rdfs:domain cacontology-forensics:TemporalPatternAnalysis ;
    rdfs:range xsd:string .

cacontology-forensics:timeRangeAnalyzed a owl:DatatypeProperty ;
    rdfs:label "time range analyzed"@en ;
    rdfs:comment "Time range covered by temporal pattern analysis in days."@en ;
    rdfs:domain cacontology-forensics:TemporalPatternAnalysis ;
    rdfs:range xsd:decimal .

cacontology-forensics:trainingDataSize a owl:DatatypeProperty ;
    rdfs:label "training data size"@en ;
    rdfs:comment "Size of training dataset used for ML correlation in millions of records."@en ;
    rdfs:domain cacontology-forensics:MachineLearningCorrelation ;
    rdfs:range xsd:decimal .

cacontology-forensics:trainsCorrelationModel a owl:ObjectProperty ;
    rdfs:label "trains correlation model"@en ;
    rdfs:comment "Links ML correlation to model training performed."@en ;
    rdfs:domain cacontology-forensics:MachineLearningCorrelation ;
    rdfs:range uco-observable:ObservableObject .

cacontology-forensics:triagesEvidence a owl:ObjectProperty ;
    rdfs:label "triages evidence"@en ;
    rdfs:comment "Links automated analysis to evidence triage systems."@en ;
    rdfs:domain cacontology-forensics:AutomatedContentAnalysis ;
    rdfs:range cacontology-forensics:EvidenceTriageSystem .

cacontology-forensics:userAccountsAnalyzed a owl:DatatypeProperty ;
    rdfs:label "user accounts analyzed"@en ;
    rdfs:comment "Number of user accounts analyzed in mass processing (nearly 2 million for Kidflix operation)."@en ;
    rdfs:domain cacontology-forensics:UserBehaviorForensics ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-forensics:utilisesSystem a owl:ObjectProperty ;
    rdfs:label "utilises system"@en ;
    rdfs:comment "Links processing action to automated systems used."@en ;
    rdfs:domain cacontology-forensics:MassDigitalEvidenceProcessing ;
    rdfs:range cacontology-forensics:AutomatedContentAnalysis .

cacontology-forensics:utilizesMachineLearning a owl:ObjectProperty ;
    rdfs:label "utilizes machine learning"@en ;
    rdfs:comment "Links correlation analysis to machine learning methods used."@en ;
    rdfs:domain cacontology-forensics:ContentCorrelationAnalysis ;
    rdfs:range cacontology-forensics:MachineLearningCorrelation .

cacontology-grooming:AlcoholFacilitatedGrooming a owl:Class ;
    rdfs:label "Alcohol Facilitated Grooming"@en ;
    rdfs:comment "Grooming using alcohol to impair victim judgment and reduce resistance."@en ;
    rdfs:subClassOf cacontology-grooming:SubstanceFacilitatedGrooming .

cacontology-grooming:BoundaryTestingProgressionBusinessRule a sh:NodeShape ;
    sh:sparql [ sh:message "High severity boundary violations require victim compliance response"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/grooming#"^^xsd:anyURI ;
                            sh:prefix "cacontology-grooming" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-grooming:boundaryViolationSeverity ?severity ;
                      cacontology-grooming:victimResponse ?response .
                FILTER (?severity >= 8 && ?response = "resistance")
            }
        """ ] ;
    sh:targetClass cacontology-grooming:BoundaryTesting .

cacontology-grooming:BoundaryTestingShape a sh:NodeShape ;
    rdfs:label "Boundary Testing Shape"@en ;
    rdfs:comment "Validation shape for boundary testing behavior instances with gUFO integration."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "gradual_escalation" "sudden_violation" "repeated_testing" "permission_seeking" "normalization" "desensitization" ) ;
            sh:maxCount 1 ;
            sh:message "Boundary testing must specify testing method from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-grooming:testingMethod ],
        [ sh:datatype xsd:string ;
            sh:in ( "resistance" "acceptance" "confusion" "compliance" "withdrawal" "normalization" ) ;
            sh:maxCount 1 ;
            sh:message "Victim response must be from the allowed list (gUFO quality aspect)."@en ;
            sh:minCount 0 ;
            sh:path cacontology-grooming:victimResponse ],
        [ sh:datatype xsd:integer ;
            sh:maxCount 1 ;
            sh:maxInclusive 10 ;
            sh:message "Boundary violation severity must be between 1 and 10 (gUFO quality aspect)"@en ;
            sh:minInclusive 1 ;
            sh:path cacontology-grooming:boundaryViolationSeverity ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Boundary testing may have begin timestamp (gUFO temporal)"@en ;
            sh:path gufo:hasBeginPointInXSDDateTimeStamp ],
        [ sh:datatype xsd:string ;
            sh:in ( "physical" "emotional" "sexual" "privacy" "authority" "social" "digital" ) ;
            sh:maxCount 1 ;
            sh:message "Boundary testing must specify boundary type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-grooming:boundaryType ] ;
    sh:targetClass cacontology-grooming:BoundaryTesting .

cacontology-grooming:CommunicationTacticsShape a sh:NodeShape ;
    rdfs:label "Communication Tactics Shape"@en ;
    rdfs:comment "Validation shape for communication tactics instances with gUFO integration."@en ;
    sh:property [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Communication tactics may have begin timestamp (gUFO temporal)"@en ;
            sh:path gufo:hasBeginPointInXSDDateTimeStamp ],
        [ sh:datatype xsd:string ;
            sh:in ( "text_messaging" "voice_calls" "video_calls" "social_media" "gaming_platforms" "email" "anonymous_chat" "encrypted_messaging" ) ;
            sh:maxCount 1 ;
            sh:message "Communication tactics must specify method from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-grooming:communicationMethod ],
        [ sh:datatype xsd:string ;
            sh:in ( "sporadic" "weekly" "daily" "multiple_daily" "constant" "on_demand" ) ;
            sh:maxCount 1 ;
            sh:message "Communication frequency must be from the allowed list (gUFO quality aspect)."@en ;
            sh:minCount 0 ;
            sh:path cacontology-grooming:communicationFrequency ],
        [ sh:datatype xsd:string ;
            sh:in ( "friendly" "caring" "romantic" "sexual" "threatening" "manipulative" "controlling" ) ;
            sh:maxCount 1 ;
            sh:message "Communication tone must be from the allowed list (gUFO quality aspect)."@en ;
            sh:minCount 0 ;
            sh:path cacontology-grooming:communicationTone ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Communication effectiveness must be between 0.0 and 1.0 (gUFO quality aspect)"@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-grooming:communicationEffectiveness ] ;
    sh:targetClass cacontology-grooming:CommunicationTactics .

cacontology-grooming:EmotionalVulnerabilityShape a sh:NodeShape ;
    rdfs:label "Emotional Vulnerability Shape"@en ;
    rdfs:comment "Validation shape for emotional vulnerability instances with gUFO integration."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "loneliness" "depression" "anxiety" "low_self_esteem" "anger" "confusion" "grief" "trauma_response" ) ;
            sh:maxCount 1 ;
            sh:message "Emotional vulnerability must specify emotional state from the allowed list (gUFO quality aspect)."@en ;
            sh:minCount 1 ;
            sh:path cacontology-grooming:emotionalState ],
        [ sh:datatype xsd:string ;
            sh:in ( "attention" "validation" "acceptance" "love" "security" "understanding" "belonging" "control" ) ;
            sh:maxCount 1 ;
            sh:message "Emotional need must be from the allowed list (gUFO quality aspect)."@en ;
            sh:minCount 0 ;
            sh:path cacontology-grooming:emotionalNeed ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Emotional intensity must be between 0.0 and 1.0 (gUFO quality aspect)"@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-grooming:emotionalIntensity ] ;
    sh:targetClass cacontology-grooming:EmotionalVulnerability .

cacontology-grooming:EscalationConsistencyBusinessRule a sh:NodeShape ;
    sh:sparql [ sh:message "Rapid escalation should have short duration and high predictability"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/grooming#"^^xsd:anyURI ;
                            sh:prefix "cacontology-grooming" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-grooming:escalationSpeed "very_fast" ;
                      cacontology-grooming:escalationDuration ?duration ;
                      cacontology-grooming:escalationPredictability ?predictability .
                FILTER (?duration > 30.0 || ?predictability < 0.7)
            }
        """ ] ;
    sh:targetClass cacontology-grooming:EscalationPattern .

cacontology-grooming:EscalationPatternShape a sh:NodeShape ;
    rdfs:label "Escalation Pattern Shape"@en ;
    rdfs:comment "Validation shape for escalation pattern instances with gUFO integration."@en ;
    sh:property [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Escalation pattern may have begin timestamp (gUFO temporal)"@en ;
            sh:path gufo:hasBeginPointInXSDDateTimeStamp ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Escalation pattern may have end timestamp (gUFO temporal)"@en ;
            sh:path gufo:hasEndPointInXSDDateTimeStamp ],
        [ sh:datatype xsd:string ;
            sh:in ( "gradual" "rapid" "stepped" "cyclical" "irregular" "sudden" "systematic" ) ;
            sh:maxCount 1 ;
            sh:message "Escalation pattern must specify escalation type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-grooming:escalationType ],
        [ sh:datatype xsd:string ;
            sh:in ( "very_slow" "slow" "moderate" "fast" "very_fast" "immediate" ) ;
            sh:maxCount 1 ;
            sh:message "Escalation pattern must specify escalation speed from the allowed list (gUFO quality aspect)."@en ;
            sh:minCount 1 ;
            sh:path cacontology-grooming:escalationSpeed ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 365.0 ;
            sh:message "Escalation duration must be between 0 and 365 days."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-grooming:escalationDuration ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Pattern confidence must be between 0.0 and 1.0 (gUFO quality aspect)."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-grooming:patternConfidence ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Escalation predictability must be between 0.0 and 1.0 (gUFO quality aspect)"@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-grooming:escalationPredictability ] ;
    sh:targetClass cacontology-grooming:EscalationPattern .

cacontology-grooming:ExploitationPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Exploitation Phase"@en ;
    rdfs:comment "Final phase involving direct sexual exploitation and abuse."@en ;
    rdfs:subClassOf cacontology-grooming:GroomingBehavior .

cacontology-grooming:ExploitsVulnerabilityShape a sh:PropertyShape ;
    sh:class cacontology-grooming:VictimVulnerability ;
    sh:description "Links grooming to victim vulnerability being exploited (gUFO aspect exploitation)" ;
    sh:minCount 0 ;
    sh:name "exploits vulnerability" ;
    sh:path cacontology-grooming:exploitsVulnerability .

cacontology-grooming:FollowsPatternShape a sh:PropertyShape ;
    sh:class cacontology-grooming:EscalationPattern ;
    sh:description "Links grooming to escalation pattern followed (gUFO temporal pattern)" ;
    sh:minCount 0 ;
    sh:name "follows pattern" ;
    sh:path cacontology-grooming:followsPattern .

cacontology-grooming:GraphicConversationGrooming a owl:Class ;
    rdfs:label "Graphic Conversation Grooming"@en ;
    rdfs:comment "Grooming involving progressively graphic sexual conversations."@en ;
    rdfs:subClassOf cacontology-grooming:SexualContentExchangeGrooming .

cacontology-grooming:GroomingBehaviorShape a sh:NodeShape ;
    rdfs:label "Grooming Behavior Shape"@en ;
    rdfs:comment "Validation shape for grooming behavior instances with gUFO integration."@en ;
    sh:property [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Grooming behavior may have begin timestamp (gUFO temporal)"@en ;
            sh:path gufo:hasBeginPointInXSDDateTimeStamp ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Grooming behavior may have end timestamp (gUFO temporal)"@en ;
            sh:path gufo:hasEndPointInXSDDateTimeStamp ],
        [ sh:datatype xsd:string ;
            sh:in ( "initial_contact" "trust_building" "isolation" "dependency_creation" "sexual_introduction" "maintenance" "control" ) ;
            sh:maxCount 1 ;
            sh:message "Grooming behavior must specify grooming stage from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-grooming:groomingStage ],
        [ sh:datatype xsd:string ;
            sh:in ( "attention_giving" "gift_giving" "special_treatment" "isolation_tactics" "boundary_testing" "sexual_content_introduction" "secrecy_enforcement" "threat_making" ) ;
            sh:maxCount 1 ;
            sh:message "Grooming behavior must specify behavior type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-grooming:behaviorType ],
        [ sh:datatype xsd:string ;
            sh:in ( "single_occurrence" "occasional" "frequent" "daily" "multiple_daily" "constant" ) ;
            sh:maxCount 1 ;
            sh:message "Behavior frequency must be from the allowed list (gUFO quality aspect)."@en ;
            sh:minCount 0 ;
            sh:path cacontology-grooming:behaviorFrequency ],
        [ sh:datatype xsd:string ;
            sh:in ( "low" "moderate" "high" "extreme" "overwhelming" ) ;
            sh:maxCount 1 ;
            sh:message "Behavior intensity must be from the allowed list (gUFO quality aspect)."@en ;
            sh:minCount 0 ;
            sh:path cacontology-grooming:behaviorIntensity ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Grooming effectiveness must be between 0.0 and 1.0 (gUFO quality aspect)"@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-grooming:groomingEffectiveness ],
        [ sh:datatype xsd:string ;
            sh:in ( "subtle" "moderate" "obvious" "aggressive" "extreme" "coercive" ) ;
            sh:maxCount 1 ;
            sh:message "Manipulation level must be from allowed list (gUFO quality aspect)"@en ;
            sh:path cacontology-grooming:manipulationLevel ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Grooming behavior may have a start time."@en ;
            sh:minCount 0 ;
            sh:path uco-core:startTime ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Grooming behavior may have an end time."@en ;
            sh:minCount 0 ;
            sh:path uco-core:endTime ] ;
    sh:targetClass cacontology-grooming:GroomingBehavior .

cacontology-grooming:GroomingBehaviorTemporalShape a sh:NodeShape ;
    sh:property [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Grooming behavior must have at most one begin timestamp (gUFO temporal)"@en ;
            sh:path gufo:hasBeginPointInXSDDateTimeStamp ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Grooming behavior must have at most one end timestamp (gUFO temporal)"@en ;
            sh:path gufo:hasEndPointInXSDDateTimeStamp ] ;
    sh:sparql [ sh:message "Grooming behavior end time must be after begin time (gUFO temporal ordering)"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "http://purl.org/nemo/gufo#"^^xsd:anyURI ;
                            sh:prefix "gufo" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this gufo:hasBeginPointInXSDDateTimeStamp ?beginTime .
                $this gufo:hasEndPointInXSDDateTimeStamp ?endTime .
                FILTER (?endTime <= ?beginTime)
            }
        """ ] ;
    sh:targetClass gufo:Event .

cacontology-grooming:GroomingDataQualityShape a sh:NodeShape ;
    rdfs:label "Grooming Data Quality Shape"@en ;
    rdfs:comment "Validates data quality for grooming behaviors with gUFO quality aspects."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Label should be between 5 and 200 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 5 ;
            sh:path rdfs:label ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 1000 ;
            sh:message "Comment should be between 10 and 1000 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 10 ;
            sh:path rdfs:comment ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Data confidence must be between 0.0 and 1.0 (gUFO quality aspect)"@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-grooming:dataConfidence ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Analysis completeness must be between 0.0 and 1.0 (gUFO quality aspect)"@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-grooming:analysisCompleteness ] ;
    sh:targetClass cacontology-grooming:GroomingBehavior .

cacontology-grooming:GroomingEventParticipationShape a sh:NodeShape ;
    sh:property [ sh:message "Every grooming event must have at least one participant (gUFO participation)"@en ;
            sh:minCount 1 ;
            sh:path [ sh:alternativePath ( cacontology-grooming:targetsVictim cacontology-grooming:performedBy cacontology-grooming:witnessedBy cacontology-grooming:facilitatedBy ) ] ] ;
    sh:targetClass gufo:Event .

cacontology-grooming:GroomingEventTypeValidationShape a sh:NodeShape ;
    sh:message "Every grooming EventType must extend gufo:Event"@en ;
    sh:property [ sh:hasValue gufo:EventType ;
            sh:minCount 1 ;
            sh:path rdf:type ],
        [ sh:class gufo:Event ;
            sh:minCount 1 ;
            sh:path rdfs:subClassOf ] ;
    sh:targetClass gufo:EventType .

cacontology-grooming:GroomingPhaseValidationShape a sh:NodeShape ;
    sh:message "Grooming phases are anti-rigid and cannot be subclasses of rigid Kinds"@en ;
    sh:not [ sh:property [ sh:class gufo:Kind ;
                    sh:path rdfs:subClassOf ] ] ;
    sh:property [ sh:hasValue gufo:Phase ;
            sh:minCount 1 ;
            sh:path rdf:type ] ;
    sh:targetClass gufo:Phase .

cacontology-grooming:GroomingProcessCompositionShape a sh:NodeShape ;
    sh:property [ sh:class gufo:Event ;
            sh:message "Grooming process must have at least one grooming behavior (gUFO part-whole)"@en ;
            sh:minCount 1 ;
            sh:path cacontology-grooming:hasGroomingBehavior ] ;
    sh:targetClass cacontology-grooming:GroomingProcess .

cacontology-grooming:GroomingRoleValidationShape a sh:NodeShape ;
    sh:message "Grooming roles are anti-rigid and cannot be subclasses of rigid Kinds"@en ;
    sh:not [ sh:property [ sh:class gufo:Kind ;
                    sh:path rdfs:subClassOf ] ] ;
    sh:property [ sh:hasValue gufo:Role ;
            sh:minCount 1 ;
            sh:path rdf:type ] ;
    sh:targetClass gufo:Role .

cacontology-grooming:GroomingTemporalValidationShape a sh:NodeShape ;
    rdfs:label "Grooming Temporal Validation Shape"@en ;
    rdfs:comment "Validates temporal consistency in grooming behaviors with gUFO integration."@en ;
    sh:sparql [ sh:message "Start time must be before end time when both are specified (gUFO temporal consistency)"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://ontology.unifiedcyberontology.org/uco/core/"^^xsd:anyURI ;
                            sh:prefix "uco-core" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this uco-core:startTime ?start ;
                      uco-core:endTime ?end .
                FILTER (?start >= ?end)
            }
        """ ],
        [ sh:message "gUFO temporal boundaries must be consistent with UCO temporal properties"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "http://purl.org/nemo/gufo#"^^xsd:anyURI ;
                            sh:prefix "gufo" ],
                        [ sh:namespace "https://ontology.unifiedcyberontology.org/uco/core/"^^xsd:anyURI ;
                            sh:prefix "uco-core" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this gufo:hasBeginPointInXSDDateTimeStamp ?gufoBegin ;
                      uco-core:startTime ?ucoStart .
                FILTER (?gufoBegin != ?ucoStart)
            }
        """ ] ;
    sh:targetClass cacontology-grooming:GroomingBehavior .

cacontology-grooming:ImmediateExploitationAttempt a owl:Class ;
    rdfs:label "Immediate Exploitation Attempt"@en ;
    rdfs:comment "Attempt to immediately exploit victim without extended grooming or relationship building."@en ;
    rdfs:subClassOf cacontology-grooming:RapidEscalationGrooming .

cacontology-grooming:InappropriateGift a owl:Class ;
    rdfs:label "Inappropriate Gift"@en ;
    rdfs:comment "Offer or provision of gifts, money, or favors as part of grooming process."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:ObservableObject .

cacontology-grooming:InitialContactPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Initial Contact Phase"@en ;
    rdfs:comment "First phase of grooming involving initial contact and relationship establishment."@en ;
    rdfs:subClassOf cacontology-grooming:GroomingBehavior .

cacontology-grooming:IsolationBehavior a owl:Class ;
    rdfs:label "Isolation Behavior"@en ;
    rdfs:comment "Attempts to separate child from parents, friends, or other support systems."@en ;
    rdfs:subClassOf cacontology-grooming:GroomingBehavior .

cacontology-grooming:IsolationPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Isolation Phase"@en ;
    rdfs:comment "Phase aimed at separating victim from support systems and creating dependency."@en ;
    rdfs:subClassOf cacontology-grooming:GroomingBehavior .

cacontology-grooming:IsolationTacticsShape a sh:NodeShape ;
    rdfs:label "Isolation Tactics Shape"@en ;
    rdfs:comment "Validation shape for isolation tactics instances with gUFO integration."@en ;
    sh:property [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Isolation tactics may have begin timestamp (gUFO temporal)"@en ;
            sh:path gufo:hasBeginPointInXSDDateTimeStamp ],
        [ sh:datatype xsd:string ;
            sh:in ( "physical_separation" "emotional_manipulation" "relationship_interference" "activity_restriction" "communication_control" "social_undermining" "dependency_creation" ) ;
            sh:maxCount 1 ;
            sh:message "Isolation tactics must specify method from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-grooming:isolationMethod ],
        [ sh:datatype xsd:string ;
            sh:in ( "ineffective" "partially_effective" "effective" "highly_effective" "complete" ) ;
            sh:maxCount 1 ;
            sh:message "Isolation effectiveness must be from the allowed list (gUFO quality aspect)."@en ;
            sh:minCount 0 ;
            sh:path cacontology-grooming:isolationEffectiveness ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Isolation progress rate must be between 0.0 and 1.0 (gUFO quality aspect)"@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-grooming:isolationProgressRate ] ;
    sh:targetClass cacontology-grooming:IsolationTactics .

cacontology-grooming:LeadsToMeetingShape a sh:PropertyShape ;
    sh:class cacontology-grooming:PhysicalMeetingArrangement ;
    sh:description "Links grooming to physical meeting arrangement (gUFO causal relationship)" ;
    sh:minCount 0 ;
    sh:name "leads to meeting" ;
    sh:path cacontology-grooming:leadsToMeeting .

cacontology-grooming:LocationSpecificGrooming a owl:Class ;
    rdfs:label "Location Specific Grooming"@en ;
    rdfs:comment "Grooming that references or prepares for specific physical locations."@en ;
    rdfs:subClassOf cacontology-grooming:GroomingBehavior .

cacontology-grooming:MaintenancePhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Maintenance Phase"@en ;
    rdfs:comment "Ongoing phase to maintain control and continue exploitation."@en ;
    rdfs:subClassOf cacontology-grooming:GroomingBehavior .

cacontology-grooming:MarijuanaFacilitatedGrooming a owl:Class ;
    rdfs:label "Marijuana Facilitated Grooming"@en ;
    rdfs:comment "Grooming using marijuana to reduce victim inhibitions and facilitate exploitation."@en ;
    rdfs:subClassOf cacontology-grooming:SubstanceFacilitatedGrooming .

cacontology-grooming:NormalizationBehavior a owl:Class ;
    rdfs:label "Normalization Behavior"@en ;
    rdfs:comment "Gradual introduction of sexual topics to normalize inappropriate behavior."@en ;
    rdfs:subClassOf cacontology-grooming:GroomingBehavior .

cacontology-grooming:NormalizationGrooming a owl:Class ;
    rdfs:label "Normalization Grooming"@en ;
    rdfs:comment "Grooming technique to normalize sexual conversations and content sharing."@en ;
    rdfs:subClassOf cacontology-grooming:SexualContentExchangeGrooming .

cacontology-grooming:OfflineControlEstablishment a owl:Class ;
    rdfs:label "Offline Control Establishment"@en ;
    rdfs:comment "Establishing control over victim in preparation for physical contact."@en ;
    rdfs:subClassOf cacontology-grooming:ManipulationPattern .

cacontology-grooming:OnlineGroomingSituation a owl:Class ;
    rdfs:label "Online Grooming Situation"@en ;
    rdfs:comment "Overall situation encompassing the grooming relationship and interactions."@en ;
    rdfs:subClassOf gufo:Situation .

cacontology-grooming:OnlineOfflineTransitionBusinessRule a sh:NodeShape ;
    sh:sparql [ sh:message "High transition likelihood requires completed trust building and isolation phases"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/grooming#"^^xsd:anyURI ;
                            sh:prefix "cacontology-grooming" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-grooming:transitionLikelihood ?likelihood .
                FILTER (?likelihood > 0.8)
                FILTER NOT EXISTS {
                    ?trustBuilding rdf:type cacontology-grooming:TrustBuilding ;
                                   cacontology-grooming:trustLevel "complete" .
                    ?isolation rdf:type cacontology-grooming:IsolationTactics ;
                               cacontology-grooming:isolationEffectiveness "highly_effective" .
                }
            }
        """ ] ;
    sh:targetClass cacontology-grooming:OnlineToOfflineProgression .

cacontology-grooming:OnlinePredationSituation a owl:Class ;
    rdfs:label "Online Predation Situation"@en ;
    rdfs:comment "Active situation where predator is engaging with potential victims."@en ;
    rdfs:subClassOf gufo:Situation .

cacontology-grooming:OnlinePredator a gufo:Role,
        owl:Class ;
    rdfs:label "Online Predator"@en ;
    rdfs:comment "Individual who engages in grooming behavior toward children online. Age-at-time for this offender MAY be captured via cacontology-temporal:AgeAtTimeSituation instances when age-gap and legal-capacity reasoning is required."@en ;
    rdfs:subClassOf uco-identity:Person ;
    owl:equivalentClass cacontology-gufo:OffenderRole .

cacontology-grooming:OnlineToOfflineProgressionShape a sh:NodeShape ;
    rdfs:label "Online to Offline Progression Shape"@en ;
    rdfs:comment "Validation shape for online to offline progression instances with gUFO integration."@en ;
    sh:property [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Online to offline progression must have begin timestamp (gUFO temporal)"@en ;
            sh:minCount 1 ;
            sh:path gufo:hasBeginPointInXSDDateTimeStamp ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 365 ;
            sh:message "Online to offline progression duration must be between 1 and 365 days."@en ;
            sh:minCount 1 ;
            sh:minInclusive 1 ;
            sh:path cacontology-grooming:progressionDuration ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 10 ;
            sh:message "Progression stages must be between 2 and 10 when specified."@en ;
            sh:minCount 0 ;
            sh:minInclusive 2 ;
            sh:path cacontology-grooming:progressionStages ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Transition likelihood must be between 0.0 and 1.0 (gUFO quality aspect)"@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-grooming:transitionLikelihood ] ;
    sh:targetClass cacontology-grooming:OnlineToOfflineProgression .

cacontology-grooming:PreyBehaviorPattern a owl:Class ;
    rdfs:label "Prey Behavior Pattern"@en ;
    rdfs:comment "Pattern of targeting vulnerable children or specific victim characteristics."@en ;
    rdfs:subClassOf cacontology-grooming:GroomingPattern .

cacontology-grooming:PrivilegedVictimTargeting a owl:Class ;
    rdfs:label "Privileged Victim Targeting"@en ;
    rdfs:comment "Targeting of victims from privileged backgrounds who may be less likely to report."@en ;
    rdfs:subClassOf cacontology-grooming:EliteInstitutionTargeting .

cacontology-grooming:ReciprocityGrooming a owl:Class ;
    rdfs:label "Reciprocity Grooming"@en ;
    rdfs:comment "Grooming technique encouraging victim to reciprocate with sexual content."@en ;
    rdfs:subClassOf cacontology-grooming:SexualContentExchangeGrooming .

cacontology-grooming:SecrecyRequest a owl:Class ;
    rdfs:label "Secrecy Request"@en ;
    rdfs:comment "Instruction to keep communication or relationship secret from parents or authorities."@en ;
    rdfs:subClassOf cacontology-grooming:GroomingMessage .

cacontology-grooming:SexualConsequenceGameBusinessRule a sh:NodeShape ;
    rdfs:label "Sexual Consequence Game Business Rule"@en ;
    rdfs:comment "Business rule: when multiple juveniles participate in a sexual consequence game, a gameContext SHOULD be recorded (Utah Christensen case modeling)."@en ;
    sh:sparql [ sh:message "Sexual consequence games with more than one juvenile participant SHOULD specify a gameContext (e.g., sleepover, peer_group)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-grooming:participantCount ?count .
                FILTER (?count > 1)
                FILTER NOT EXISTS {
                    $this cacontology-grooming:gameContext ?ctx .
                }
            }
        """ ] ;
    sh:targetClass cacontology-grooming:SexualConsequenceGameGrooming .

cacontology-grooming:SexualConsequenceGameGroomingShape a sh:NodeShape ;
    rdfs:label "Sexual Consequence Game Grooming Shape"@en ;
    rdfs:comment "Validation shape for physical-space 'sexual consequence game' grooming behaviors (Utah Christensen case), ensuring participant count and game context are captured for analytics."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:message "Sexual consequence game grooming should record at least one juvenile participant when participantCount is provided."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1 ;
            sh:path cacontology-grooming:participantCount ],
        [ sh:datatype xsd:string ;
            sh:in ( "sleepover" "peer_group" "family_gathering" "youth_activity" ) ;
            sh:maxCount 1 ;
            sh:message "Game context, when provided, must be one of: sleepover, peer_group, family_gathering, youth_activity."@en ;
            sh:minCount 0 ;
            sh:path cacontology-grooming:gameContext ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 500 ;
            sh:message "Rule structure description, when provided, should be between 10 and 500 characters."@en ;
            sh:minCount 0 ;
            sh:minLength 10 ;
            sh:path cacontology-grooming:ruleStructureDescription ] ;
    sh:targetClass cacontology-grooming:SexualConsequenceGameGrooming .

cacontology-grooming:SexualSolicitation a owl:Class ;
    rdfs:label "Sexual Solicitation"@en ;
    rdfs:comment "Message explicitly requesting sexual activity, images, or meetings from a child."@en ;
    rdfs:subClassOf cacontology-grooming:GroomingMessage .

cacontology-grooming:SexualizationPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Sexualization Phase"@en ;
    rdfs:comment "Phase involving introduction of sexual content and normalization of inappropriate behavior."@en ;
    rdfs:subClassOf cacontology-grooming:GroomingBehavior .

cacontology-grooming:SocialVulnerabilityShape a sh:NodeShape ;
    rdfs:label "Social Vulnerability Shape"@en ;
    rdfs:comment "Validation shape for social vulnerability instances with gUFO integration."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "none" "mild" "moderate" "severe" "complete" "self_imposed" ) ;
            sh:maxCount 1 ;
            sh:message "Social vulnerability must specify isolation level from the allowed list (gUFO quality aspect)."@en ;
            sh:minCount 1 ;
            sh:path cacontology-grooming:socialIsolation ],
        [ sh:datatype xsd:string ;
            sh:in ( "strong" "adequate" "limited" "minimal" "absent" "dysfunctional" ) ;
            sh:maxCount 1 ;
            sh:message "Social support must be from the allowed list (gUFO quality aspect)."@en ;
            sh:minCount 0 ;
            sh:path cacontology-grooming:socialSupport ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Social connectedness must be between 0.0 and 1.0 (gUFO quality aspect)"@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-grooming:socialConnectedness ] ;
    sh:targetClass cacontology-grooming:SocialVulnerability .

cacontology-grooming:StreetBasedGrooming a owl:Class ;
    rdfs:label "Street Based Grooming"@en ;
    rdfs:comment "Grooming that begins with street-based contact and recruitment."@en ;
    rdfs:subClassOf cacontology-grooming:PhysicalSpaceGrooming .

cacontology-grooming:TargetsVictimShape a sh:PropertyShape ;
    sh:class uco-identity:Person ;
    sh:description "Links grooming behavior to victim being targeted (gUFO participation)" ;
    sh:minCount 0 ;
    sh:name "targets victim" ;
    sh:path cacontology-grooming:targetsVictim .

cacontology-grooming:TeenageImpersonationGrooming a owl:Class ;
    rdfs:label "Teenage Impersonation Grooming"@en ;
    rdfs:comment "Grooming involving impersonation of teenage peer to gain victim trust."@en ;
    rdfs:subClassOf cacontology-grooming:PeerPersonaGrooming .

cacontology-grooming:TrustBuildingEffectivenessBusinessRule a sh:NodeShape ;
    sh:sparql [ sh:message "High trust development rate requires consistent communication tactics"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/grooming#"^^xsd:anyURI ;
                            sh:prefix "cacontology-grooming" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-grooming:trustDevelopmentRate ?rate ;
                      cacontology-grooming:usesCommunication ?comm .
                ?comm cacontology-grooming:communicationFrequency ?freq .
                FILTER (?rate > 0.8 && ?freq IN ("sporadic", "weekly"))
            }
        """ ] ;
    sh:targetClass cacontology-grooming:TrustBuilding .

cacontology-grooming:TrustBuildingPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Trust Building Phase"@en ;
    rdfs:comment "Phase focused on building emotional connection and trust with victim."@en ;
    rdfs:subClassOf cacontology-grooming:GroomingBehavior .

cacontology-grooming:TrustBuildingShape a sh:NodeShape ;
    rdfs:label "Trust Building Shape"@en ;
    rdfs:comment "Validation shape for trust building behavior instances with gUFO integration."@en ;
    sh:property [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Trust building may have begin timestamp (gUFO temporal)"@en ;
            sh:path gufo:hasBeginPointInXSDDateTimeStamp ],
        [ sh:datatype xsd:string ;
            sh:in ( "active_listening" "emotional_support" "shared_interests" "special_attention" "gift_giving" "privilege_granting" "secret_sharing" "understanding_persona" ) ;
            sh:maxCount 1 ;
            sh:message "Trust building must specify method from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-grooming:trustBuildingMethod ],
        [ sh:datatype xsd:string ;
            sh:in ( "minimal" "developing" "moderate" "strong" "complete" "absolute" ) ;
            sh:maxCount 1 ;
            sh:message "Trust level must be from the allowed list (gUFO quality aspect)."@en ;
            sh:minCount 0 ;
            sh:path cacontology-grooming:trustLevel ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Trust development rate must be between 0.0 and 1.0 (gUFO quality aspect)"@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-grooming:trustDevelopmentRate ] ;
    sh:targetClass cacontology-grooming:TrustBuilding .

cacontology-grooming:TrustThroughAnonymity a owl:Class ;
    rdfs:label "Trust Through Anonymity"@en ;
    rdfs:comment "Building trust by appearing less threatening through anonymous contact."@en ;
    rdfs:subClassOf cacontology-grooming:TrustBuildingBehavior .

cacontology-grooming:UnverifiedUserProfile a owl:Class ;
    rdfs:label "Unverified User Profile"@en ;
    rdfs:comment "User account with minimal or no identity verification enabling anonymous contact."@en ;
    rdfs:subClassOf uco-observable:Account .

cacontology-grooming:UsesCommunicationShape a sh:PropertyShape ;
    sh:class cacontology-grooming:CommunicationTactics ;
    sh:description "Links grooming to communication tactics used (gUFO participation in communication event)" ;
    sh:minCount 0 ;
    sh:name "uses communication" ;
    sh:path cacontology-grooming:usesCommunication .

cacontology-grooming:VehicleBasedGrooming a owl:Class ;
    rdfs:label "Vehicle Based Grooming"@en ;
    rdfs:comment "Grooming that uses vehicles for isolation and exploitation."@en ;
    rdfs:subClassOf cacontology-grooming:PhysicalSpaceGrooming .

cacontology-grooming:VictimComplianceInPhysicalMeeting a owl:Class ;
    rdfs:label "Victim Compliance in Physical Meeting"@en ;
    rdfs:comment "Victim's agreement or compliance with arranged physical meeting."@en ;
    rdfs:subClassOf cacontology-grooming:VictimResponse .

cacontology-grooming:VictimVulnerabilityShape a sh:NodeShape ;
    rdfs:label "Victim Vulnerability Shape"@en ;
    rdfs:comment "Validation shape for victim vulnerability instances with gUFO integration."@en ;
    sh:property [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Vulnerability may have begin timestamp (gUFO temporal)"@en ;
            sh:path gufo:hasBeginPointInXSDDateTimeStamp ],
        [ sh:datatype xsd:string ;
            sh:in ( "emotional" "social" "economic" "physical" "psychological" "developmental" "situational" "digital" ) ;
            sh:maxCount 1 ;
            sh:message "Victim vulnerability must specify vulnerability type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-grooming:vulnerabilityType ],
        [ sh:datatype xsd:string ;
            sh:in ( "low" "moderate" "high" "severe" "extreme" "critical" ) ;
            sh:maxCount 1 ;
            sh:message "Victim vulnerability must specify vulnerability level from the allowed list (gUFO quality aspect)."@en ;
            sh:minCount 1 ;
            sh:path cacontology-grooming:vulnerabilityLevel ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 20.0 ;
            sh:message "Vulnerability duration must be between 0 and 20 years."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-grooming:vulnerabilityDuration ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Exploitability score must be between 0.0 and 1.0 (gUFO quality aspect)"@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-grooming:exploitabilityScore ],
        [ sh:datatype xsd:string ;
            sh:in ( "stable" "fluctuating" "increasing" "decreasing" "episodic" ) ;
            sh:maxCount 1 ;
            sh:message "Vulnerability stability must be from allowed list (gUFO mode aspect)"@en ;
            sh:path cacontology-grooming:vulnerabilityStability ] ;
    sh:targetClass cacontology-grooming:VictimVulnerability .

cacontology-grooming:VictimVulnerabilitySituation a owl:Class ;
    rdfs:label "Victim Vulnerability Situation"@en ;
    rdfs:comment "Circumstances that make a child more susceptible to grooming."@en ;
    rdfs:subClassOf gufo:Situation .

cacontology-grooming:VulnerabilityAspectValidationShape a sh:NodeShape ;
    sh:message "Victim vulnerabilities must be properly classified as gUFO Aspects"@en ;
    sh:property [ sh:hasValue gufo:Aspect ;
            sh:minCount 1 ;
            sh:path rdf:type ] ;
    sh:targetClass gufo:Aspect .

cacontology-grooming:VulnerabilityExploitationBusinessRule a sh:NodeShape ;
    sh:sparql [ sh:message "High manipulation grooming behaviors must target critical vulnerabilities"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/grooming#"^^xsd:anyURI ;
                            sh:prefix "cacontology-grooming" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-grooming:manipulationLevel "extreme" ;
                      cacontology-grooming:exploitsVulnerability ?vulnerability .
                ?vulnerability cacontology-grooming:vulnerabilityLevel ?level .
                FILTER (?level NOT IN ("severe", "extreme", "critical"))
            }
        """ ] ;
    sh:targetClass cacontology-grooming:GroomingBehavior .

cacontology-grooming:acceleratesTrust a owl:ObjectProperty ;
    rdfs:label "accelerates trust"@en ;
    rdfs:comment "Links grooming to trust-building mechanism being accelerated."@en ;
    rdfs:domain cacontology-grooming:AcceleratedTrustExploitation ;
    rdfs:range cacontology-grooming:TrustBuildingBehavior .

cacontology-grooming:accountsUsed a owl:DatatypeProperty ;
    rdfs:label "accounts used"@en ;
    rdfs:comment "Number of fake accounts used in grooming process."@en ;
    rdfs:domain cacontology-grooming:MultipleAccountGrooming ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-grooming:administrationMethod a owl:DatatypeProperty ;
    rdfs:label "administration method"@en ;
    rdfs:comment "Method of substance administration (offered, forced, shared, deceptive)."@en ;
    rdfs:domain cacontology-grooming:SubstanceInducedVulnerabilityGrooming ;
    rdfs:range xsd:string .

cacontology-grooming:anonymousContactMethod a owl:DatatypeProperty ;
    rdfs:label "anonymous contact method"@en ;
    rdfs:comment "Method used for anonymous initial contact (random_messaging, response_to_post, platform_matching, profile_browsing)."@en ;
    rdfs:domain cacontology-grooming:AnonymousInitiation ;
    rdfs:range xsd:string .

cacontology-grooming:behaviorDuration a owl:DatatypeProperty ;
    rdfs:label "behavior duration"@en ;
    rdfs:comment "Length of time grooming behavior continued (in days)."@en ;
    rdfs:domain cacontology-grooming:GroomingBehavior ;
    rdfs:range xsd:integer .

cacontology-grooming:bypassesPhase a owl:ObjectProperty ;
    rdfs:label "bypasses phase"@en ;
    rdfs:comment "Links rapid escalation to traditional grooming phase being bypassed."@en ;
    rdfs:domain cacontology-grooming:RapidEscalationGrooming ;
    rdfs:range cacontology-grooming:GroomingPhase .

cacontology-grooming:commercialOfferType a owl:DatatypeProperty ;
    rdfs:label "commercial offer type"@en ;
    rdfs:comment "Type of commercial sexual activity offered (stripping, prostitution, escort_services)."@en ;
    rdfs:domain cacontology-grooming:ExplicitCommercialOfferGrooming ;
    rdfs:range xsd:string .

cacontology-grooming:contactFrequency a owl:DatatypeProperty ;
    rdfs:label "contact frequency"@en ;
    rdfs:comment "How often communication occurs (daily, several_times_daily, weekly)."@en ;
    rdfs:domain cacontology-grooming:GroomingBehavior ;
    rdfs:range xsd:string .

cacontology-grooming:contentType a owl:DatatypeProperty ;
    rdfs:label "content type"@en ;
    rdfs:comment "Type of content in grooming message (text, image, video, audio)."@en,
        "Type of sexual content exchanged (images, videos, text)."@en ;
    rdfs:domain cacontology-grooming:GroomingMessage,
        cacontology-grooming:SexualContentExchangeGrooming ;
    rdfs:range xsd:string .

cacontology-grooming:crossesStateBoundaries a owl:DatatypeProperty ;
    rdfs:label "crosses state boundaries"@en ;
    rdfs:comment "Whether arranged meeting involves crossing state lines."@en ;
    rdfs:domain cacontology-grooming:InterstateTransportPlan ;
    rdfs:range xsd:boolean .

cacontology-grooming:distressIndicators a owl:DatatypeProperty ;
    rdfs:label "distress indicators"@en ;
    rdfs:comment "Signs of distress in victim's responses."@en ;
    rdfs:domain cacontology-grooming:VictimResponse ;
    rdfs:range xsd:string .

cacontology-grooming:economicIncentiveAmount a owl:DatatypeProperty ;
    rdfs:label "economic incentive amount"@en ;
    rdfs:comment "Specific monetary amount mentioned in economic incentive."@en ;
    rdfs:domain cacontology-grooming:EconomicIncentiveGrooming ;
    rdfs:range xsd:decimal .

cacontology-grooming:emotionalTone a owl:DatatypeProperty ;
    rdfs:label "emotional tone"@en ;
    rdfs:comment "Emotional approach used in message (caring, threatening, manipulative, seductive)."@en ;
    rdfs:domain cacontology-grooming:GroomingMessage ;
    rdfs:range xsd:string .

cacontology-grooming:escalationRate a owl:DatatypeProperty ;
    rdfs:label "escalation rate"@en ;
    rdfs:comment "Speed of escalation from initial contact to explicit content (days)."@en ;
    rdfs:domain cacontology-grooming:EscalationPattern ;
    rdfs:range xsd:integer .

cacontology-grooming:escalationTimeframe a owl:DatatypeProperty ;
    rdfs:label "escalation timeframe"@en ;
    rdfs:comment "Time from initial contact to exploitation attempt in hours."@en ;
    rdfs:domain cacontology-grooming:RapidEscalationGrooming ;
    rdfs:range xsd:decimal .

cacontology-grooming:evidenceValue a owl:DatatypeProperty ;
    rdfs:label "evidence value"@en ;
    rdfs:comment "Assessment of grooming behavior's value as evidence (high, medium, low)."@en ;
    rdfs:domain cacontology-grooming:GroomingBehavior ;
    rdfs:range xsd:string .

cacontology-grooming:exchangesContent a owl:ObjectProperty ;
    rdfs:label "exchanges content"@en ;
    rdfs:comment "Links grooming to sexual content being exchanged."@en ;
    rdfs:domain cacontology-grooming:SexualContentExchangeGrooming ;
    rdfs:range uco-observable:ObservableObject .

cacontology-grooming:exhibitsPattern a owl:ObjectProperty ;
    rdfs:label "exhibits pattern"@en ;
    rdfs:comment "Links grooming behavior to an identifiable pattern."@en ;
    rdfs:domain cacontology-grooming:GroomingBehavior ;
    rdfs:range cacontology-grooming:GroomingPattern .

cacontology-grooming:explicitnessLevel a owl:DatatypeProperty ;
    rdfs:label "explicitness level"@en ;
    rdfs:comment "Level of sexual explicitness in content (none, suggestive, explicit, graphic)."@en ;
    rdfs:domain cacontology-grooming:GroomingMessage ;
    rdfs:range xsd:string .

cacontology-grooming:exploitsOpportunity a owl:ObjectProperty ;
    rdfs:label "exploits opportunity"@en ;
    rdfs:comment "Links opportunistic grooming to specific opportunity being exploited."@en ;
    rdfs:domain cacontology-grooming:OpportunisticGrooming ;
    rdfs:range uco-core:UcoObject .

cacontology-grooming:exploitsReputation a owl:ObjectProperty ;
    rdfs:label "exploits reputation"@en ;
    rdfs:comment "Links grooming to institutional reputation being exploited."@en ;
    rdfs:domain cacontology-grooming:ReputationBasedSilencing ;
    rdfs:range cacontology-educational:EducationalInstitution .

cacontology-grooming:facilitatesWithSubstance a owl:ObjectProperty ;
    rdfs:label "facilitates with substance"@en ;
    rdfs:comment "Links grooming to substance used for facilitation."@en ;
    rdfs:domain cacontology-grooming:SubstanceFacilitatedGrooming ;
    rdfs:range uco-observable:ObservableObject .

cacontology-grooming:groomingPhaseDuration a owl:DatatypeProperty ;
    rdfs:label "grooming phase duration"@en ;
    rdfs:comment "Duration of grooming phase."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:duration .

cacontology-grooming:hasGroomingPhaseBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has grooming phase begin point"@en ;
    rdfs:comment "Temporal begin point for grooming phase."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-grooming:hasGroomingPhaseEndPoint a owl:DatatypeProperty ;
    rdfs:label "has grooming phase end point"@en ;
    rdfs:comment "Temporal end point for grooming phase."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-grooming:hasRoleBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has role begin point"@en ;
    rdfs:comment "Temporal begin point for grooming role."@en ;
    rdfs:domain gufo:Role ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-grooming:hasRoleEndPoint a owl:DatatypeProperty ;
    rdfs:label "has role end point"@en ;
    rdfs:comment "Temporal end point for grooming role."@en ;
    rdfs:domain gufo:Role ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-grooming:hasVulnerability a owl:ObjectProperty ;
    rdfs:label "has vulnerability"@en ;
    rdfs:comment "Links child victim to specific vulnerabilities that may be exploited."@en ;
    rdfs:domain cacontology-grooming:ChildVictim ;
    rdfs:range cacontology-grooming:VictimVulnerability .

cacontology-grooming:identityVerificationRequired a owl:DatatypeProperty ;
    rdfs:label "identity verification required"@en ;
    rdfs:comment "Whether platform requires identity verification for messaging."@en ;
    rdfs:domain cacontology-grooming:AnonymousPlatformContact ;
    rdfs:range xsd:boolean .

cacontology-grooming:impairmentLevel a owl:DatatypeProperty ;
    rdfs:label "impairment level"@en ;
    rdfs:comment "Level of victim impairment from substances (mild, moderate, severe)."@en ;
    rdfs:domain cacontology-grooming:ImpairmentBasedGrooming ;
    rdfs:range xsd:string .

cacontology-grooming:impersonatedRole a owl:DatatypeProperty ;
    rdfs:label "impersonated role"@en ;
    rdfs:comment "Role impersonated during grooming (student, peer, teenager)."@en ;
    rdfs:domain cacontology-grooming:PeerPersonaGrooming ;
    rdfs:range xsd:string .

cacontology-grooming:impersonatesRole a owl:ObjectProperty ;
    rdfs:label "impersonates role"@en ;
    rdfs:comment "Links grooming to role being impersonated."@en ;
    rdfs:domain cacontology-grooming:PeerPersonaGrooming ;
    rdfs:range uco-role:Role .

cacontology-grooming:initialContactPretense a owl:DatatypeProperty ;
    rdfs:label "initial contact pretense"@en ;
    rdfs:comment "False reason given for initial contact (shared_interests, age_misrepresentation, help_offering, casual_conversation)."@en ;
    rdfs:domain cacontology-grooming:AnonymousInitiation ;
    rdfs:range xsd:string .

cacontology-grooming:initiationMethod a owl:DatatypeProperty ;
    rdfs:label "initiation method"@en ;
    rdfs:comment "Method used to initiate sexual content exchange."@en ;
    rdfs:domain cacontology-grooming:InitiatorContentSending ;
    rdfs:range xsd:string .

cacontology-grooming:institutionPrestige a owl:DatatypeProperty ;
    rdfs:label "institution prestige"@en ;
    rdfs:comment "Prestige level of targeted institution (elite, prestigious, standard)."@en ;
    rdfs:domain cacontology-grooming:EliteInstitutionTargeting ;
    rdfs:range xsd:string .

cacontology-grooming:institutionsTargeted a owl:DatatypeProperty ;
    rdfs:label "institutions targeted"@en ;
    rdfs:comment "Number of educational institutions from which victims were targeted."@en ;
    rdfs:domain cacontology-grooming:CrossInstitutionalGrooming ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-grooming:involvesInterstateTransport a owl:ObjectProperty ;
    rdfs:label "involves interstate transport"@en ;
    rdfs:comment "Links travel arrangement to interstate transportation planning."@en ;
    rdfs:domain cacontology-grooming:TravelArrangement ;
    rdfs:range cacontology-grooming:InterstateTransportPlan .

cacontology-grooming:leveragesPosition a owl:ObjectProperty ;
    rdfs:label "leverages position"@en ;
    rdfs:comment "Links grooming to educator position being leveraged."@en ;
    rdfs:domain cacontology-grooming:PositionOfTrustGrooming ;
    rdfs:range cacontology-educational:EducatorRole .

cacontology-grooming:manipulationTechnique a owl:DatatypeProperty ;
    rdfs:label "manipulation technique"@en ;
    rdfs:comment "Specific psychological manipulation technique employed."@en ;
    rdfs:domain cacontology-grooming:ManipulationPattern ;
    rdfs:range xsd:string .

cacontology-grooming:meetingLocationSpecified a owl:DatatypeProperty ;
    rdfs:label "meeting location specified"@en ;
    rdfs:comment "Whether specific physical meeting location was arranged."@en ;
    rdfs:domain cacontology-grooming:PhysicalMeetingArrangement ;
    rdfs:range xsd:boolean .

cacontology-grooming:monetizationTimeframe a owl:DatatypeProperty ;
    rdfs:label "monetization timeframe"@en ;
    rdfs:comment "Proposed timeframe for monetization (immediate, same_day, within_week)."@en ;
    rdfs:domain cacontology-grooming:ImmediateMonetizationGrooming ;
    rdfs:range xsd:string .

cacontology-grooming:occursInSpace a owl:ObjectProperty ;
    rdfs:label "occurs in space"@en ;
    rdfs:comment "Links physical space grooming to location where it occurs."@en ;
    rdfs:domain cacontology-grooming:PhysicalSpaceGrooming ;
    rdfs:range uco-location:Location .

cacontology-grooming:opportunityType a owl:DatatypeProperty ;
    rdfs:label "opportunity type"@en ;
    rdfs:comment "Type of opportunity exploited (vulnerability, isolation, need_for_help)."@en ;
    rdfs:domain cacontology-grooming:OpportunisticGrooming ;
    rdfs:range xsd:string .

cacontology-grooming:physicalLocation a owl:DatatypeProperty ;
    rdfs:label "physical location"@en ;
    rdfs:comment "Type of physical location used for grooming (street, vehicle, isolated_area)."@en ;
    rdfs:domain cacontology-grooming:PhysicalSpaceGrooming ;
    rdfs:range xsd:string .

cacontology-grooming:platformAnonymityLevel a owl:DatatypeProperty ;
    rdfs:label "platform anonymity level"@en ;
    rdfs:comment "Level of anonymity provided by platform (full_anonymous, guest_allowed, minimal_verification, verified_only)."@en ;
    rdfs:domain cacontology-grooming:AnonymousPlatformContact ;
    rdfs:range xsd:string .

cacontology-grooming:primaryPlatform a owl:ObjectProperty ;
    rdfs:label "primary platform"@en ;
    rdfs:comment "Main digital platform where grooming communication occurred."@en ;
    rdfs:domain cacontology-grooming:GroomingBehavior ;
    rdfs:range uco-observable:DigitalService .

cacontology-grooming:progressesToPhysicalMeeting a owl:ObjectProperty ;
    rdfs:label "progresses to physical meeting"@en ;
    rdfs:comment "Links online grooming to physical meeting arrangements."@en ;
    rdfs:domain cacontology-grooming:GroomingBehavior ;
    rdfs:range cacontology-grooming:PhysicalMeetingArrangement .

cacontology-grooming:propositionExplicitness a owl:DatatypeProperty ;
    rdfs:label "proposition explicitness"@en ;
    rdfs:comment "Level of explicitness in trafficking proposition (subtle, direct, explicit, blunt)."@en ;
    rdfs:domain cacontology-grooming:DirectTraffickingPropositionGrooming ;
    rdfs:range xsd:string .

cacontology-grooming:prosecutionRelevance a owl:DatatypeProperty ;
    rdfs:label "prosecution relevance"@en ;
    rdfs:comment "Relevance of grooming evidence to prosecution case."@en ;
    rdfs:domain cacontology-grooming:GroomingBehavior ;
    rdfs:range xsd:string .

cacontology-grooming:recruitmentDirectness a owl:DatatypeProperty ;
    rdfs:label "recruitment directness"@en ;
    rdfs:comment "Level of directness in recruitment approach (subtle, moderate, direct, blunt)."@en ;
    rdfs:domain cacontology-grooming:BluntRecruitmentGrooming ;
    rdfs:range xsd:string .

cacontology-grooming:requestsSecrecy a owl:DatatypeProperty ;
    rdfs:label "requests secrecy"@en ;
    rdfs:comment "Whether grooming involves requests to keep relationship secret."@en ;
    rdfs:domain cacontology-grooming:GroomingBehavior ;
    rdfs:range xsd:boolean .

cacontology-grooming:rolePlayingTactic a owl:DatatypeProperty ;
    rdfs:label "role playing tactic"@en ;
    rdfs:comment "False role claimed by predator (peer, mentor, romantic_interest, authority_figure)."@en ;
    rdfs:domain cacontology-grooming:GroomingBehavior ;
    rdfs:range xsd:string .

cacontology-grooming:sameDayProgression a owl:DatatypeProperty ;
    rdfs:label "same day progression"@en ;
    rdfs:comment "Whether grooming progressed from contact to exploitation within same day."@en ;
    rdfs:domain cacontology-grooming:SameDayProgression ;
    rdfs:range xsd:boolean .

cacontology-grooming:seekingHelp a owl:DatatypeProperty ;
    rdfs:label "seeking help"@en ;
    rdfs:comment "Whether victim attempted to seek help or report the contact."@en ;
    rdfs:domain cacontology-grooming:VictimResponse ;
    rdfs:range xsd:boolean .

cacontology-grooming:skippedPhases a owl:DatatypeProperty ;
    rdfs:label "skipped phases"@en ;
    rdfs:comment "Traditional grooming phases that were bypassed (trust_building, isolation, normalization)."@en ;
    rdfs:domain cacontology-grooming:SkippedGroomingPhases ;
    rdfs:range xsd:string .

cacontology-grooming:substanceType a owl:DatatypeProperty ;
    rdfs:label "substance type"@en ;
    rdfs:comment "Type of substance used to facilitate grooming (alcohol, marijuana, other_drugs)."@en ;
    rdfs:domain cacontology-grooming:SubstanceFacilitatedGrooming ;
    rdfs:range xsd:string .

cacontology-grooming:targetsInstitution a owl:ObjectProperty ;
    rdfs:label "targets institution"@en ;
    rdfs:comment "Links grooming to educational institution being targeted."@en ;
    rdfs:domain cacontology-grooming:CrossInstitutionalGrooming ;
    rdfs:range cacontology-educational:EducationalInstitution .

cacontology-grooming:timeOfContact a owl:DatatypeProperty ;
    rdfs:label "time of contact"@en ;
    rdfs:comment "Typical time of day when contact occurs (morning, afternoon, evening, late_night)."@en ;
    rdfs:domain cacontology-grooming:GroomingBehavior ;
    rdfs:range xsd:string .

cacontology-grooming:transitionSpeed a owl:DatatypeProperty ;
    rdfs:label "transition speed"@en ;
    rdfs:comment "Speed of transition from public to private space (immediate, rapid, gradual)."@en ;
    rdfs:domain cacontology-grooming:PublicToPrivateGrooming ;
    rdfs:range xsd:string .

cacontology-grooming:transitionsToLocation a owl:ObjectProperty ;
    rdfs:label "transitions to location"@en ;
    rdfs:comment "Links public-to-private grooming to exploitation location."@en ;
    rdfs:domain cacontology-grooming:PublicToPrivateGrooming ;
    rdfs:range uco-location:Location .

cacontology-grooming:transportationProposed a owl:DatatypeProperty ;
    rdfs:label "transportation proposed"@en ;
    rdfs:comment "Type of transportation proposed for meeting (predator_travel, victim_travel, mutual_meeting_point)."@en ;
    rdfs:domain cacontology-grooming:TravelArrangement ;
    rdfs:range xsd:string .

cacontology-grooming:trustExploitationSpeed a owl:DatatypeProperty ;
    rdfs:label "trust exploitation speed"@en ;
    rdfs:comment "Speed of trust exploitation (immediate, rapid, accelerated)."@en ;
    rdfs:domain cacontology-grooming:AcceleratedTrustExploitation ;
    rdfs:range xsd:string .

cacontology-grooming:usesGifts a owl:DatatypeProperty ;
    rdfs:label "uses gifts"@en ;
    rdfs:comment "Whether grooming involves offering gifts or money."@en ;
    rdfs:domain cacontology-grooming:GroomingBehavior ;
    rdfs:range xsd:boolean .

cacontology-grooming:usesThreats a owl:DatatypeProperty ;
    rdfs:label "uses threats"@en ;
    rdfs:comment "Whether grooming involves threats or intimidation."@en ;
    rdfs:domain cacontology-grooming:GroomingBehavior ;
    rdfs:range xsd:boolean .

cacontology-grooming:utilizesPlatformFeature a owl:ObjectProperty ;
    rdfs:label "utilizes platform feature"@en ;
    rdfs:comment "Links anonymous contact to specific platform features that enable anonymity."@en ;
    rdfs:domain cacontology-grooming:AnonymousPlatformContact ;
    rdfs:range cacontology-grooming:PlatformAnonymityFeature .

cacontology-grooming:victimCompliance a owl:DatatypeProperty ;
    rdfs:label "victim compliance"@en ;
    rdfs:comment "Level of victim compliance with requests (resistant, hesitant, compliant, eager)."@en ;
    rdfs:domain cacontology-grooming:VictimResponse ;
    rdfs:range xsd:string .

cacontology-grooming:victimImpact a owl:DatatypeProperty ;
    rdfs:label "victim impact"@en ;
    rdfs:comment "Assessment of psychological impact on victim (minimal, moderate, severe, extreme)."@en ;
    rdfs:domain cacontology-grooming:GroomingBehavior ;
    rdfs:range xsd:string .

cacontology-gufo:AgeAtTimeSituationShape a sh:NodeShape ;
    rdfs:label "Age At Time Situation Shape"@en ;
    sh:property [ sh:class uco-identity:Person ;
            sh:maxCount 1 ;
            sh:message "AgeAtTimeSituation must be linked to exactly one person via cacontology-temporal:ageSubject."@en ;
            sh:minCount 1 ;
            sh:path cacontology-temporal:ageSubject ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:message "AgeAtTimeSituation must have exactly one non-negative numeric age value in years via cacontology-temporal:hasAgeInYears."@en ;
            sh:minCount 1 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-temporal:hasAgeInYears ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "AgeAtTimeSituation must have a begin timestamp (when the attributed age becomes valid)."@en ;
            sh:minCount 1 ;
            sh:path gufo:hasBeginPointInXSDDateTimeStamp ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "AgeAtTimeSituation may have at most one end timestamp (when the attributed age ceases to be valid)."@en ;
            sh:path gufo:hasEndPointInXSDDateTimeStamp ],
        [ sh:hasValue cacontology-temporal:Age ;
            sh:maxCount 1 ;
            sh:message "AgeAtTimeSituation, when specifying a quality type, MUST use cacontology-temporal:Age via cacontology-temporal:concernsAgeQuality (a subproperty of gufo:concernsQualityType)."@en ;
            sh:path cacontology-temporal:concernsAgeQuality ] ;
    sh:sparql [ sh:message "For AgeAtTimeSituation, the begin timestamp must be strictly earlier than the end timestamp when both are present."@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/temporal#"^^xsd:anyURI ;
                            sh:prefix "cacontology-temporal" ],
                        [ sh:namespace "http://purl.org/nemo/gufo#"^^xsd:anyURI ;
                            sh:prefix "gufo" ] ] ;
            sh:select """
            SELECT ?this
            WHERE {
                ?this gufo:hasBeginPointInXSDDateTimeStamp ?begin .
                ?this gufo:hasEndPointInXSDDateTimeStamp ?end .
                FILTER (?begin >= ?end)
            }
        """ ] ;
    sh:targetClass cacontology-temporal:AgeAtTimeSituation .

cacontology-gufo:CSAMIncidentShape a sh:NodeShape ;
    rdfs:label "CSAM Incident Shape"@en ;
    sh:property [ sh:hasValue gufo:SubKind ;
            sh:message "CSAM Incident must be gUFO SubKind"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ],
        [ sh:message "CSAM incident must have digital artifact facets"@en ;
            sh:minCount 1 ;
            sh:path uco-core:hasFacet ] ;
    sh:targetClass cacontology-gufo:CSAMIncident .

cacontology-gufo:ChildSexualAbuseEventShape a sh:NodeShape ;
    rdfs:label "Child Sexual Abuse Event Shape"@en ;
    sh:property [ sh:hasValue gufo:Kind ;
            sh:message "Child Sexual Abuse Event must be gUFO Kind"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ] ;
    sh:sparql [ sh:message "Criminal event must involve victim and offender roles"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/gufo#"^^xsd:anyURI ;
                            sh:prefix "cacontology-gufo" ] ] ;
            sh:select """
            SELECT ?this
            WHERE {
                ?this a cacontology-gufo:ChildSexualAbuseEvent .
                FILTER NOT EXISTS {
                    ?victimRole a cacontology-gufo:VictimRole ;
                               cacontology-gufo:participatesInEvent ?this .
                } FILTER NOT EXISTS {
                    ?offenderRole a cacontology-gufo:OffenderRole ;
                                 cacontology-gufo:participatesInEvent ?this .
                }
            }
        """ ] ;
    sh:targetClass cacontology-gufo:ChildSexualAbuseEvent .

cacontology-gufo:CompletedPhaseShape a sh:NodeShape ;
    rdfs:label "Completed Phase Shape"@en ;
    sh:property [ sh:message "Completed phase must have end point"@en ;
            sh:minCount 1 ;
            sh:path cacontology-gufo:hasPhaseEndPoint ] ;
    sh:targetClass cacontology-gufo:CompletedPhase .

cacontology-gufo:EventShape a sh:NodeShape ;
    rdfs:label "gUFO Event Shape"@en ;
    sh:property [ sh:hasValue gufo:Event ;
            sh:message "Event must be typed as gUFO Event"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Event can have at most one begin point"@en ;
            sh:path gufo:hasBeginPointInXSDDateTimeStamp ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Event can have at most one end point"@en ;
            sh:path gufo:hasEndPointInXSDDateTimeStamp ] ;
    sh:targetClass gufo:Event .

cacontology-gufo:FoundationalTypeConsistencyShape a sh:NodeShape ;
    rdfs:label "gUFO Foundational Type Consistency Shape"@en ;
    sh:sparql [ sh:message "All gUFO entities must have proper foundational typing"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "http://purl.org/nemo/gufo#"^^xsd:anyURI ;
                            sh:prefix "gufo" ] ] ;
            sh:select """
            SELECT ?entity
            WHERE {
                {
                    ?entity a gufo:Kind .
                    FILTER NOT EXISTS { ?entity a gufo:Object . }
                } UNION {
                    ?entity a gufo:Phase .
                    FILTER NOT EXISTS { ?entity a gufo:AntiRigidType . }
                } UNION {
                    ?entity a gufo:Role .
                    FILTER NOT EXISTS { ?entity a gufo:AntiRigidType . }
                } UNION {
                    ?entity a gufo:Event .
                    FILTER NOT EXISTS { ?entity a gufo:Perdurant . }
                } UNION {
                    ?entity a gufo:Situation .
                    FILTER NOT EXISTS { ?entity a gufo:SituationType . }
                }
            }
        """ ] ;
    sh:targetNode cacontology-gufo:Investigation .

cacontology-gufo:GroomingSolicitationShape a sh:NodeShape ;
    rdfs:label "Grooming Solicitation Shape"@en ;
    sh:property [ sh:hasValue gufo:SubKind ;
            sh:message "Grooming Solicitation must be gUFO SubKind"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ],
        [ sh:message "Grooming must involve at least victim and offender"@en ;
            sh:minCount 2 ;
            sh:path cacontology-gufo:participatesInEvent ] ;
    sh:targetClass cacontology-gufo:GroomingSolicitation .

cacontology-gufo:InitialPhaseShape a sh:NodeShape ;
    rdfs:label "Initial Phase Shape"@en ;
    sh:property [ sh:message "Initial phase must have begin point"@en ;
            sh:minCount 1 ;
            sh:path cacontology-gufo:hasPhaseBeginPoint ] ;
    sh:targetClass cacontology-gufo:InitialPhase .

cacontology-gufo:InvestigationActiveSituationShape a sh:NodeShape ;
    rdfs:label "Investigation Active Situation Shape"@en ;
    sh:sparql [ sh:message "Active investigation situation must correspond to active phase"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/gufo#"^^xsd:anyURI ;
                            sh:prefix "cacontology-gufo" ] ] ;
            sh:select """
            SELECT ?this
            WHERE {
                ?this a cacontology-gufo:InvestigationActiveSituation .
                ?investigation cacontology-gufo:inPhase ?phase .
                FILTER NOT EXISTS {
                    ?phase a cacontology-gufo:AnalysisPhase .
                } FILTER NOT EXISTS {
                    ?phase a cacontology-gufo:LegalProcessPhase .
                } FILTER NOT EXISTS {
                    ?phase a cacontology-gufo:EvidencePhase .
                } FILTER NOT EXISTS {
                    ?phase a cacontology-gufo:ResolutionPhase .
                }
            }
        """ ] ;
    sh:targetClass cacontology-gufo:InvestigationActiveSituation .

cacontology-gufo:InvestigationCompletenessShape a sh:NodeShape ;
    rdfs:label "Investigation Completeness Shape"@en ;
    sh:sparql [ sh:message "Investigation must have coherent role and event participation"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/gufo#"^^xsd:anyURI ;
                            sh:prefix "cacontology-gufo" ],
                        [ sh:namespace "https://cacontology.projectvic.org/gufo#"^^xsd:anyURI ;
                            sh:prefix "cacontology-gufo" ] ] ;
            sh:select """
            PREFIX cacontology-gufo: <https://cacontology.projectvic.org/gufo#>
            PREFIX gufo: <http://purl.org/nemo/gufo#>
            SELECT ?this
            WHERE {
                ?this cacontology-gufo:hasRole ?role .
                ?role cacontology-gufo:participatesInInvestigation ?this .
                FILTER NOT EXISTS {
                    ?role cacontology-gufo:participatesInEvent ?event .
                    ?event a gufo:Event .
                }
            }
        """ ] ;
    sh:targetClass cacontology-gufo:Investigation .

cacontology-gufo:InvestigationShape a sh:NodeShape ;
    rdfs:label "gUFO Investigation Shape"@en ;
    sh:property [ sh:hasValue gufo:Kind ;
            sh:message "Investigation must be typed as gUFO Kind"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ],
        [ sh:class gufo:Phase ;
            sh:maxCount 1 ;
            sh:message "Investigation must be in exactly one phase"@en ;
            sh:minCount 1 ;
            sh:path cacontology-gufo:inPhase ],
        [ sh:class gufo:Role ;
            sh:message "Investigation must have at least one role"@en ;
            sh:minCount 1 ;
            sh:path cacontology-gufo:hasRole ] ;
    sh:targetClass cacontology-gufo:Investigation .

cacontology-gufo:InvestigationTemporalConsistencyShape a sh:NodeShape ;
    rdfs:label "Investigation Temporal Consistency Shape"@en ;
    sh:sparql [ sh:message "Investigation events must occur within phase timeframes"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/gufo#"^^xsd:anyURI ;
                            sh:prefix "cacontology-gufo" ],
                        [ sh:namespace "http://purl.org/nemo/gufo#"^^xsd:anyURI ;
                            sh:prefix "gufo" ] ] ;
            sh:select """
            SELECT ?this
            WHERE {
                ?this cacontology-gufo:hasPhase ?phase .
                ?phase cacontology-gufo:hasPhaseBeginPoint ?phaseBegin ;
                       cacontology-gufo:hasPhaseEndPoint ?phaseEnd .
                ?event cacontology-gufo:occursInSituation ?situation .
                ?event gufo:hasBeginPointInXSDDateTimeStamp ?eventBegin .
                FILTER (?eventBegin < ?phaseBegin || ?eventBegin > ?phaseEnd)
            }
        """ ] ;
    sh:targetClass cacontology-gufo:Investigation .

cacontology-gufo:OffenderRoleShape a sh:NodeShape ;
    rdfs:label "Offender Role Shape"@en ;
    sh:property [ sh:message "Offender role must have begin point (when offense started)"@en ;
            sh:minCount 1 ;
            sh:path cacontology-gufo:hasRoleBeginPoint ] ;
    sh:targetClass cacontology-gufo:OffenderRole .

cacontology-gufo:PhaseShape a sh:NodeShape ;
    rdfs:label "gUFO Phase Shape"@en ;
    sh:property [ sh:hasValue gufo:Phase ;
            sh:message "Phase must be typed as gUFO Phase (anti-rigid sortal)"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Phase can have at most one begin point"@en ;
            sh:path cacontology-gufo:hasPhaseBeginPoint ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Phase can have at most one end point"@en ;
            sh:path cacontology-gufo:hasPhaseEndPoint ] ;
    sh:sparql [ sh:message "Phase begin point must precede end point"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/gufo#"^^xsd:anyURI ;
                            sh:prefix "cacontology-gufo" ] ] ;
            sh:select """
            PREFIX cacontology-gufo: <https://cacontology.projectvic.org/gufo#>
            SELECT ?this
            WHERE {
                ?this cacontology-gufo:hasPhaseBeginPoint ?begin ;
                      cacontology-gufo:hasPhaseEndPoint ?end .
                FILTER (?begin >= ?end)
            }
        """ ] ;
    sh:targetClass gufo:Phase .

cacontology-gufo:PhaseTransitionShape a sh:NodeShape ;
    rdfs:label "Phase Transition Shape"@en ;
    sh:sparql [ sh:message "Investigation phases must follow valid transition sequence"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/gufo#"^^xsd:anyURI ;
                            sh:prefix "cacontology-gufo" ] ] ;
            sh:select """
            SELECT ?this
            WHERE {
                ?this cacontology-gufo:hasPhase ?phase1 ;
                      cacontology-gufo:hasPhase ?phase2 .
                ?phase1 cacontology-gufo:precedesPhase ?phase2 ;
                        cacontology-gufo:hasPhaseEndPoint ?end1 .
                ?phase2 cacontology-gufo:hasPhaseBeginPoint ?begin2 .
                FILTER (?end1 > ?begin2)
            }
        """ ] ;
    sh:targetClass cacontology-gufo:Investigation .

cacontology-gufo:ReceiveCybertipEventShape a sh:NodeShape ;
    rdfs:label "Receive Cybertip Event Shape"@en ;
    sh:property [ sh:message "Receive cybertip event must have at least one facet"@en ;
            sh:minCount 1 ;
            sh:path uco-core:hasFacet ],
        [ sh:class cacontology-gufo:InvestigationPendingSituation ;
            sh:message "Receive cybertip should occur in pending situation"@en ;
            sh:path cacontology-gufo:occursInSituation ] ;
    sh:targetClass cacontology-gufo:ReceiveCybertipEvent .

cacontology-gufo:ReviewCybertipEventShape a sh:NodeShape ;
    rdfs:label "Review Cybertip Event Shape"@en ;
    sh:property [ sh:class cacontology-gufo:InvestigatorRole ;
            sh:message "Review cybertip event must have investigator performer"@en ;
            sh:minCount 1 ;
            sh:path uco-action:performer ] ;
    sh:targetClass cacontology-gufo:ReviewCybertipEvent .

cacontology-gufo:RoleExclusivityShape a sh:NodeShape ;
    rdfs:label "Role Exclusivity Shape"@en ;
    sh:sparql [ sh:message "Person cannot simultaneously be victim and offender in same investigation"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/gufo#"^^xsd:anyURI ;
                            sh:prefix "cacontology-gufo" ] ] ;
            sh:select """
            SELECT ?this
            WHERE {
                ?this cacontology-gufo:playsRole ?victimRole ;
                      cacontology-gufo:playsRole ?offenderRole .
                ?victimRole a cacontology-gufo:VictimRole ;
                           cacontology-gufo:participatesInInvestigation ?investigation .
                ?offenderRole a cacontology-gufo:OffenderRole ;
                             cacontology-gufo:participatesInInvestigation ?investigation .
            }
        """ ] ;
    sh:targetClass cacontology-gufo:Person .

cacontology-gufo:RoleShape a sh:NodeShape ;
    rdfs:label "gUFO Role Shape"@en ;
    sh:property [ sh:hasValue gufo:Role ;
            sh:message "Role must be typed as gUFO Role (anti-rigid sortal)"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Role can have at most one begin point"@en ;
            sh:path cacontology-gufo:hasRoleBeginPoint ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Role can have at most one end point"@en ;
            sh:path cacontology-gufo:hasRoleEndPoint ],
        [ sh:class cacontology-gufo:Investigation ;
            sh:message "Role must participate in at least one investigation"@en ;
            sh:minCount 0 ;
            sh:path cacontology-gufo:participatesInInvestigation ] ;
    sh:targetClass gufo:Role .

cacontology-gufo:SextortionShape a sh:NodeShape ;
    rdfs:label "Sextortion Shape"@en ;
    sh:property [ sh:hasValue gufo:SubKind ;
            sh:message "Sextortion must be gUFO SubKind"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ] ;
    sh:targetClass cacontology-gufo:Sextortion .

cacontology-gufo:SituationShape a sh:NodeShape ;
    rdfs:label "gUFO Situation Shape"@en ;
    sh:property [ sh:hasValue gufo:Situation ;
            sh:message "Situation must be typed as gUFO Situation"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ] ;
    sh:targetClass gufo:Situation .

cacontology-gufo:VictimRescueEventShape a sh:NodeShape ;
    rdfs:label "Victim Rescue Event Shape"@en ;
    sh:property [ sh:class cacontology-gufo:RescuerRole ;
            sh:message "Victim rescue event must have rescuer performer"@en ;
            sh:minCount 1 ;
            sh:path uco-action:performer ],
        [ sh:class gufo:Situation ;
            sh:message "Rescue event should create situation"@en ;
            sh:path cacontology-gufo:createsSituation ] ;
    sh:targetClass cacontology-gufo:VictimRescueEvent .

cacontology-gufo:VictimRoleShape a sh:NodeShape ;
    rdfs:label "Victim Role Shape"@en ;
    sh:property [ sh:message "Victim role must have begin point (when victimization started)"@en ;
            sh:minCount 1 ;
            sh:path cacontology-gufo:hasRoleBeginPoint ] ;
    sh:targetClass cacontology-gufo:VictimRole .

cacontology-gufo:academicYearBeginTimePoint a owl:DatatypeProperty ;
    rdfs:label "academic year begin time point"@en ;
    rdfs:comment "Temporal point when academic year begins using gUFO temporal framework."@en ;
    rdfs:domain cacontology-educational:EducationalInstitution ;
    rdfs:range xsd:dateTime ;
    cacontology-gufo:temporalConstraint "Must precede academic year end timepoint" .

cacontology-gufo:aiGenerationTimePoint a owl:DatatypeProperty ;
    rdfs:label "AI generation time point"@en ;
    rdfs:comment "Temporal point when AI content generation occurred using gUFO temporal framework."@en ;
    rdfs:domain cacontology-ai:AIContentGeneration ;
    rdfs:range xsd:dateTime ;
    cacontology-gufo:temporalConstraint "Must precede detection timepoint" .

cacontology-gufo:employmentTerminationTimePoint a owl:DatatypeProperty ;
    rdfs:label "employment termination time point"@en ;
    rdfs:comment "Temporal point when educator's employment was terminated using gUFO temporal framework."@en ;
    rdfs:domain cacontology-educational:EducatorRole ;
    rdfs:range xsd:dateTime .

cacontology-gufo:exploitationDuration a owl:DatatypeProperty ;
    rdfs:label "exploitation duration"@en ;
    rdfs:comment "Duration of exploitation period using gUFO temporal framework."@en ;
    rdfs:domain cacontology-educational:EducatorPerpetratedExploitation ;
    rdfs:range xsd:duration .

cacontology-gufo:exploitationFirstIncidentTimePoint a owl:DatatypeProperty ;
    rdfs:label "exploitation first incident time point"@en ;
    rdfs:comment "Temporal point when first exploitation incident occurred using gUFO temporal framework."@en ;
    rdfs:domain cacontology-educational:EducatorPerpetratedExploitation ;
    rdfs:range xsd:dateTime .

cacontology-gufo:institutionalReportingTimePoint a owl:DatatypeProperty ;
    rdfs:label "institutional reporting time point"@en ;
    rdfs:comment "Temporal point when exploitation was reported to educational institution using gUFO temporal framework."@en ;
    rdfs:domain cacontology-educational:EducationalExploitationSituation ;
    rdfs:range xsd:dateTime .

cacontology-strategy:AIGeneratedContentModule a cacontology-strategy:LowPriorityModule ;
    rdfs:label "AI Generated Content Module Integration"@en ;
    rdfs:comment "Specialized module for AI-generated CSAM requiring gUFO Artifact Generation and AI Process patterns."@en ;
    cacontology-strategy:hasIntegrationPattern cacontology-strategy:AIGenerationPattern,
        cacontology-strategy:SyntheticArtifactPattern ;
    cacontology-strategy:hasIntegrationPriority 3 ;
    cacontology-strategy:hasIntegrationTimeline "P45D"^^xsd:duration .

cacontology-strategy:ExtremistEnterprisesModule a cacontology-strategy:LowPriorityModule ;
    rdfs:label "Extremist Enterprises Module Integration"@en ;
    rdfs:comment "Specialized module for extremist organizations requiring gUFO Criminal Organization and Ideology patterns."@en ;
    cacontology-strategy:hasIntegrationPattern cacontology-strategy:CriminalOrganizationPattern,
        cacontology-strategy:IdeologyPattern ;
    cacontology-strategy:hasIntegrationPriority 3 ;
    cacontology-strategy:hasIntegrationTimeline "P45D"^^xsd:duration .

cacontology-strategy:ForensicsModule a cacontology-strategy:HighPriorityModule ;
    rdfs:label "Forensics Module Integration"@en ;
    rdfs:comment "Critical module for evidence handling requiring gUFO Object/Artifact modeling patterns and temporal evidence lifecycle."@en ;
    cacontology-strategy:hasIntegrationPattern cacontology-strategy:EvidenceObjectPattern,
        cacontology-strategy:ForensicsLifecyclePattern ;
    cacontology-strategy:hasIntegrationPriority 1 ;
    cacontology-strategy:hasIntegrationTimeline "P30D"^^xsd:duration .

cacontology-strategy:InternationalModule a cacontology-strategy:MediumPriorityModule ;
    rdfs:label "International Module Integration"@en ;
    rdfs:comment "Important module for international coordination requiring gUFO Cross-Border and Treaty patterns."@en ;
    cacontology-strategy:hasIntegrationPattern cacontology-strategy:CrossBorderPattern,
        cacontology-strategy:TreatyPattern ;
    cacontology-strategy:hasIntegrationPriority 2 ;
    cacontology-strategy:hasIntegrationTimeline "P45D"^^xsd:duration .

cacontology-strategy:MultiJurisdictionModule a cacontology-strategy:HighPriorityModule ;
    rdfs:label "Multi-Jurisdiction Module Integration"@en ;
    rdfs:comment "Critical module for cross-jurisdictional coordination requiring gUFO Situation modeling and institutional roles."@en ;
    cacontology-strategy:hasIntegrationPattern cacontology-strategy:CoordinationSituationPattern,
        cacontology-strategy:InstitutionalRolePattern ;
    cacontology-strategy:hasIntegrationPriority 1 ;
    cacontology-strategy:hasIntegrationTimeline "P45D"^^xsd:duration .

cacontology-strategy:Phase3Wave1 a owl:Class ;
    rdfs:label "Phase 3 Wave 1 Implementation"@en ;
    rdfs:comment "First wave implementing high-priority modules (forensics, multi-jurisdiction, sentencing, taskforce)."@en ;
    cacontology-strategy:hasIntegrationTimeline "P120D"^^xsd:duration .

cacontology-strategy:Phase3Wave2 a owl:Class ;
    rdfs:label "Phase 3 Wave 2 Implementation"@en ;
    rdfs:comment "Second wave implementing medium-priority modules (specialized units, registry, prevention, international)."@en ;
    cacontology-strategy:hasIntegrationTimeline "P135D"^^xsd:duration .

cacontology-strategy:Phase3Wave3 a owl:Class ;
    rdfs:label "Phase 3 Wave 3 Implementation"@en ;
    rdfs:comment "Third wave implementing low-priority modules (AI content, extremist enterprises, advanced features)."@en ;
    cacontology-strategy:hasIntegrationTimeline "P90D"^^xsd:duration .

cacontology-strategy:PreventionModule a cacontology-strategy:MediumPriorityModule ;
    rdfs:label "Prevention Module Integration"@en ;
    rdfs:comment "Important module for prevention activities requiring gUFO Preventive Action and Educational patterns."@en ;
    cacontology-strategy:hasIntegrationPattern cacontology-strategy:EducationalPattern,
        cacontology-strategy:PreventiveActionPattern ;
    cacontology-strategy:hasIntegrationPriority 2 ;
    cacontology-strategy:hasIntegrationTimeline "P30D"^^xsd:duration .

cacontology-strategy:SentencingModule a cacontology-strategy:HighPriorityModule ;
    rdfs:label "Sentencing Module Integration"@en ;
    rdfs:comment "Critical module for legal outcomes requiring gUFO Event modeling and legal phase patterns."@en ;
    cacontology-strategy:hasIntegrationPattern cacontology-strategy:JudicialPhasePattern,
        cacontology-strategy:LegalEventPattern ;
    cacontology-strategy:hasIntegrationPriority 1 ;
    cacontology-strategy:hasIntegrationTimeline "P30D"^^xsd:duration .

cacontology-strategy:SexOffenderRegistryModule a cacontology-strategy:MediumPriorityModule ;
    rdfs:label "Sex Offender Registry Module Integration"@en ;
    rdfs:comment "Important module for offender tracking requiring gUFO Registration and Compliance patterns."@en ;
    cacontology-strategy:hasIntegrationPattern cacontology-strategy:CompliancePattern,
        cacontology-strategy:RegistrationPattern ;
    cacontology-strategy:hasIntegrationPriority 2 ;
    cacontology-strategy:hasIntegrationTimeline "P30D"^^xsd:duration .

cacontology-strategy:SpecializedUnitsModule a cacontology-strategy:MediumPriorityModule ;
    rdfs:label "Specialized Units Module Integration"@en ;
    rdfs:comment "Important module for specialized capabilities requiring gUFO Role specialization and capability modeling."@en ;
    cacontology-strategy:hasIntegrationPattern cacontology-strategy:CapabilityPattern,
        cacontology-strategy:SpecializedRolePattern ;
    cacontology-strategy:hasIntegrationPriority 2 ;
    cacontology-strategy:hasIntegrationTimeline "P30D"^^xsd:duration .

cacontology-strategy:TaskforceModule a cacontology-strategy:HighPriorityModule ;
    rdfs:label "Taskforce Module Integration"@en ;
    rdfs:comment "Critical module for organizational structure requiring gUFO Organization and Role modeling."@en ;
    cacontology-strategy:hasIntegrationPattern cacontology-strategy:OrganizationalPattern,
        cacontology-strategy:TaskforceRolePattern ;
    cacontology-strategy:hasIntegrationPriority 1 ;
    cacontology-strategy:hasIntegrationTimeline "P30D"^^xsd:duration .

cacontology-strategy:TotalPhase3Implementation a owl:Class ;
    rdfs:label "Total Phase 3 Implementation"@en ;
    rdfs:comment "Complete Phase 3 implementation across all ICAC modules with validation and testing."@en ;
    cacontology-strategy:hasIntegrationTimeline "P345D"^^xsd:duration .

cacontology-strategy:dependsOnPattern a owl:ObjectProperty ;
    rdfs:label "depends on pattern"@en ;
    rdfs:comment "Links integration pattern to other patterns it depends on for proper implementation."@en ;
    rdfs:domain owl:Class ;
    rdfs:range owl:Class .

cacontology-strategy:extendsPattern a owl:ObjectProperty ;
    rdfs:label "extends pattern"@en ;
    rdfs:comment "Links integration pattern to base pattern it extends with additional features."@en ;
    rdfs:domain owl:Class ;
    rdfs:range owl:Class .

cacontology-strategy:hasIntegrationPattern a owl:ObjectProperty ;
    rdfs:label "has integration pattern"@en ;
    rdfs:comment "Links module integration strategy to specific gUFO patterns to be applied."@en ;
    rdfs:domain cacontology-strategy:ModuleIntegrationStrategy ;
    rdfs:range owl:Class .

cacontology-strategy:hasIntegrationPriority a owl:DatatypeProperty ;
    rdfs:label "has integration priority"@en ;
    rdfs:comment "Numeric priority for module integration (1=highest, 3=lowest)."@en ;
    rdfs:domain cacontology-strategy:ModuleIntegrationStrategy ;
    rdfs:range xsd:integer .

cacontology-strategy:hasIntegrationTimeline a owl:DatatypeProperty ;
    rdfs:label "has integration timeline"@en ;
    rdfs:comment "Expected duration for completing module integration."@en ;
    rdfs:domain cacontology-strategy:ModuleIntegrationStrategy ;
    rdfs:range xsd:duration .

cacontology-strategy:hasValidationQuery a owl:DatatypeProperty ;
    rdfs:label "has validation query"@en ;
    rdfs:comment "SPARQL query for validating integration pattern implementation."@en ;
    rdfs:domain cacontology-strategy:ValidationStrategy ;
    rdfs:range xsd:string .

cacontology-strategy:hasValidationRule a owl:DatatypeProperty ;
    rdfs:label "has validation rule"@en ;
    rdfs:comment "SHACL or SPARQL validation rule for checking integration correctness."@en ;
    rdfs:domain cacontology-strategy:ValidationStrategy ;
    rdfs:range xsd:string .

cacontology-strategy:requiresValidation a owl:ObjectProperty ;
    rdfs:label "requires validation"@en ;
    rdfs:comment "Links integration pattern to validation strategies that must be applied."@en ;
    rdfs:domain owl:Class ;
    rdfs:range cacontology-strategy:ValidationStrategy .

cacontology-hotlines:ESPReport a owl:Class ;
    rdfs:label "Electronic Service Provider Report"@en ;
    rdfs:comment "A report submitted by an electronic service provider."@en ;
    rdfs:subClassOf cacontology-hotlines:HotlineReport .

cacontology-hotlines:EvidenceItemShape a sh:NodeShape ;
    rdfs:label "Evidence Item Shape"@en ;
    rdfs:comment "Enhanced SHACL shape for evidence items with gUFO Object validation and comprehensive metadata requirements."@en ;
    sh:property [ sh:message "An evidence item must have at least one facet"@en ;
            sh:minCount 1 ;
            sh:path uco-core:hasFacet ],
        [ sh:datatype xsd:dateTime ;
            sh:message "An evidence item must have a first seen timestamp"@en ;
            sh:minCount 1 ;
            sh:path cacontology-hotlines:firstSeen ],
        [ sh:hasValue gufo:Object ;
            sh:message "Evidence items must be instances of gUFO Object"@en ;
            sh:path rdf:type ] ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a hotline:TemporalInconsistencyError . }
            WHERE {
                ?report hotline:hasEvidence $this .
                $this hotline:firstSeen ?evidenceTime .
                ?report uco-core:createdTime ?reportTime .
                FILTER(?evidenceTime > ?reportTime)
            }
        """ ;
            sh:message "Evidence first seen time must be before report submission time"@en ;
            sh:prefixes cacontology-hotlines: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-hotlines:EvidenceItem .

cacontology-hotlines:ForwardToLEActionShape a sh:NodeShape ;
    rdfs:label "Forward to LE Action Shape"@en ;
    rdfs:comment "Enhanced SHACL shape for law enforcement forwarding actions with gUFO Event validation and coordination requirements."@en ;
    sh:property [ sh:class uco-identity:Organization ;
            sh:message "Forward actions must specify target law enforcement organization"@en ;
            sh:path cacontology-hotlines:forwardsTo ] ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a hotline:CoordinationError . }
            WHERE {
                $this a hotline:ForwardToLEAction .
                FILTER NOT EXISTS { 
                    ?report hotline:triggersAction $this .
                    ?report hotline:involvesCoordination ?coordination .
                    ?coordination a hotline:MultiAgencyCoordination .
                }
            }
        """ ;
            sh:message "Law enforcement forwarding must involve coordination situation"@en ;
            sh:prefixes cacontology-hotlines: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-hotlines:ForwardToLEAction .

cacontology-hotlines:HashFeedbackActionShape a sh:NodeShape ;
    rdfs:label "Hash Feedback Action Shape"@en ;
    rdfs:comment "Enhanced SHACL shape for hash feedback actions with gUFO Event validation and collaboration requirements."@en ;
    sh:property [ sh:class uco-observable:Hash ;
            sh:message "A hash feedback action must reference at least one hash"@en ;
            sh:minCount 1 ;
            sh:path cacontology-hotlines:referencesHash ],
        [ sh:in ( "Removed" "NoAction" "Duplicate" "FalsePositive" ) ;
            sh:message "A hash feedback action must specify a valid feedback type"@en ;
            sh:minCount 1 ;
            sh:path cacontology-hotlines:feedbackType ] ;
    sh:targetClass cacontology-hotlines:HashFeedbackAction .

cacontology-hotlines:HashSubmissionActionShape a sh:NodeShape ;
    rdfs:label "Hash Submission Action Shape"@en ;
    rdfs:comment "Enhanced SHACL shape for hash submission actions with gUFO Event validation and forensic requirements."@en ;
    sh:property [ sh:class uco-observable:Hash ;
            sh:message "A hash submission action must produce at least one hash"@en ;
            sh:minCount 1 ;
            sh:path cacontology-hotlines:producesHash ] ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a hotline:HashIntegrityError . }
            WHERE {
                $this hotline:producesHash ?hash .
                FILTER NOT EXISTS { 
                    ?hash uco-observable:hashMethod ?method .
                    ?hash uco-observable:hashValue ?value .
                }
            }
        """ ;
            sh:message "Hash submissions must maintain cryptographic integrity"@en ;
            sh:prefixes cacontology-hotlines: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-hotlines:HashSubmissionAction .

cacontology-hotlines:HotlineActionShape a sh:NodeShape ;
    rdfs:label "Hotline Action Shape"@en ;
    rdfs:comment "Enhanced SHACL shape for hotline actions with comprehensive gUFO Event validation and temporal modeling."@en ;
    sh:property [ sh:hasValue gufo:Event ;
            sh:message "Hotline actions must be instances of gUFO Event"@en ;
            sh:path rdf:type ],
        [ sh:message "A hotline action must have at least one performer"@en ;
            sh:minCount 1 ;
            sh:path uco-action:performer ],
        [ sh:datatype xsd:dateTime ;
            sh:message "Hotline actions must have start times"@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Hotline actions can have at most one end time"@en ;
            sh:path uco-core:endTime ] ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a hotline:TemporalInconsistencyError . }
            WHERE {
                $this uco-core:startTime ?start .
                $this uco-core:endTime ?end .
                FILTER(?end <= ?start)
            }
        """ ;
            sh:message "Action end time must be after start time"@en ;
            sh:prefixes cacontology-hotlines: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-hotlines:HotlineAction .

cacontology-hotlines:HotlineOrganizationShape a sh:NodeShape ;
    rdfs:label "Hotline Organization Shape"@en ;
    rdfs:comment "SHACL shape for hotline organizations with gUFO Organization validation."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:message "Hotline organizations must have a name"@en ;
            sh:minCount 1 ;
            sh:path uco-core:name ],
        [ sh:hasValue gufo:Organization ;
            sh:message "Hotline organizations must be instances of gUFO Organization"@en ;
            sh:path rdf:type ] ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a hotline:OrganizationalError . }
            WHERE {
                $this a hotline:HotlineOrganization .
                FILTER NOT EXISTS { 
                    $this hotline:hasCapability ?capability .
                }
            }
        """ ;
            sh:message "Hotline organizations must demonstrate operational capabilities"@en ;
            sh:prefixes cacontology-hotlines: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-hotlines:HotlineOrganization .

cacontology-hotlines:HotlinePhaseShape a sh:NodeShape ;
    rdfs:label "Hotline Phase Shape"@en ;
    rdfs:comment "SHACL shape for hotline operational phases with anti-rigid gUFO Phase validation and temporal constraints."@en ;
    sh:property [ sh:hasValue gufo:Phase ;
            sh:message "Hotline phases must be instances of anti-rigid gUFO Phase"@en ;
            sh:path rdf:type ],
        [ sh:datatype xsd:dateTime ;
            sh:message "Phases must have begin times"@en ;
            sh:minCount 1 ;
            sh:path cacontology-hotlines:phaseBeginTime ],
        [ sh:datatype xsd:duration ;
            sh:maxCount 1 ;
            sh:message "Phases can have duration specifications"@en ;
            sh:path cacontology-hotlines:phaseDuration ] ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a hotline:PhaseSequenceError . }
            WHERE {
                ?report hotline:currentPhase $this .
                $this hotline:phaseBeginTime ?thisStart .
                ?report hotline:hasPhaseTransition ?transition .
                ?transition uco-core:endTime ?prevEnd .
                FILTER(?thisStart <= ?prevEnd)
            }
        """ ;
            sh:message "Phase transitions must follow logical sequence"@en ;
            sh:prefixes cacontology-hotlines: ;
            sh:severity sh:Violation ] ;
    sh:targetClass [ a owl:Class ;
            owl:unionOf ( cacontology-hotlines:IntakePhase cacontology-hotlines:ReviewPhase cacontology-hotlines:ActionPhase cacontology-hotlines:ClosurePhase ) ] .

cacontology-hotlines:HotlineReportShape a sh:NodeShape ;
    rdfs:label "Hotline Report Shape"@en ;
    rdfs:comment "Enhanced SHACL shape for hotline reports with gUFO Situation validation and comprehensive temporal constraints."@en ;
    sh:property [ sh:message "A hotline report must have at least one reporter"@en ;
            sh:minCount 1 ;
            sh:path cacontology-hotlines:reportedBy ],
        [ sh:class cacontology-hotlines:HotlineOrganization ;
            sh:message "A hotline report must be received by a hotline organization"@en ;
            sh:minCount 1 ;
            sh:path cacontology-hotlines:receivedBy ],
        [ sh:class cacontology-hotlines:EvidenceItem ;
            sh:message "A hotline report must have at least one evidence item"@en ;
            sh:minCount 1 ;
            sh:path cacontology-hotlines:hasEvidence ],
        [ sh:class cacontology-hotlines:IntakeChannel ;
            sh:message "A hotline report must specify its intake channel"@en ;
            sh:minCount 1 ;
            sh:path cacontology-hotlines:intakeChannel ],
        [ sh:message "A hotline report must have a status"@en ;
            sh:minCount 1 ;
            sh:path cacontology-hotlines:status ],
        [ sh:hasValue gufo:Situation ;
            sh:message "Hotline reports must be instances of gUFO Situation"@en ;
            sh:path rdf:type ],
        [ sh:class gufo:Phase ;
            sh:message "A hotline report must have a current operational phase"@en ;
            sh:minCount 1 ;
            sh:path cacontology-hotlines:currentPhase ],
        [ sh:class cacontology-hotlines:MultiAgencyCoordination ;
            sh:message "Multi-agency coordination must be a valid gUFO Situation"@en ;
            sh:path cacontology-hotlines:involvesCoordination ] ;
    sh:targetClass cacontology-hotlines:HotlineReport .

cacontology-hotlines:InternationalCoordination a owl:Class ;
    rdfs:label "International Coordination"@en ;
    rdfs:comment "A coordination situation involving multiple countries or international organizations."@en ;
    rdfs:subClassOf cacontology-hotlines:MultiAgencyCoordination .

cacontology-hotlines:LifecycleValidationShape a sh:NodeShape ;
    rdfs:label "Lifecycle Validation Shape"@en ;
    rdfs:comment "Enhanced SHACL shape for hotline report lifecycle validation with comprehensive gUFO Event sequence and Phase transition validation."@en ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a hotline:LifecycleError . }
            WHERE {
                $this hotline:triggersAction ?action .
                ?action a hotline:HotlineAction .
                FILTER NOT EXISTS { ?prev hotline:nextStep ?action . }
                FILTER NOT EXISTS { ?action a hotline:ReportReviewAction . }
            }
        """ ;
            sh:message "The first action must be a ReportReviewAction"@en ;
            sh:prefixes cacontology-hotlines: ;
            sh:severity sh:Violation ],
        [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a hotline:PhaseSequenceError . }
            WHERE {
                $this hotline:currentPhase ?currentPhase .
                ?currentPhase a ?phaseType .
                ?phaseType rdfs:subClassOf gufo:Phase .
                # Invalid transitions logic would be implemented here
                FILTER EXISTS {
                    # Example: ActionPhase cannot directly follow IntakePhase
                    ?currentPhase a hotline:ActionPhase .
                    ?previousPhase hotline:nextPhase ?currentPhase .
                    ?previousPhase a hotline:IntakePhase .
                }
            }
        """ ;
            sh:message "Phases must follow logical sequence: Intake → Review → Action → Closure"@en ;
            sh:prefixes cacontology-hotlines: ;
            sh:severity sh:Violation ],
        [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a hotline:TemporalConsistencyError . }
            WHERE {
                $this hotline:triggersAction ?action .
                ?action a gufo:Event .
                ?action uco-core:startTime ?actionStart .
                $this hotline:currentPhase ?phase .
                ?phase hotline:phaseBeginTime ?phaseStart .
                FILTER(?actionStart < ?phaseStart)
            }
        """ ;
            sh:message "gUFO Events must maintain temporal consistency within phases"@en ;
            sh:prefixes cacontology-hotlines: ;
            sh:severity sh:Violation ],
        [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a hotline:RoleAssignmentError . }
            WHERE {
                $this hotline:triggersAction ?action .
                ?action uco-action:performer ?performer .
                FILTER NOT EXISTS { 
                    ?performer hotline:playsRole ?role .
                    ?role a gufo:Role .
                }
            }
        """ ;
            sh:message "All actions must be performed by entities with appropriate gUFO Roles"@en ;
            sh:prefixes cacontology-hotlines: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-hotlines:HotlineReport .

cacontology-hotlines:MediaEvidenceShape a sh:NodeShape ;
    rdfs:label "Media Evidence Shape"@en ;
    rdfs:comment "Enhanced SHACL shape for media evidence with comprehensive gUFO Object validation and forensic requirements."@en ;
    sh:property [ sh:class uco-observable:Hash ;
            sh:message "Media evidence must have at least one hash"@en ;
            sh:minCount 1 ;
            sh:path uco-observable:hash ] ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a hotline:IntegrityError . }
            WHERE {
                $this a ?mediaType .
                ?mediaType rdfs:subClassOf* [ owl:unionOf (hotline:ImageEvidence hotline:VideoEvidence) ] .
                FILTER NOT EXISTS { 
                    $this uco-observable:hash ?hash .
                    ?hash uco-observable:hashMethod ?method .
                }
            }
        """ ;
            sh:message "Media evidence must maintain cryptographic integrity"@en ;
            sh:prefixes cacontology-hotlines: ;
            sh:severity sh:Violation ] ;
    sh:targetClass [ a owl:Class ;
            owl:unionOf ( cacontology-hotlines:ImageEvidence cacontology-hotlines:VideoEvidence ) ] .

cacontology-hotlines:MultiAgencyCoordinationShape a sh:NodeShape ;
    rdfs:label "Multi-Agency Coordination Shape"@en ;
    rdfs:comment "SHACL shape for multi-agency coordination with comprehensive gUFO Situation validation and participant requirements."@en ;
    sh:property [ sh:hasValue gufo:Situation ;
            sh:message "Multi-agency coordination must be instances of gUFO Situation"@en ;
            sh:path rdf:type ],
        [ sh:datatype xsd:dateTime ;
            sh:message "Coordination situations must have begin timestamps"@en ;
            sh:minCount 1 ;
            sh:path cacontology-hotlines:coordinationBeginTime ] ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a hotline:CoordinationParticipantError . }
            WHERE {
                $this a hotline:MultiAgencyCoordination .
                {
                    SELECT $this (COUNT(?org) AS ?orgCount) WHERE {
                        $this hotline:hasParticipant ?org .
                        ?org a uco-identity:Organization .
                    } GROUP BY $this
                }
                FILTER(?orgCount < 2)
            }
        """ ;
            sh:message "Multi-agency coordination must involve at least two organizations"@en ;
            sh:prefixes cacontology-hotlines: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-hotlines:MultiAgencyCoordination .

cacontology-hotlines:PublicReport a owl:Class ;
    rdfs:label "Public Report"@en ;
    rdfs:comment "A report submitted by a member of the public."@en ;
    rdfs:subClassOf cacontology-hotlines:HotlineReport .

cacontology-hotlines:ReportReviewActionShape a sh:NodeShape ;
    rdfs:label "Report Review Action Shape"@en ;
    rdfs:comment "Enhanced SHACL shape for report review actions with comprehensive gUFO Event modeling and classification requirements."@en ;
    sh:property [ sh:message "A report review action must have at least one performer"@en ;
            sh:minCount 1 ;
            sh:path uco-action:performer ],
        [ sh:message "A report review action must assign at least one classification"@en ;
            sh:minCount 1 ;
            sh:path cacontology-hotlines:classification ] ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a hotline:QualificationError . }
            WHERE {
                $this a hotline:ReportReviewAction .
                $this uco-action:performer ?performer .
                FILTER NOT EXISTS { 
                    ?performer hotline:playsRole hotline:HotlineAnalystRole .
                }
            }
        """ ;
            sh:message "Report review must be performed by qualified analyst"@en ;
            sh:prefixes cacontology-hotlines: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-hotlines:ReportReviewAction .

cacontology-hotlines:ReporterRoleShape a sh:NodeShape ;
    rdfs:label "Reporter Role Shape"@en ;
    rdfs:comment "Enhanced SHACL shape for reporter roles with anti-rigid gUFO Role validation."@en ;
    sh:property [ sh:datatype xsd:boolean ;
            sh:message "A reporter role must specify whether it is anonymous"@en ;
            sh:minCount 1 ;
            sh:path cacontology-hotlines:isAnonymous ],
        [ sh:hasValue gufo:Role ;
            sh:message "Reporter roles must be instances of anti-rigid gUFO Role"@en ;
            sh:path rdf:type ],
        [ sh:datatype xsd:dateTime ;
            sh:message "Reporter roles must have assignment timestamps"@en ;
            sh:minCount 1 ;
            sh:path cacontology-hotlines:roleAssignmentTime ] ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a hotline:AntiRigidityError . }
            WHERE {
                $this a hotline:ReporterRole .
                FILTER NOT EXISTS { 
                    $this hotline:roleAssignmentTime ?start .
                    OPTIONAL { $this hotline:roleEndTime ?end . }
                }
            }
        """ ;
            sh:message "Reporter roles must demonstrate anti-rigidity (can be gained/lost)"@en ;
            sh:prefixes cacontology-hotlines: ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-hotlines:ReporterRole .

cacontology-hotlines:SpecialistRoleShape a sh:NodeShape ;
    rdfs:label "Specialist Role Shape"@en ;
    rdfs:comment "SHACL shape for hotline specialist roles with anti-rigid gUFO Role validation and competency requirements."@en ;
    sh:property [ sh:hasValue gufo:Role ;
            sh:message "Specialist roles must be instances of anti-rigid gUFO Role"@en ;
            sh:path rdf:type ],
        [ sh:datatype xsd:dateTime ;
            sh:message "Specialist roles must have assignment timestamps"@en ;
            sh:minCount 1 ;
            sh:path cacontology-hotlines:roleAssignmentTime ] ;
    sh:rule [ a sh:SPARQLRule ;
            sh:construct """
            INSERT { $this a hotline:CompetencyError . }
            WHERE {
                $this a ?roleType .
                ?roleType rdfs:subClassOf* [ owl:unionOf (hotline:HotlineAnalystRole hotline:ForensicsSpecialistRole hotline:LiaisonRole) ] .
                FILTER NOT EXISTS { 
                    $this hotline:hasCompetency ?competency .
                }
            }
        """ ;
            sh:message "Specialist roles require demonstrated competencies"@en ;
            sh:prefixes cacontology-hotlines: ;
            sh:severity sh:Violation ] ;
    sh:targetClass [ a owl:Class ;
            owl:unionOf ( cacontology-hotlines:HotlineAnalystRole cacontology-hotlines:ForensicsSpecialistRole cacontology-hotlines:LiaisonRole ) ] .

cacontology-hotlines:TakedownRequestActionShape a sh:NodeShape ;
    rdfs:label "Takedown Request Action Shape"@en ;
    rdfs:comment "Enhanced SHACL shape for takedown request actions with gUFO Event validation and coordination requirements."@en ;
    sh:property [ sh:class uco-identity:Organization ;
            sh:message "A takedown request action must target at least one organization"@en ;
            sh:minCount 1 ;
            sh:path uco-action:target ] ;
    sh:targetClass cacontology-hotlines:TakedownRequestAction .

cacontology-hotlines:URLReference a owl:Class ;
    rdfs:label "URL Reference"@en ;
    rdfs:comment "A URL submitted as evidence."@en ;
    rdfs:subClassOf cacontology-hotlines:EvidenceItem .

cacontology-hotlines:assignedRole a owl:ObjectProperty ;
    rdfs:label "assigned role"@en ;
    rdfs:comment "Links a person to their assigned hotline role. gUFO Role modeling for dynamic assignment."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range gufo:Role .

cacontology-hotlines:classification-confirmed a owl:NamedIndividual,
        skos:Concept ;
    skos:definition "Material has been reviewed and confirmed to be Child Sexual Abuse Material."@en ;
    skos:inScheme cacontology-hotlines:ClassificationScheme ;
    skos:prefLabel "Confirmed CSAM"@en .

cacontology-hotlines:classification-false-positive a owl:NamedIndividual,
        skos:Concept ;
    skos:definition "Material has been reviewed and determined not to be Child Sexual Abuse Material."@en ;
    skos:inScheme cacontology-hotlines:ClassificationScheme ;
    skos:prefLabel "False Positive"@en .

cacontology-hotlines:classification-legal-concern a owl:NamedIndividual,
        skos:Concept ;
    skos:definition "Material is legal but may still be concerning or warrant attention (e.g., adult pornography accessible to minors, risky online interactions)."@en ;
    skos:inScheme cacontology-hotlines:ClassificationScheme ;
    skos:prefLabel "Legal but Concerning"@en .

cacontology-hotlines:classification-other a owl:NamedIndividual,
        skos:Concept ;
    skos:definition "Material falls into a category not otherwise specified."@en ;
    skos:inScheme cacontology-hotlines:ClassificationScheme ;
    skos:prefLabel "Other"@en .

cacontology-hotlines:classification-uncertain a owl:NamedIndividual,
        skos:Concept ;
    skos:definition "Material requires further review to determine its nature."@en ;
    skos:inScheme cacontology-hotlines:ClassificationScheme ;
    skos:prefLabel "Uncertain"@en .

cacontology-hotlines:foundAtURL a owl:ObjectProperty ;
    rdfs:label "found at URL"@en ;
    rdfs:comment "Links an evidence item to the URL where it was found."@en ;
    rdfs:domain cacontology-hotlines:EvidenceItem ;
    rdfs:range uco-observable:URL .

cacontology-hotlines:hasPhaseTransition a owl:ObjectProperty ;
    rdfs:label "has phase transition"@en ;
    rdfs:comment "Links a hotline report to phase transition events."@en ;
    rdfs:domain cacontology-hotlines:HotlineReport ;
    rdfs:range gufo:Event .

cacontology-hotlines:linkedInvestigation a owl:ObjectProperty ;
    rdfs:label "linked investigation"@en ;
    rdfs:comment "Links a hotline report to an ICAC investigation."@en ;
    rdfs:domain cacontology-hotlines:HotlineReport ;
    rdfs:range cacontology:CACInvestigation .

cacontology-hotlines:phaseEndTime a owl:DatatypeProperty ;
    rdfs:label "phase end time"@en ;
    rdfs:comment "The timestamp when a particular phase ends."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:dateTime .

cacontology-hotlines:playsRole a owl:ObjectProperty ;
    rdfs:label "plays role"@en ;
    rdfs:comment "Links an entity to a role it plays in hotline operations."@en ;
    rdfs:range gufo:Role .

cacontology-hotlines:status-closed a owl:NamedIndividual,
        skos:Concept ;
    skos:definition "Report processing is complete. This may occur after forwarding to LEA, determining it as a false positive, or other terminal actions."@en ;
    skos:inScheme cacontology-hotlines:StatusScheme ;
    skos:prefLabel "Closed"@en .

cacontology-hotlines:status-forwarded a owl:NamedIndividual,
        skos:Concept ;
    skos:definition "Report has been assessed and forwarded to a Law Enforcement Agency for further action."@en ;
    skos:inScheme cacontology-hotlines:StatusScheme ;
    skos:prefLabel "Forwarded to LEA"@en .

cacontology-hotlines:status-in-progress a owl:NamedIndividual,
        skos:Concept ;
    skos:definition "Report is actively being processed or investigated by the hotline."@en ;
    skos:inScheme cacontology-hotlines:StatusScheme ;
    skos:prefLabel "In Progress"@en .

cacontology-hotlines:status-in-review a owl:NamedIndividual,
        skos:Concept ;
    skos:definition "Report is currently under review by an analyst or specialist."@en ;
    skos:inScheme cacontology-hotlines:StatusScheme ;
    skos:prefLabel "In Review"@en .

cacontology-hotlines:status-new a owl:NamedIndividual,
        skos:Concept ;
    skos:definition "Report has been newly received and is awaiting initial review."@en ;
    skos:inScheme cacontology-hotlines:StatusScheme ;
    skos:prefLabel "New"@en .

cacontology-hotlines:status-reopened a owl:NamedIndividual,
        skos:Concept ;
    skos:definition "A previously closed report has been reopened for additional review or action due to new information."@en ;
    skos:inScheme cacontology-hotlines:StatusScheme ;
    skos:prefLabel "Reopened"@en .

cacontology-hotlines:triggersAction a owl:ObjectProperty ;
    rdfs:label "triggers action"@en ;
    rdfs:comment "Links a hotline report to actions taken in response."@en ;
    rdfs:domain cacontology-hotlines:HotlineReport ;
    rdfs:range cacontology-hotlines:HotlineAction .

cacontology-infrastructure:AccountFreezingShape a sh:NodeShape ;
    rdfs:label "Account Freezing Shape"@en ;
    rdfs:comment "Validation shape for account freezing instances."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Account freezing must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 100000 ;
            sh:message "Accounts frozen must be between 1 and 100000 when specified."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1 ;
            sh:path cacontology-infrastructure:accountsFrozen ] ;
    sh:targetClass cacontology-infrastructure:AccountFreezing .

cacontology-infrastructure:AnalysisSubjectCrossReferenceShape a sh:NodeShape ;
    rdfs:label "Analysis Subject Cross Reference Shape"@en ;
    rdfs:comment "Validates that infrastructure analysis has subject infrastructure."@en ;
    sh:sparql [ sh:message "Infrastructure analysis should analyze specific infrastructure."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-infrastructure:InfrastructureAnalysis .
                FILTER NOT EXISTS {
                    $this cacontology-infrastructure:analysesInfrastructure ?infrastructure .
                    ?infrastructure a cacontology-infrastructure:PlatformInfrastructure .
                }
            }
        """ ] ;
    sh:targetClass cacontology-infrastructure:InfrastructureAnalysis .

cacontology-infrastructure:AnalystRole a gufo:Role,
        owl:Class ;
    rdfs:label "Analyst Role"@en ;
    rdfs:comment "Role of person conducting infrastructure analysis (gUFO Role - anti-rigid)."@en ;
    rdfs:subClassOf uco-identity:Person .

cacontology-infrastructure:AnonymityInfrastructureShape a sh:NodeShape ;
    rdfs:label "Anonymity Infrastructure Shape"@en ;
    rdfs:comment "Validation shape for anonymity infrastructure instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "basic" "enhanced" "military-grade" "custom" ) ;
            sh:maxCount 1 ;
            sh:message "Anonymity level must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-infrastructure:anonymityLevel ] ;
    sh:targetClass cacontology-infrastructure:AnonymityInfrastructure .

cacontology-infrastructure:CapacityValidationShape a sh:NodeShape ;
    rdfs:label "Capacity Validation Shape"@en ;
    rdfs:comment "Validates infrastructure capacity specifications."@en ;
    sh:sparql [ sh:message "Large-scale infrastructure should have appropriate capacity specifications."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a ?infraType .
                FILTER (?infraType IN (
                    cacontology-infrastructure:ServerInfrastructure,
                    cacontology-infrastructure:ContentDeliveryNetwork,
                    cacontology-infrastructure:DatabaseInfrastructure
                ))
                FILTER NOT EXISTS {
                    { $this cacontology-infrastructure:serverCount ?count } UNION
                    { $this cacontology-infrastructure:bandwidthCapacity ?bandwidth } UNION
                    { $this cacontology-infrastructure:storageCapacity ?storage }
                }
            }
        """ ] ;
    sh:targetClass cacontology-infrastructure:ContentDeliveryNetwork,
        cacontology-infrastructure:DatabaseInfrastructure,
        cacontology-infrastructure:ServerInfrastructure .

cacontology-infrastructure:ContentDeliveryNetworkShape a sh:NodeShape ;
    rdfs:label "Content Delivery Network Shape"@en ;
    rdfs:comment "Validation shape for CDN instances."@en ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 10000.0 ;
            sh:message "Bandwidth capacity must be between 0.1 and 10000 Gbps."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.1 ;
            sh:path cacontology-infrastructure:bandwidthCapacity ] ;
    sh:targetClass cacontology-infrastructure:ContentDeliveryNetwork .

cacontology-infrastructure:CryptocurrencyInfrastructureShape a sh:NodeShape ;
    rdfs:label "Cryptocurrency Infrastructure Shape"@en ;
    rdfs:comment "Validation shape for cryptocurrency infrastructure instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "Bitcoin" "Monero" "Ethereum" "Litecoin" "Zcash" "Dash" "Ripple" "Tether" "other" ) ;
            sh:maxCount 10 ;
            sh:message "Cryptocurrency types must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-infrastructure:cryptoCurrencyTypes ] ;
    sh:targetClass cacontology-infrastructure:CryptocurrencyInfrastructure .

cacontology-infrastructure:DataMirrorCreationShape a sh:NodeShape ;
    rdfs:label "Data Mirror Creation Shape"@en ;
    rdfs:comment "Validation shape for data mirror creation instances."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Data mirror creation must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 100000.0 ;
            sh:message "Data volume mirrored must be between 0.001 and 100000 terabytes."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.001 ;
            sh:path cacontology-infrastructure:dataVolumeMirrored ] ;
    sh:targetClass cacontology-infrastructure:DataMirrorCreation .

cacontology-infrastructure:DataQualityShape a sh:NodeShape ;
    rdfs:label "Data Quality Shape"@en ;
    rdfs:comment "Validates data quality for infrastructure entities."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Creation time should be specified when available."@en ;
            sh:minCount 0 ;
            sh:path uco-core:createdTime ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Modification time should be specified when available."@en ;
            sh:minCount 0 ;
            sh:path uco-core:modifiedTime ] ;
    sh:targetClass cacontology-infrastructure:HostingProvider,
        cacontology-infrastructure:InfrastructureAnalysis,
        cacontology-infrastructure:InfrastructureTakedown,
        cacontology-infrastructure:PaymentProcessing,
        cacontology-infrastructure:PlatformInfrastructure .

cacontology-infrastructure:DatabaseInfrastructureShape a sh:NodeShape ;
    rdfs:label "Database Infrastructure Shape"@en ;
    rdfs:comment "Validation shape for database infrastructure instances."@en ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 100000.0 ;
            sh:message "Storage capacity must be between 0.1 and 100000 terabytes."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.1 ;
            sh:path cacontology-infrastructure:storageCapacity ] ;
    sh:targetClass cacontology-infrastructure:DatabaseInfrastructure .

cacontology-infrastructure:DomainInfrastructureShape a sh:NodeShape ;
    rdfs:label "Domain Infrastructure Shape"@en ;
    rdfs:comment "Validation shape for domain infrastructure instances."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 10000 ;
            sh:message "Domain count must be between 1 and 10000 when specified."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1 ;
            sh:path cacontology-infrastructure:domainCount ] ;
    sh:targetClass cacontology-infrastructure:DomainInfrastructure .

cacontology-infrastructure:DomainSinkholeingShape a sh:NodeShape ;
    rdfs:label "Domain Sinkholing Shape"@en ;
    rdfs:comment "Validation shape for domain sinkholing instances."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Domain sinkholing must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 10000 ;
            sh:message "Domains sinkholed must be between 1 and 10000 when specified."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1 ;
            sh:path cacontology-infrastructure:domainsSinkholed ] ;
    sh:targetClass cacontology-infrastructure:DomainSinkholing .

cacontology-infrastructure:EncryptionInfrastructureShape a sh:NodeShape ;
    rdfs:label "Encryption Infrastructure Shape"@en ;
    rdfs:comment "Validation shape for encryption infrastructure instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "AES-128" "AES-256" "RSA-2048" "RSA-4096" "ChaCha20" "Blowfish" "3DES" "custom" ) ;
            sh:maxCount 1 ;
            sh:message "Encryption strength must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-infrastructure:encryptionStrength ] ;
    sh:targetClass cacontology-infrastructure:EncryptionInfrastructure .

cacontology-infrastructure:FinancialConsistencyValidationShape a sh:NodeShape ;
    rdfs:label "Financial Consistency Validation Shape"@en ;
    rdfs:comment "Validates financial processing consistency."@en ;
    sh:sparql [ sh:message "High-revenue platforms should have multiple payment methods."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-infrastructure:monthlyRevenue ?revenue .
                FILTER (?revenue > 100000)
                FILTER NOT EXISTS {
                    $this cacontology-infrastructure:paymentMethods ?method1 .
                    $this cacontology-infrastructure:paymentMethods ?method2 .
                    FILTER (?method1 != ?method2)
                }
            }
        """ ] ;
    sh:targetClass cacontology-infrastructure:PaymentProcessing .

cacontology-infrastructure:FinancialFlowAnalysisShape a sh:NodeShape ;
    rdfs:label "Financial Flow Analysis Shape"@en ;
    rdfs:comment "Validation shape for financial flow analysis instances."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Financial flow analysis must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ],
        [ sh:datatype xsd:string ;
            sh:in ( "basic" "intermediate" "sophisticated" "highly_sophisticated" ) ;
            sh:maxCount 1 ;
            sh:message "Financial complexity must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-infrastructure:financialComplexity ] ;
    sh:targetClass cacontology-infrastructure:FinancialFlowAnalysis .

cacontology-infrastructure:FinancialObfuscationShape a sh:NodeShape ;
    rdfs:label "Financial Obfuscation Shape"@en ;
    rdfs:comment "Validation shape for financial obfuscation instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 500 ;
            sh:message "Financial obfuscation description should be 10-500 characters when specified."@en ;
            sh:minCount 0 ;
            sh:minLength 10 ;
            sh:path uco-core:description ] ;
    sh:targetClass cacontology-infrastructure:FinancialObfuscation .

cacontology-infrastructure:GeographicDistributionShape a sh:NodeShape ;
    rdfs:label "Geographic Distribution Shape"@en ;
    rdfs:comment "Validation shape for geographic distribution instances."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 200 ;
            sh:message "Geographic locations must be between 1 and 200 when specified."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1 ;
            sh:path cacontology-infrastructure:geographicLocations ] ;
    sh:targetClass cacontology-infrastructure:GeographicDistribution .

cacontology-infrastructure:HostingProviderShape a sh:NodeShape ;
    rdfs:label "Hosting Provider Shape"@en ;
    rdfs:comment "Validation shape for hosting provider instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Hosting provider must have a name (2-200 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 2 ;
            sh:path uco-core:name ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Hosting provider name should be 2-200 characters when specified."@en ;
            sh:minCount 0 ;
            sh:minLength 2 ;
            sh:path cacontology-infrastructure:hostingProvider ] ;
    sh:targetClass cacontology-infrastructure:HostingProvider .

cacontology-infrastructure:InfrastructureAnalysisShape a sh:NodeShape ;
    rdfs:label "Infrastructure Analysis Shape"@en ;
    rdfs:comment "Validation shape for infrastructure analysis instances."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Infrastructure analysis must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ],
        [ sh:class uco-identity:Person ;
            sh:maxCount 1 ;
            sh:message "Infrastructure analysis must specify performing analyst."@en ;
            sh:minCount 1 ;
            sh:path uco-action:performer ] ;
    sh:targetClass cacontology-infrastructure:InfrastructureAnalysis .

cacontology-infrastructure:InfrastructureCompromiseSituation a owl:Class ;
    rdfs:label "Infrastructure Compromise Situation"@en ;
    rdfs:comment "Situation where platform infrastructure has been compromised or breached (gUFO Situation)."@en ;
    rdfs:subClassOf gufo:Situation .

cacontology-infrastructure:InfrastructureDecommissionPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Infrastructure Decommission Phase"@en ;
    rdfs:comment "Phase during which infrastructure is being decommissioned or shut down (gUFO Phase - anti-rigid)."@en ;
    rdfs:subClassOf cacontology-infrastructure:PlatformInfrastructure .

cacontology-infrastructure:InfrastructureDeploymentPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Infrastructure Deployment Phase"@en ;
    rdfs:comment "Phase during which platform infrastructure is being deployed and configured (gUFO Phase - anti-rigid)."@en ;
    rdfs:subClassOf cacontology-infrastructure:PlatformInfrastructure .

cacontology-infrastructure:InfrastructureDiscoverySituation a owl:Class ;
    rdfs:label "Infrastructure Discovery Situation"@en ;
    rdfs:comment "Situation involving the discovery of previously unknown infrastructure components (gUFO Situation)."@en ;
    rdfs:subClassOf gufo:Situation .

cacontology-infrastructure:InfrastructureFailureSituation a owl:Class ;
    rdfs:label "Infrastructure Failure Situation"@en ;
    rdfs:comment "Situation involving infrastructure failure or outage (gUFO Situation)."@en ;
    rdfs:subClassOf gufo:Situation .

cacontology-infrastructure:InfrastructureHostingCrossReferenceShape a sh:NodeShape ;
    rdfs:label "Infrastructure Hosting Cross Reference Shape"@en ;
    rdfs:comment "Validates that platform infrastructure has hosting relationships."@en ;
    sh:sparql [ sh:message "Platform infrastructure should have hosting provider relationships."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-infrastructure:PlatformInfrastructure .
                FILTER NOT EXISTS {
                    $this cacontology-infrastructure:hostedBy ?provider .
                    ?provider a cacontology-infrastructure:HostingProvider .
                }
            }
        """ ] ;
    sh:targetClass cacontology-infrastructure:PlatformInfrastructure .

cacontology-infrastructure:InfrastructureMaintenancePhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Infrastructure Maintenance Phase"@en ;
    rdfs:comment "Phase during which infrastructure undergoes maintenance and updates (gUFO Phase - anti-rigid)."@en ;
    rdfs:subClassOf cacontology-infrastructure:PlatformInfrastructure .

cacontology-infrastructure:InfrastructureOperationalPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Infrastructure Operational Phase"@en ;
    rdfs:comment "Phase during which platform infrastructure is actively supporting operations (gUFO Phase - anti-rigid)."@en ;
    rdfs:subClassOf cacontology-infrastructure:PlatformInfrastructure .

cacontology-infrastructure:InfrastructureTakedownShape a sh:NodeShape ;
    rdfs:label "Infrastructure Takedown Shape"@en ;
    rdfs:comment "Validation shape for infrastructure takedown instances."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Infrastructure takedown must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Infrastructure takedown may specify end time."@en ;
            sh:minCount 0 ;
            sh:path uco-core:endTime ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 8760.0 ;
            sh:message "Takedown duration must be between 0.1 and 8760 hours (1 year)."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.1 ;
            sh:path cacontology-infrastructure:takedownDuration ] ;
    sh:targetClass cacontology-infrastructure:InfrastructureTakedown .

cacontology-infrastructure:LoadBalancerShape a sh:NodeShape ;
    rdfs:label "Load Balancer Shape"@en ;
    rdfs:comment "Validation shape for load balancer instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 100 ;
            sh:message "Load balancer name should be 2-100 characters when specified."@en ;
            sh:minCount 0 ;
            sh:minLength 2 ;
            sh:path uco-core:name ] ;
    sh:targetClass cacontology-infrastructure:LoadBalancer .

cacontology-infrastructure:NetworkInfrastructureShape a sh:NodeShape ;
    rdfs:label "Network Infrastructure Shape"@en ;
    rdfs:comment "Validation shape for network infrastructure instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 100 ;
            sh:message "Network infrastructure name should be 2-100 characters when specified."@en ;
            sh:minCount 0 ;
            sh:minLength 2 ;
            sh:path uco-core:name ] ;
    sh:targetClass cacontology-infrastructure:NetworkInfrastructure .

cacontology-infrastructure:NetworkTopologyAnalysisShape a sh:NodeShape ;
    rdfs:label "Network Topology Analysis Shape"@en ;
    rdfs:comment "Validation shape for network topology analysis instances."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Network topology analysis must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ],
        [ sh:datatype xsd:string ;
            sh:in ( "simple" "moderate" "complex" "highly_complex" ) ;
            sh:maxCount 1 ;
            sh:message "Network complexity must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-infrastructure:networkComplexity ] ;
    sh:targetClass cacontology-infrastructure:NetworkTopologyAnalysis .

cacontology-infrastructure:PaymentProcessingShape a sh:NodeShape ;
    rdfs:label "Payment Processing Shape"@en ;
    rdfs:comment "Validation shape for payment processing instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "credit_cards" "cryptocurrency" "digital_wallets" "bank_transfers" "prepaid_cards" "gift_cards" "cash_equivalents" ) ;
            sh:maxCount 10 ;
            sh:message "Payment methods must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-infrastructure:paymentMethods ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 100000000.0 ;
            sh:message "Monthly revenue must be between 0 and 100 million USD."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-infrastructure:monthlyRevenue ] ;
    sh:targetClass cacontology-infrastructure:PaymentProcessing .

cacontology-infrastructure:PaymentSystemCrossReferenceShape a sh:NodeShape ;
    rdfs:label "Payment System Cross Reference Shape"@en ;
    rdfs:comment "Validates payment system relationships for monetized platforms."@en ;
    sh:sparql [ sh:message "Monetized platform infrastructure should have payment processing systems."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-infrastructure:PlatformInfrastructure .
                ?payment cacontology-infrastructure:monthlyRevenue ?revenue .
                FILTER (?revenue > 0)
                FILTER NOT EXISTS {
                    $this cacontology-infrastructure:usesPaymentSystem ?payment .
                }
            }
        """ ] ;
    sh:targetClass cacontology-infrastructure:PlatformInfrastructure .

cacontology-infrastructure:PlatformInfrastructureShape a sh:NodeShape ;
    rdfs:label "Platform Infrastructure Shape"@en ;
    rdfs:comment "Validation shape for platform infrastructure instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Infrastructure name should be 2-200 characters when specified."@en ;
            sh:minCount 0 ;
            sh:minLength 2 ;
            sh:path uco-core:name ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 1000 ;
            sh:message "Infrastructure description should be 10-1000 characters when specified."@en ;
            sh:minCount 0 ;
            sh:minLength 10 ;
            sh:path uco-core:description ] ;
    sh:targetClass cacontology-infrastructure:PlatformInfrastructure .

cacontology-infrastructure:ProxyInfrastructureShape a sh:NodeShape ;
    rdfs:label "Proxy Infrastructure Shape"@en ;
    rdfs:comment "Validation shape for proxy infrastructure instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 100 ;
            sh:message "Proxy infrastructure name should be 2-100 characters when specified."@en ;
            sh:minCount 0 ;
            sh:minLength 2 ;
            sh:path uco-core:name ] ;
    sh:targetClass cacontology-infrastructure:ProxyInfrastructure .

cacontology-infrastructure:SecurityConsistencyValidationShape a sh:NodeShape ;
    rdfs:label "Security Consistency Validation Shape"@en ;
    rdfs:comment "Validates security infrastructure consistency."@en ;
    sh:sparql [ sh:message "High-anonymity infrastructure should use appropriate obfuscation methods."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-infrastructure:AnonymityInfrastructure ;
                      cacontology-infrastructure:anonymityLevel "military-grade" .
                FILTER NOT EXISTS {
                    $this cacontology-infrastructure:obfuscationMethods ?method .
                    FILTER (?method IN ("Tor", "VPNs", "domain_fronting"))
                }
            }
        """ ] ;
    sh:targetClass cacontology-infrastructure:SecurityInfrastructure .

cacontology-infrastructure:SecurityInfrastructureShape a sh:NodeShape ;
    rdfs:label "Security Infrastructure Shape"@en ;
    rdfs:comment "Validation shape for security infrastructure instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "proxies" "VPNs" "Tor" "domain_fronting" "CDN_masking" "traffic_obfuscation" "protocol_tunneling" ) ;
            sh:maxCount 10 ;
            sh:message "Obfuscation methods must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-infrastructure:obfuscationMethods ] ;
    sh:targetClass cacontology-infrastructure:SecurityInfrastructure .

cacontology-infrastructure:SecurityOperatorRole a gufo:Role,
        owl:Class ;
    rdfs:label "Security Operator Role"@en ;
    rdfs:comment "Role of person managing security infrastructure and operations (gUFO Role - anti-rigid)."@en ;
    rdfs:subClassOf uco-identity:Person .

cacontology-infrastructure:ServerInfrastructureShape a sh:NodeShape ;
    rdfs:label "Server Infrastructure Shape"@en ;
    rdfs:comment "Validation shape for server infrastructure instances."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 10000 ;
            sh:message "Server count must be between 1 and 10000 when specified."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1 ;
            sh:path cacontology-infrastructure:serverCount ],
        [ sh:datatype xsd:string ;
            sh:in ( "AWS" "Azure" "GCP" "private_cloud" "dedicated_servers" "hybrid" "unknown" ) ;
            sh:maxCount 1 ;
            sh:message "Cloud platform must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-infrastructure:cloudPlatform ] ;
    sh:targetClass cacontology-infrastructure:ServerInfrastructure .

cacontology-infrastructure:ServerSeizureShape a sh:NodeShape ;
    rdfs:label "Server Seizure Shape"@en ;
    rdfs:comment "Validation shape for server seizure instances."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Server seizure must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 10000 ;
            sh:message "Servers seized must be between 1 and 10000 when specified."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1 ;
            sh:path cacontology-infrastructure:serversSeized ] ;
    sh:targetClass cacontology-infrastructure:ServerSeizure .

cacontology-infrastructure:SubscriptionManagementShape a sh:NodeShape ;
    rdfs:label "Subscription Management Shape"@en ;
    rdfs:comment "Validation shape for subscription management instances."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 20 ;
            sh:message "Subscription tiers must be between 1 and 20."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1 ;
            sh:path cacontology-infrastructure:subscriptionTiers ] ;
    sh:targetClass cacontology-infrastructure:SubscriptionManagement .

cacontology-infrastructure:SystemAdministratorRole a gufo:Role,
        owl:Class ;
    rdfs:label "System Administrator Role"@en ;
    rdfs:comment "Role of person responsible for infrastructure system administration (gUFO Role - anti-rigid)."@en ;
    rdfs:subClassOf uco-identity:Person .

cacontology-infrastructure:TakedownEffectivenessValidationShape a sh:NodeShape ;
    rdfs:label "Takedown Effectiveness Validation Shape"@en ;
    rdfs:comment "Validates takedown operation effectiveness metrics."@en ;
    sh:sparql [ sh:message "Large-scale takedown operations should have significant seizure metrics."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-infrastructure:takedownDuration ?duration .
                FILTER (?duration > 24)
                FILTER NOT EXISTS {
                    { ?seizure a cacontology-infrastructure:ServerSeizure ;
                              cacontology-infrastructure:serversSeized ?servers .
                      FILTER (?servers > 10) } UNION
                    { ?sinkhole a cacontology-infrastructure:DomainSinkholing ;
                                cacontology-infrastructure:domainsSinkholed ?domains .
                      FILTER (?domains > 5) }
                }
            }
        """ ] ;
    sh:targetClass cacontology-infrastructure:InfrastructureTakedown .

cacontology-infrastructure:TakedownOperatorRole a gufo:Role,
        owl:Class ;
    rdfs:label "Takedown Operator Role"@en ;
    rdfs:comment "Role of law enforcement personnel conducting takedown operations (gUFO Role - anti-rigid)."@en ;
    rdfs:subClassOf uco-identity:Person .

cacontology-infrastructure:TakedownSequenceValidationShape a sh:NodeShape ;
    rdfs:label "Takedown Sequence Validation Shape"@en ;
    rdfs:comment "Validates that infrastructure analysis occurs after takedown operations."@en ;
    sh:sparql [ sh:message "Infrastructure analysis should occur after takedown operations when analyzing seized infrastructure."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-infrastructure:InfrastructureAnalysis ;
                      uco-core:startTime ?analysisTime ;
                      cacontology-infrastructure:analysesInfrastructure ?infrastructure .
                ?takedown cacontology-infrastructure:targetsInfrastructure ?infrastructure ;
                          uco-core:startTime ?takedownTime .
                FILTER (?analysisTime < ?takedownTime)
            }
        """ ] ;
    sh:targetClass cacontology-infrastructure:InfrastructureAnalysis .

cacontology-infrastructure:TakedownTargetCrossReferenceShape a sh:NodeShape ;
    rdfs:label "Takedown Target Cross Reference Shape"@en ;
    rdfs:comment "Validates that takedown operations target infrastructure."@en ;
    sh:sparql [ sh:message "Infrastructure takedown should target specific infrastructure."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-infrastructure:InfrastructureTakedown .
                FILTER NOT EXISTS {
                    $this cacontology-infrastructure:targetsInfrastructure ?infrastructure .
                    ?infrastructure a cacontology-infrastructure:PlatformInfrastructure .
                }
            }
        """ ] ;
    sh:targetClass cacontology-infrastructure:InfrastructureTakedown .

cacontology-infrastructure:TemporalValidationShape a sh:NodeShape ;
    rdfs:label "Temporal Validation Shape"@en ;
    rdfs:comment "Validates temporal consistency for infrastructure operations."@en ;
    sh:sparql [ sh:message "Start time must be before end time when both are specified."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this uco-core:startTime ?start ;
                      uco-core:endTime ?end .
                FILTER (?start >= ?end)
            }
        """ ] ;
    sh:targetClass cacontology-infrastructure:AccountFreezing,
        cacontology-infrastructure:DataMirrorCreation,
        cacontology-infrastructure:DomainSinkholing,
        cacontology-infrastructure:FinancialFlowAnalysis,
        cacontology-infrastructure:InfrastructureAnalysis,
        cacontology-infrastructure:InfrastructureTakedown,
        cacontology-infrastructure:NetworkTopologyAnalysis,
        cacontology-infrastructure:ServerSeizure,
        cacontology-infrastructure:UserAccessPatternAnalysis .

cacontology-infrastructure:UserAccessPatternAnalysisShape a sh:NodeShape ;
    rdfs:label "User Access Pattern Analysis Shape"@en ;
    rdfs:comment "Validation shape for user access pattern analysis instances."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "User access pattern analysis must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 200 ;
            sh:message "User geographic spread must be between 1 and 200 countries."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1 ;
            sh:path cacontology-infrastructure:userGeographicSpread ] ;
    sh:targetClass cacontology-infrastructure:UserAccessPatternAnalysis .

cacontology-infrastructure:analysesAccess a owl:ObjectProperty ;
    rdfs:label "analyses access"@en ;
    rdfs:comment "Links access pattern analysis to user access infrastructure."@en ;
    rdfs:domain cacontology-infrastructure:UserAccessPatternAnalysis ;
    rdfs:range cacontology-infrastructure:PlatformInfrastructure .

cacontology-infrastructure:analysesInfrastructure a owl:ObjectProperty ;
    rdfs:label "analyses infrastructure"@en ;
    rdfs:comment "Links analysis process to infrastructure being analyzed."@en ;
    rdfs:domain cacontology-infrastructure:InfrastructureAnalysis ;
    rdfs:range cacontology-infrastructure:PlatformInfrastructure .

cacontology-infrastructure:containsComponent a owl:ObjectProperty ;
    rdfs:label "contains component"@en ;
    rdfs:comment "Indicates that one infrastructure component contains another as a functional part (gUFO part-whole relationship)."@en ;
    rdfs:domain cacontology-infrastructure:PlatformInfrastructure ;
    rdfs:range cacontology-infrastructure:PlatformInfrastructure ;
    rdfs:subPropertyOf gufo:isComponentOf .

cacontology-infrastructure:distributedAcross a owl:ObjectProperty ;
    rdfs:label "distributed across"@en ;
    rdfs:comment "Links infrastructure to geographic distribution strategy."@en ;
    rdfs:domain cacontology-infrastructure:PlatformInfrastructure ;
    rdfs:range cacontology-infrastructure:GeographicDistribution .

cacontology-infrastructure:freezesAccounts a owl:ObjectProperty ;
    rdfs:label "freezes accounts"@en ;
    rdfs:comment "Links account freezing to payment processing systems."@en ;
    rdfs:domain cacontology-infrastructure:AccountFreezing ;
    rdfs:range cacontology-infrastructure:PaymentProcessing .

cacontology-infrastructure:hasAnalysisBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has analysis begin point"@en ;
    rdfs:comment "Temporal begin point for analysis events (gUFO temporal property)."@en ;
    rdfs:domain cacontology-infrastructure:InfrastructureAnalysis ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-infrastructure:hasAnalysisEndPoint a owl:DatatypeProperty ;
    rdfs:label "has analysis end point"@en ;
    rdfs:comment "Temporal end point for analysis events (gUFO temporal property)."@en ;
    rdfs:domain cacontology-infrastructure:InfrastructureAnalysis ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-infrastructure:hasTakedownBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has takedown begin point"@en ;
    rdfs:comment "Temporal begin point for takedown events (gUFO temporal property)."@en ;
    rdfs:domain cacontology-infrastructure:InfrastructureTakedown ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-infrastructure:hasTakedownEndPoint a owl:DatatypeProperty ;
    rdfs:label "has takedown end point"@en ;
    rdfs:comment "Temporal end point for takedown events (gUFO temporal property)."@en ;
    rdfs:domain cacontology-infrastructure:InfrastructureTakedown ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-infrastructure:hostedBy a owl:ObjectProperty ;
    rdfs:label "hosted by"@en ;
    rdfs:comment "Links infrastructure to hosting provider."@en ;
    rdfs:domain cacontology-infrastructure:PlatformInfrastructure ;
    rdfs:range cacontology-infrastructure:HostingProvider .

cacontology-infrastructure:leadsToCriminalCharges a owl:ObjectProperty ;
    rdfs:label "leads to criminal charges"@en ;
    rdfs:comment "Links infrastructure takedown to resulting criminal charges."@en ;
    rdfs:domain cacontology-infrastructure:InfrastructureTakedown ;
    rdfs:range uco-observable:ObservableObject .

cacontology-infrastructure:protectedBy a owl:ObjectProperty ;
    rdfs:label "protected by"@en ;
    rdfs:comment "Links infrastructure to security systems protecting it."@en ;
    rdfs:domain cacontology-infrastructure:PlatformInfrastructure ;
    rdfs:range cacontology-infrastructure:SecurityInfrastructure .

cacontology-infrastructure:providesEvidence a owl:ObjectProperty ;
    rdfs:label "provides evidence"@en ;
    rdfs:comment "Links infrastructure analysis to evidence discovered."@en ;
    rdfs:domain cacontology-infrastructure:InfrastructureAnalysis ;
    rdfs:range uco-observable:ObservableObject .

cacontology-infrastructure:resultsinSeizure a owl:ObjectProperty ;
    rdfs:label "results in seizure"@en ;
    rdfs:comment "Links takedown operation to asset seizure actions."@en ;
    rdfs:domain cacontology-infrastructure:InfrastructureTakedown ;
    rdfs:range uco-action:Action .

cacontology-infrastructure:revealsTopology a owl:ObjectProperty ;
    rdfs:label "reveals topology"@en ;
    rdfs:comment "Links network analysis to network infrastructure topology."@en ;
    rdfs:domain cacontology-infrastructure:NetworkTopologyAnalysis ;
    rdfs:range cacontology-infrastructure:NetworkInfrastructure .

cacontology-infrastructure:seizesServers a owl:ObjectProperty ;
    rdfs:label "seizes servers"@en ;
    rdfs:comment "Links server seizure to specific server infrastructure."@en ;
    rdfs:domain cacontology-infrastructure:ServerSeizure ;
    rdfs:range cacontology-infrastructure:ServerInfrastructure .

cacontology-infrastructure:sinkholeDomains a owl:ObjectProperty ;
    rdfs:label "sinkhole domains"@en ;
    rdfs:comment "Links sinkholing operation to domain infrastructure."@en ;
    rdfs:domain cacontology-infrastructure:DomainSinkholing ;
    rdfs:range cacontology-infrastructure:DomainInfrastructure .

cacontology-infrastructure:targetsInfrastructure a owl:ObjectProperty ;
    rdfs:label "targets infrastructure"@en ;
    rdfs:comment "Links takedown operation to infrastructure being targeted."@en ;
    rdfs:domain cacontology-infrastructure:InfrastructureTakedown ;
    rdfs:range cacontology-infrastructure:PlatformInfrastructure .

cacontology-infrastructure:tracesPayments a owl:ObjectProperty ;
    rdfs:label "traces payments"@en ;
    rdfs:comment "Links financial analysis to payment processing systems."@en ;
    rdfs:domain cacontology-infrastructure:FinancialFlowAnalysis ;
    rdfs:range cacontology-infrastructure:PaymentProcessing .

cacontology-infrastructure:usesPaymentSystem a owl:ObjectProperty ;
    rdfs:label "uses payment system"@en ;
    rdfs:comment "Links platform to payment processing infrastructure."@en ;
    rdfs:domain cacontology-infrastructure:PlatformInfrastructure ;
    rdfs:range cacontology-infrastructure:PaymentProcessing .

cacontology-infrastructure-shapes:AnalysisEventTemporalShape a sh:NodeShape ;
    rdfs:label "Analysis Event Temporal Shape"@en ;
    rdfs:comment "Validates gUFO temporal constraints for analysis events."@en ;
    sh:sparql [ sh:message "Analysis events must have consistent temporal boundaries with end after start."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-infrastructure:hasAnalysisBeginPoint ?start ;
                      cacontology-infrastructure:hasAnalysisEndPoint ?end .
                FILTER (?end <= ?start)
            }
        """ ] ;
    sh:targetClass cacontology-infrastructure:InfrastructureAnalysis .

cacontology-infrastructure-shapes:AnalysisEventTypeValidationShape a sh:NodeShape ;
    rdfs:label "Analysis Event Type Validation Shape"@en ;
    rdfs:comment "Validates gUFO Event type consistency for analysis events."@en ;
    sh:property [ sh:hasValue gufo:Event ;
            sh:message "Infrastructure analysis must be typed as gUFO Event."@en ;
            sh:minCount 1 ;
            sh:path rdf:type ] ;
    sh:sparql [ sh:message "Analysis events must be properly typed as gUFO Event and extend UCO Action."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this rdf:type gufo:Event .
                FILTER NOT EXISTS {
                    $this rdf:type ?actionClass .
                    ?actionClass rdfs:subClassOf* uco-action:Action .
                }
            }
        """ ] ;
    sh:targetClass cacontology-infrastructure:InfrastructureAnalysis .

cacontology-infrastructure-shapes:AnalysisParticipationShape a sh:NodeShape ;
    rdfs:label "Analysis Participation Shape"@en ;
    rdfs:comment "Validates gUFO participation constraints for analysis operations."@en ;
    sh:sparql [ sh:message "Analysis operations must involve analyst roles (gUFO participation constraint)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this rdf:type cacontology-infrastructure:InfrastructureAnalysis .
                FILTER NOT EXISTS {
                    ?analyst a cacontology-infrastructure:AnalystRole ;
                            uco-action:performer ?person .
                }
            }
        """ ] ;
    sh:targetClass cacontology-infrastructure:InfrastructureAnalysis .

cacontology-infrastructure-shapes:ComprehensiveAnalysisRule a sh:NodeShape ;
    rdfs:label "Comprehensive Analysis Rule"@en ;
    rdfs:comment "Advanced gUFO business rule: Comprehensive analysis requires high accuracy and appropriate timeliness."@en ;
    sh:sparql [ sh:message "Comprehensive or exhaustive analysis must have high accuracy and good timeliness (gUFO business rule)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-infrastructure:hasAnalysisDepth ?depth .
                FILTER (?depth IN ("comprehensive", "exhaustive"))
                {
                    FILTER NOT EXISTS {
                        $this cacontology-infrastructure:hasAnalysisAccuracy ?accuracy .
                        FILTER (?accuracy >= 0.85)
                    }
                } UNION {
                    FILTER NOT EXISTS {
                        $this cacontology-infrastructure:hasAnalysisTimeliness ?timeliness .
                        FILTER (?timeliness IN ("timely", "fast", "real_time"))
                    }
                }
            }
        """ ] ;
    sh:targetClass cacontology-infrastructure:InfrastructureAnalysis .

cacontology-infrastructure-shapes:EffectiveTakedownRule a sh:NodeShape ;
    rdfs:label "Effective Takedown Rule"@en ;
    rdfs:comment "Advanced gUFO business rule: Highly effective takedowns should have high completeness and fast speed."@en ;
    sh:sparql [ sh:message "Highly effective takedowns must have high completeness and appropriate speed (gUFO business rule)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-infrastructure:hasTakedownEffectiveness ?effectiveness .
                FILTER (?effectiveness >= 0.9)
                {
                    FILTER NOT EXISTS {
                        $this cacontology-infrastructure:hasTakedownCompleteness ?completeness .
                        FILTER (?completeness >= 0.8)
                    }
                } UNION {
                    FILTER NOT EXISTS {
                        $this cacontology-infrastructure:hasTakedownSpeed ?speed .
                        FILTER (?speed IN ("fast", "rapid", "instantaneous"))
                    }
                }
            }
        """ ] ;
    sh:targetClass cacontology-infrastructure:InfrastructureTakedown .

cacontology-infrastructure-shapes:EnhancedAnalysisShape a sh:NodeShape ;
    rdfs:label "Enhanced Analysis Shape"@en ;
    rdfs:comment "Enhanced validation shape for infrastructure analysis with gUFO quality aspects."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "superficial" "basic" "thorough" "comprehensive" "exhaustive" ) ;
            sh:maxCount 1 ;
            sh:message "Analysis depth must be from allowed values (gUFO quality aspect)."@en ;
            sh:path cacontology-infrastructure:hasAnalysisDepth ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Analysis accuracy must be between 0.0 and 1.0 (gUFO quality aspect)."@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-infrastructure:hasAnalysisAccuracy ],
        [ sh:datatype xsd:string ;
            sh:in ( "delayed" "slow" "timely" "fast" "real_time" ) ;
            sh:maxCount 1 ;
            sh:message "Analysis timeliness must be from allowed values (gUFO quality aspect)."@en ;
            sh:path cacontology-infrastructure:hasAnalysisTimeliness ] ;
    sh:targetClass cacontology-infrastructure:InfrastructureAnalysis .

cacontology-infrastructure-shapes:EnhancedPaymentProcessingShape a sh:NodeShape ;
    rdfs:label "Enhanced Payment Processing Shape"@en ;
    rdfs:comment "Enhanced validation shape for payment processing with gUFO quality aspects."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "simple" "basic" "intermediate" "sophisticated" "highly_sophisticated" ) ;
            sh:maxCount 1 ;
            sh:message "Financial complexity must be from allowed values (gUFO quality aspect)."@en ;
            sh:path cacontology-infrastructure:hasFinancialComplexity ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Financial traceability must be between 0.0 and 1.0 (gUFO quality aspect)."@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-infrastructure:hasFinancialTraceability ] ;
    sh:targetClass cacontology-infrastructure:PaymentProcessing .

cacontology-infrastructure-shapes:EnhancedPlatformInfrastructureShape a sh:NodeShape ;
    rdfs:label "Enhanced Platform Infrastructure Shape"@en ;
    rdfs:comment "Enhanced validation shape for platform infrastructure with gUFO quality aspects."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Infrastructure name should be 2-200 characters when specified."@en ;
            sh:minCount 0 ;
            sh:minLength 2 ;
            sh:path uco-core:name ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Infrastructure reliability must be between 0.0 and 1.0 (gUFO quality aspect)."@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-infrastructure:hasInfrastructureReliability ],
        [ sh:datatype xsd:string ;
            sh:in ( "poor" "fair" "good" "excellent" "optimal" ) ;
            sh:maxCount 1 ;
            sh:message "Infrastructure performance must be from allowed values (gUFO quality aspect)."@en ;
            sh:path cacontology-infrastructure:hasInfrastructurePerformance ],
        [ sh:datatype xsd:string ;
            sh:in ( "limited" "moderate" "high" "unlimited" "unknown" ) ;
            sh:maxCount 1 ;
            sh:message "Infrastructure scalability must be from allowed values (gUFO quality aspect)."@en ;
            sh:path cacontology-infrastructure:hasInfrastructureScalability ],
        [ sh:datatype xsd:string ;
            sh:in ( "minimal" "low" "moderate" "high" "critical" ) ;
            sh:maxCount 1 ;
            sh:message "Infrastructure vulnerability must be from allowed values (gUFO quality aspect)."@en ;
            sh:path cacontology-infrastructure:hasInfrastructureVulnerability ] ;
    sh:targetClass cacontology-infrastructure:PlatformInfrastructure .

cacontology-infrastructure-shapes:EnhancedSecurityInfrastructureShape a sh:NodeShape ;
    rdfs:label "Enhanced Security Infrastructure Shape"@en ;
    rdfs:comment "Enhanced validation shape for security infrastructure with gUFO quality aspects."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "weak" "basic" "standard" "strong" "military_grade" ) ;
            sh:maxCount 1 ;
            sh:message "Security strength must be from allowed values (gUFO quality aspect)."@en ;
            sh:path cacontology-infrastructure:hasSecurityStrength ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Anonymity effectiveness must be between 0.0 and 1.0 (gUFO quality aspect)."@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-infrastructure:hasAnonymityEffectiveness ],
        [ sh:datatype xsd:string ;
            sh:in ( "basic" "intermediate" "advanced" "sophisticated" "cutting_edge" ) ;
            sh:maxCount 1 ;
            sh:message "Obfuscation complexity must be from allowed values (gUFO quality aspect)."@en ;
            sh:path cacontology-infrastructure:hasObfuscationComplexity ] ;
    sh:targetClass cacontology-infrastructure:SecurityInfrastructure .

cacontology-infrastructure-shapes:EnhancedTakedownShape a sh:NodeShape ;
    rdfs:label "Enhanced Takedown Shape"@en ;
    rdfs:comment "Enhanced validation shape for takedown operations with gUFO quality aspects."@en ;
    sh:property [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Takedown effectiveness must be between 0.0 and 1.0 (gUFO quality aspect)."@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-infrastructure:hasTakedownEffectiveness ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Takedown completeness must be between 0.0 and 1.0 (gUFO quality aspect)."@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-infrastructure:hasTakedownCompleteness ],
        [ sh:datatype xsd:string ;
            sh:in ( "slow" "moderate" "fast" "rapid" "instantaneous" ) ;
            sh:maxCount 1 ;
            sh:message "Takedown speed must be from allowed values (gUFO quality aspect)."@en ;
            sh:path cacontology-infrastructure:hasTakedownSpeed ] ;
    sh:targetClass cacontology-infrastructure:InfrastructureTakedown .

cacontology-infrastructure-shapes:HighPerformanceInfrastructureRule a sh:NodeShape ;
    rdfs:label "High Performance Infrastructure Rule"@en ;
    rdfs:comment "Advanced gUFO business rule: High performance infrastructure should have excellent reliability and low vulnerability."@en ;
    sh:sparql [ sh:message "Excellent or optimal performance infrastructure must have high reliability and low vulnerability (gUFO business rule)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-infrastructure:hasInfrastructurePerformance ?performance .
                FILTER (?performance IN ("excellent", "optimal"))
                {
                    FILTER NOT EXISTS {
                        $this cacontology-infrastructure:hasInfrastructureReliability ?reliability .
                        FILTER (?reliability >= 0.8)
                    }
                } UNION {
                    FILTER NOT EXISTS {
                        $this cacontology-infrastructure:hasInfrastructureVulnerability ?vulnerability .
                        FILTER (?vulnerability IN ("minimal", "low"))
                    }
                }
            }
        """ ] ;
    sh:targetClass cacontology-infrastructure:PlatformInfrastructure .

cacontology-infrastructure-shapes:InfrastructureCompositionShape a sh:NodeShape ;
    rdfs:label "Infrastructure Composition Shape"@en ;
    rdfs:comment "Validates gUFO part-whole relationships for infrastructure composition."@en ;
    sh:sparql [ sh:message "Infrastructure containment relationships must be consistent with gUFO part-whole constraints."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-infrastructure:containsComponent ?part .
                ?part cacontology-infrastructure:containsComponent $this .
            }
        """ ] ;
    sh:targetClass cacontology-infrastructure:PlatformInfrastructure .

cacontology-infrastructure-shapes:InfrastructureDataQualityShape a sh:NodeShape ;
    rdfs:label "Infrastructure Data Quality Shape"@en ;
    rdfs:comment "Enhanced data quality validation for infrastructure with gUFO quality consistency rules."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Infrastructure label should be between 5 and 200 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 5 ;
            sh:path rdfs:label ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 1000 ;
            sh:message "Infrastructure comment should be between 10 and 1000 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 10 ;
            sh:path rdfs:comment ] ;
    sh:sparql [ sh:message "Infrastructure performance and reliability should be correlated (gUFO quality consistency)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-infrastructure:hasInfrastructurePerformance ?performance ;
                      cacontology-infrastructure:hasInfrastructureReliability ?reliability .
                {
                    FILTER (?performance = "optimal" && ?reliability < 0.9)
                } UNION {
                    FILTER (?performance = "excellent" && (?reliability < 0.7 || ?reliability > 0.95))
                } UNION {
                    FILTER (?performance = "poor" && ?reliability > 0.4)
                }
            }
        """ ],
        [ sh:message "Infrastructure vulnerability and security should be inversely correlated (gUFO quality consistency)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-infrastructure:hasInfrastructureVulnerability ?vulnerability ;
                      cacontology-infrastructure:protectedBy ?security .
                ?security cacontology-infrastructure:hasSecurityStrength ?strength .
                {
                    FILTER (?vulnerability = "critical" && ?strength NOT IN ("strong", "military_grade"))
                } UNION {
                    FILTER (?vulnerability = "minimal" && ?strength NOT IN ("weak", "basic"))
                }
            }
        """ ] ;
    sh:targetClass cacontology-infrastructure:PlatformInfrastructure .

cacontology-infrastructure-shapes:InfrastructureObjectTypeValidationShape a sh:NodeShape ;
    rdfs:label "Infrastructure Object Type Validation Shape"@en ;
    rdfs:comment "Validates gUFO Object type consistency for platform infrastructure."@en ;
    sh:property [ sh:hasValue gufo:Object ;
            sh:message "Platform infrastructure must be typed as gUFO Object."@en ;
            sh:minCount 1 ;
            sh:path rdf:type ] ;
    sh:sparql [ sh:message "Infrastructure objects must be properly typed as gUFO Object and extend UCO Observable."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this rdf:type gufo:Object .
                FILTER NOT EXISTS {
                    $this rdf:type ?obsClass .
                    ?obsClass rdfs:subClassOf* uco-observable:ObservableObject .
                }
            }
        """ ] ;
    sh:targetClass cacontology-infrastructure:PlatformInfrastructure .

cacontology-infrastructure-shapes:InfrastructureParticipationShape a sh:NodeShape ;
    rdfs:label "Infrastructure Participation Shape"@en ;
    rdfs:comment "Validates gUFO participation constraints for platform infrastructure."@en ;
    sh:sparql [ sh:message "Platform infrastructure must be associated with hosting providers or management roles (gUFO participation constraint)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this rdf:type cacontology-infrastructure:PlatformInfrastructure .
                FILTER NOT EXISTS {
                    { $this cacontology-infrastructure:hostedBy ?provider } UNION
                    { ?role a gufo:Role ; cacontology-infrastructure:manages $this }
                }
            }
        """ ] ;
    sh:targetClass cacontology-infrastructure:PlatformInfrastructure .

cacontology-infrastructure-shapes:InfrastructurePhaseTemporalShape a sh:NodeShape ;
    rdfs:label "Infrastructure Phase Temporal Shape"@en ;
    rdfs:comment "Validates gUFO temporal constraints for infrastructure phases."@en ;
    sh:property [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Infrastructure phase may have begin point timestamp."@en ;
            sh:path cacontology-infrastructure:hasPhaseBeginPoint ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Infrastructure phase may have end point timestamp."@en ;
            sh:path cacontology-infrastructure:hasPhaseEndPoint ] ;
    sh:sparql [ sh:message "Phase end must be after begin when both are specified."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-infrastructure:hasPhaseBeginPoint ?start ;
                      cacontology-infrastructure:hasPhaseEndPoint ?end .
                FILTER (?end <= ?start)
            }
        """ ] ;
    sh:targetClass gufo:Phase .

cacontology-infrastructure-shapes:InfrastructurePhaseTypeValidationShape a sh:NodeShape ;
    rdfs:label "Infrastructure Phase Type Validation Shape"@en ;
    rdfs:comment "Validates gUFO Phase type consistency for infrastructure phases."@en ;
    sh:sparql [ sh:message "Infrastructure phases must be properly typed as gUFO Phase and extend infrastructure classes."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this rdf:type gufo:Phase .
                FILTER NOT EXISTS {
                    $this rdfs:subClassOf* cacontology-infrastructure:PlatformInfrastructure .
                }
            }
        """ ] ;
    sh:targetClass gufo:Phase .

cacontology-infrastructure-shapes:InfrastructureSituationTypeValidationShape a sh:NodeShape ;
    rdfs:label "Infrastructure Situation Type Validation Shape"@en ;
    rdfs:comment "Validates gUFO Situation type consistency for infrastructure situations."@en ;
    sh:property [ sh:hasValue gufo:Situation ;
            sh:message "Infrastructure situation should extend gUFO Situation."@en ;
            sh:minCount 0 ;
            sh:path rdfs:subClassOf ] ;
    sh:targetClass gufo:Situation .

cacontology-infrastructure-shapes:InfrastructureTemporalShape a sh:NodeShape ;
    rdfs:label "Infrastructure Temporal Shape"@en ;
    rdfs:comment "Validates gUFO temporal constraints for platform infrastructure."@en ;
    sh:property [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Infrastructure may have begin point timestamp."@en ;
            sh:path cacontology-infrastructure:hasInfrastructureBeginPoint ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Infrastructure may have end point timestamp."@en ;
            sh:path cacontology-infrastructure:hasInfrastructureEndPoint ] ;
    sh:sparql [ sh:message "Infrastructure end must be after begin when both are specified (gUFO temporal constraint)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-infrastructure:hasInfrastructureBeginPoint ?start ;
                      cacontology-infrastructure:hasInfrastructureEndPoint ?end .
                FILTER (?end <= ?start)
            }
        """ ] ;
    sh:targetClass cacontology-infrastructure:PlatformInfrastructure .

cacontology-infrastructure-shapes:SophisticatedFinancialRule a sh:NodeShape ;
    rdfs:label "Sophisticated Financial Rule"@en ;
    rdfs:comment "Advanced gUFO business rule: Sophisticated financial systems should have low traceability."@en ;
    sh:sparql [ sh:message "Sophisticated or highly sophisticated financial systems must have low traceability (gUFO business rule)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-infrastructure:hasFinancialComplexity ?complexity .
                FILTER (?complexity IN ("sophisticated", "highly_sophisticated"))
                FILTER NOT EXISTS {
                    $this cacontology-infrastructure:hasFinancialTraceability ?traceability .
                    FILTER (?traceability <= 0.3)
                }
            }
        """ ] ;
    sh:targetClass cacontology-infrastructure:PaymentProcessing .

cacontology-infrastructure-shapes:StrongSecurityRule a sh:NodeShape ;
    rdfs:label "Strong Security Rule"@en ;
    rdfs:comment "Advanced gUFO business rule: Strong security requires advanced obfuscation and high anonymity effectiveness."@en ;
    sh:sparql [ sh:message "Strong or military-grade security must have advanced obfuscation and high anonymity effectiveness (gUFO business rule)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-infrastructure:hasSecurityStrength ?strength .
                FILTER (?strength IN ("strong", "military_grade"))
                {
                    FILTER NOT EXISTS {
                        $this cacontology-infrastructure:hasObfuscationComplexity ?complexity .
                        FILTER (?complexity IN ("advanced", "sophisticated", "cutting_edge"))
                    }
                } UNION {
                    FILTER NOT EXISTS {
                        $this cacontology-infrastructure:hasAnonymityEffectiveness ?effectiveness .
                        FILTER (?effectiveness >= 0.7)
                    }
                }
            }
        """ ] ;
    sh:targetClass cacontology-infrastructure:SecurityInfrastructure .

cacontology-infrastructure-shapes:TakedownEventTemporalShape a sh:NodeShape ;
    rdfs:label "Takedown Event Temporal Shape"@en ;
    rdfs:comment "Validates gUFO temporal constraints for takedown events."@en ;
    sh:sparql [ sh:message "gUFO Events must have consistent temporal boundaries with end after start."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-infrastructure:hasTakedownBeginPoint ?start ;
                      cacontology-infrastructure:hasTakedownEndPoint ?end .
                FILTER (?end <= ?start)
            }
        """ ] ;
    sh:targetClass cacontology-infrastructure:InfrastructureTakedown .

cacontology-infrastructure-shapes:TakedownEventTypeValidationShape a sh:NodeShape ;
    rdfs:label "Takedown Event Type Validation Shape"@en ;
    rdfs:comment "Validates gUFO Event type consistency for takedown events."@en ;
    sh:property [ sh:hasValue gufo:Event ;
            sh:message "Infrastructure takedown must be typed as gUFO Event."@en ;
            sh:minCount 1 ;
            sh:path rdf:type ] ;
    sh:sparql [ sh:message "Takedown events must be properly typed as gUFO Event and extend UCO Action."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this rdf:type gufo:Event .
                FILTER NOT EXISTS {
                    $this rdf:type ?actionClass .
                    ?actionClass rdfs:subClassOf* uco-action:Action .
                }
            }
        """ ] ;
    sh:targetClass cacontology-infrastructure:InfrastructureTakedown .

cacontology-infrastructure-shapes:TakedownParticipationShape a sh:NodeShape ;
    rdfs:label "Takedown Participation Shape"@en ;
    rdfs:comment "Validates gUFO participation constraints for takedown operations."@en ;
    sh:sparql [ sh:message "Takedown operations must involve takedown operators (gUFO participation constraint)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this rdf:type cacontology-infrastructure:InfrastructureTakedown .
                FILTER NOT EXISTS {
                    ?operator a cacontology-infrastructure:TakedownOperatorRole ;
                             uco-action:performer ?person .
                }
            }
        """ ] ;
    sh:targetClass cacontology-infrastructure:InfrastructureTakedown .

cacontology-infrastructure-shapes:TechnicalRoleTemporalShape a sh:NodeShape ;
    rdfs:label "Technical Role Temporal Shape"@en ;
    rdfs:comment "Validates gUFO temporal constraints for technical roles."@en ;
    sh:property [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Technical role may have begin point timestamp."@en ;
            sh:path cacontology-infrastructure:hasRoleBeginPoint ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Technical role may have end point timestamp."@en ;
            sh:path cacontology-infrastructure:hasRoleEndPoint ] ;
    sh:sparql [ sh:message "Role end must be after begin when both are specified."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-infrastructure:hasRoleBeginPoint ?start ;
                      cacontology-infrastructure:hasRoleEndPoint ?end .
                FILTER (?end <= ?start)
            }
        """ ] ;
    sh:targetClass gufo:Role .

cacontology-infrastructure-shapes:TechnicalRoleTypeValidationShape a sh:NodeShape ;
    rdfs:label "Technical Role Type Validation Shape"@en ;
    rdfs:comment "Validates gUFO Role type consistency for technical roles."@en ;
    sh:sparql [ sh:message "Technical roles must be properly typed as gUFO Role and extend UCO Identity."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this rdf:type gufo:Role .
                FILTER NOT EXISTS {
                    $this rdfs:subClassOf* uco-identity:Person .
                }
            }
        """ ] ;
    sh:targetClass gufo:Role .

cacontology-infrastructure-shapes:VulnerabilityAssessmentRule a sh:NodeShape ;
    rdfs:label "Vulnerability Assessment Rule"@en ;
    rdfs:comment "Advanced gUFO business rule: High vulnerability infrastructure should have enhanced security measures."@en ;
    sh:sparql [ sh:message "High or critical vulnerability infrastructure must be protected by strong security systems (gUFO business rule)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-infrastructure:hasInfrastructureVulnerability ?vulnerability .
                FILTER (?vulnerability IN ("high", "critical"))
                FILTER NOT EXISTS {
                    $this cacontology-infrastructure:protectedBy ?security .
                    ?security cacontology-infrastructure:hasSecurityStrength ?strength .
                    FILTER (?strength IN ("strong", "military_grade"))
                }
            }
        """ ] ;
    sh:targetClass cacontology-infrastructure:PlatformInfrastructure .

cacontology-institutional:AbandonedChild a gufo:Phase,
        owl:Class ;
    rdfs:label "Abandoned Child"@en ;
    rdfs:comment "Child who has been abandoned and requires institutional care."@en ;
    rdfs:subClassOf cacontology-institutional:VulnerableChildInCare .

cacontology-institutional:AdultVictimTestimonyShape a sh:NodeShape ;
    rdfs:label "Adult Victim Testimony Shape"@en ;
    rdfs:comment "Validation shape for adult victim testimony with gUFO integration."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 50 ;
            sh:message "Adult victim testimony must specify years from victimization (5-50)."@en ;
            sh:minCount 1 ;
            sh:minInclusive 5 ;
            sh:path cacontology-institutional:yearsFromVictimizationToTestimony ] ;
    sh:targetClass cacontology-institutional:AdultVictimTestimony .

cacontology-institutional:CareProviderExploitation a gufo:EventType,
        owl:Class ;
    rdfs:label "Care Provider Exploitation"@en ;
    rdfs:comment "Exploitation by individuals in care provider roles within institutions."@en ;
    rdfs:subClassOf cacontology-institutional:PositionOfTrustAbuse .

cacontology-institutional:CharitableCoverExploitation a gufo:EventType,
        owl:Class ;
    rdfs:label "Charitable Cover Exploitation"@en ;
    rdfs:comment "Use of charitable organization facade to conceal systematic child exploitation."@en ;
    rdfs:subClassOf cacontology-institutional:InstitutionalExploitation .

cacontology-institutional:CharitableFundingMisuseShape a sh:NodeShape ;
    rdfs:label "Charitable Funding Misuse Shape"@en ;
    rdfs:comment "Validation shape for funding misuse with gUFO integration."@en ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 10000000.00 ;
            sh:message "Funding misuse must specify amount ($1,000-$10,000,000)."@en ;
            sh:minCount 1 ;
            sh:minInclusive 1000.00 ;
            sh:path cacontology-institutional:fundingAmount ] ;
    sh:targetClass cacontology-institutional:CharitableFundingMisuse .

cacontology-institutional:CharitableOrganizationKindValidationShape a sh:NodeShape ;
    sh:message "Every charitable organization Kind must extend gufo:Object and be properly classified"@en ;
    sh:property [ sh:hasValue gufo:Kind ;
            sh:minCount 1 ;
            sh:path rdf:type ],
        [ sh:class gufo:Object ;
            sh:minCount 1 ;
            sh:path rdfs:subClassOf ] ;
    sh:targetClass gufo:Kind .

cacontology-institutional:CharitableOrganizationLeader a gufo:Role,
        owl:Class ;
    rdfs:label "Charitable Organization Leader"@en ;
    rdfs:comment "Leadership role within charitable organization serving children."@en ;
    rdfs:subClassOf gufo:Object,
        uco-role:Role .

cacontology-institutional:CharitableOrganizationShape a sh:NodeShape ;
    rdfs:label "Charitable Organization Shape"@en ;
    rdfs:comment "Validation shape for charitable organization instances with gUFO integration."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Organization may have founding date (gUFO temporal boundary)"@en ;
            sh:path cacontology-institutional:hasInstitutionFoundingDate ],
        [ sh:datatype xsd:string ;
            sh:in ( "excellent" "good" "fair" "poor" "terrible" "unknown" ) ;
            sh:maxCount 1 ;
            sh:message "Institutional reputation level must be from allowed list (gUFO quality aspect)"@en ;
            sh:path cacontology-institutional:hasInstitutionalReputationLevel ],
        [ sh:datatype xsd:string ;
            sh:in ( "high" "moderate" "low" "minimal" "none" "self_regulated" ) ;
            sh:maxCount 1 ;
            sh:message "Oversight level must be from allowed list (gUFO quality aspect)"@en ;
            sh:path cacontology-institutional:hasOversightLevel ],
        [ sh:datatype xsd:gYear ;
            sh:maxCount 1 ;
            sh:message "Organization may have founding year specified."@en ;
            sh:minCount 0 ;
            sh:path cacontology-institutional:foundingYear ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 10000 ;
            sh:message "Children served must be between 0 and 10,000."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0 ;
            sh:path cacontology-institutional:childrenServed ] ;
    sh:targetClass cacontology-institutional:CharitableOrganization .

cacontology-institutional:CrossBorderPersonalTravelShape a sh:NodeShape ;
    rdfs:label "Cross Border Personal Travel Shape"@en ;
    rdfs:comment "Validation shape for cross-border travel instances with gUFO integration."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Cross-border travel must have travel date (gUFO temporal boundary)"@en ;
            sh:minCount 1 ;
            sh:path cacontology-institutional:hasTravelDate ],
        [ sh:class uco-location:Location ;
            sh:maxCount 1 ;
            sh:message "Travel must specify origin location."@en ;
            sh:minCount 1 ;
            sh:path cacontology-institutional:travelsFrom ],
        [ sh:class uco-location:Location ;
            sh:maxCount 1 ;
            sh:message "Travel must specify destination location."@en ;
            sh:minCount 1 ;
            sh:path cacontology-institutional:travelsTo ] ;
    sh:targetClass cacontology-institutional:CrossBorderPersonalTravel .

cacontology-institutional:CrossBorderTravelPatternBusinessRule a sh:NodeShape ;
    sh:sparql [ sh:message "Repeated cross-border travel must enable significant institutional exploitation"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/institutional-exploitation#"^^xsd:anyURI ;
                            sh:prefix "cacontology-institutional" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-institutional:travelPatternYears ?years ;
                      cacontology-institutional:enablesExploitation ?exploitation .
                ?exploitation cacontology-institutional:victimCount ?victims .
                FILTER (?years >= 3 && ?victims < 3)
            }
        """ ] ;
    sh:targetClass cacontology-institutional:RepeatedCrossBorderTravel .

cacontology-institutional:DependencyExploitation a gufo:EventType,
        owl:Class ;
    rdfs:label "Dependency Exploitation"@en ;
    rdfs:comment "Exploitation of children's dependency on institution for basic needs."@en ;
    rdfs:subClassOf cacontology-institutional:InstitutionalExploitation .

cacontology-institutional:DonorManipulationBusinessRule a sh:NodeShape ;
    sh:sparql [ sh:message "Large-scale funding misuse requires multiple manipulation tactics"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/institutional-exploitation#"^^xsd:anyURI ;
                            sh:prefix "cacontology-institutional" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-institutional:fundingAmount ?amount ;
                      cacontology-institutional:manipulationTactics ?tactics .
                FILTER (?amount > 100000.00)
                {
                    SELECT $this (COUNT(?tactics) as ?tacticCount)
                    WHERE {
                        $this cacontology-institutional:manipulationTactics ?tactics .
                    }
                    GROUP BY $this
                    HAVING (?tacticCount < 2)
                }
            }
        """ ] ;
    sh:targetClass cacontology-institutional:DonorManipulation .

cacontology-institutional:DonorManipulationShape a sh:NodeShape ;
    rdfs:label "Donor Manipulation Shape"@en ;
    rdfs:comment "Validation shape for donor manipulation with gUFO integration."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 10000 ;
            sh:message "Donor manipulation must specify donor count (1-10,000)."@en ;
            sh:minCount 1 ;
            sh:minInclusive 1 ;
            sh:path cacontology-institutional:donorCount ],
        [ sh:datatype xsd:string ;
            sh:in ( "emotional_appeal" "false_reporting" "photo_manipulation" "fake_testimonials" "progress_exaggeration" "need_inflation" ) ;
            sh:message "Manipulation must specify at least one tactic."@en ;
            sh:minCount 1 ;
            sh:path cacontology-institutional:manipulationTactics ] ;
    sh:targetClass cacontology-institutional:DonorManipulation .

cacontology-institutional:ExploitationEventParticipationShape a sh:NodeShape ;
    sh:property [ sh:message "Every exploitation event must have at least perpetrator and victim participants (gUFO participation)"@en ;
            sh:minCount 2 ;
            sh:path [ sh:alternativePath ( cacontology-institutional:perpetratesExploitation cacontology-institutional:experiencesExploitation cacontology-institutional:facilitatedBy ) ] ] ;
    sh:targetClass cacontology-institutional:InstitutionalExploitation .

cacontology-institutional:ExploitationEventTypeValidationShape a sh:NodeShape ;
    sh:message "Every exploitation EventType must extend gufo:Event"@en ;
    sh:property [ sh:hasValue gufo:EventType ;
            sh:minCount 1 ;
            sh:path rdf:type ],
        [ sh:class gufo:Event ;
            sh:minCount 1 ;
            sh:path rdfs:subClassOf ] ;
    sh:targetClass gufo:EventType .

cacontology-institutional:ExploitationTemporalShape a sh:NodeShape ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Exploitation may have at most one start date (gUFO temporal boundary)"@en ;
            sh:path cacontology-institutional:hasExploitationStartDate ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Exploitation may have at most one end date (gUFO temporal boundary)"@en ;
            sh:path cacontology-institutional:hasExploitationEndDate ] ;
    sh:sparql [ sh:message "Exploitation end date must be after start date when both specified (gUFO temporal ordering)"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/institutional-exploitation#"^^xsd:anyURI ;
                            sh:prefix "cacontology-institutional" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-institutional:hasExploitationStartDate ?startDate .
                $this cacontology-institutional:hasExploitationEndDate ?endDate .
                FILTER (?endDate <= ?startDate)
            }
        """ ] ;
    sh:targetClass cacontology-institutional:InstitutionalExploitation .

cacontology-institutional:ExploitsVulnerabilityShape a sh:PropertyShape ;
    sh:class uco-core:UcoObject ;
    sh:description "Links exploitation to vulnerability exploited (gUFO aspect exploitation)" ;
    sh:minCount 0 ;
    sh:name "exploits vulnerability" ;
    sh:path cacontology-institutional:exploitsVulnerability .

cacontology-institutional:FacilitatedByShape a sh:PropertyShape ;
    sh:class cacontology-institutional:TrustedAdultRole ;
    sh:description "Links exploitation to facilitating role (gUFO participation)" ;
    sh:minCount 0 ;
    sh:name "facilitated by" ;
    sh:path cacontology-institutional:facilitatedBy .

cacontology-institutional:FinancialControlMechanism a gufo:EventType,
        owl:Class ;
    rdfs:label "Financial Control Mechanism"@en ;
    rdfs:comment "Use of financial control to maintain exploitation operation."@en ;
    rdfs:subClassOf cacontology-institutional:DonorManipulation .

cacontology-institutional:ForeignCommerceOffenseShape a sh:NodeShape ;
    rdfs:label "Foreign Commerce Offense Shape"@en ;
    rdfs:comment "Validation shape for foreign commerce offenses with gUFO integration."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 100 ;
            sh:message "Foreign commerce offense must specify charge count (1-100)."@en ;
            sh:minCount 1 ;
            sh:minInclusive 1 ;
            sh:path cacontology-institutional:chargeCount ] ;
    sh:targetClass cacontology-institutional:ForeignCommerceOffense .

cacontology-institutional:FosterCareInstitution a gufo:SubKind,
        owl:Class ;
    rdfs:label "Foster Care Institution"@en ;
    rdfs:comment "Institution providing foster care services for children."@en ;
    rdfs:subClassOf cacontology-institutional:ChildCareInstitution .

cacontology-institutional:FoundedByShape a sh:PropertyShape ;
    sh:class cacontology-institutional:InstitutionalFounder ;
    sh:description "Links institution to its founder (gUFO participation)" ;
    sh:maxCount 1 ;
    sh:minCount 1 ;
    sh:name "founded by" ;
    sh:path cacontology-institutional:foundedBy .

cacontology-institutional:HumanitarianOrganization a gufo:SubKind,
        owl:Class ;
    rdfs:label "Humanitarian Organization"@en ;
    rdfs:comment "International humanitarian organization working with vulnerable populations."@en ;
    rdfs:subClassOf cacontology-institutional:CharitableOrganization .

cacontology-institutional:HumanitarianTravelCoverShape a sh:NodeShape ;
    rdfs:label "Humanitarian Travel Cover Shape"@en ;
    rdfs:comment "Validation shape for humanitarian travel cover with gUFO integration."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "humanitarian_aid" "charitable_work" "missionary_work" "volunteer_service" "medical_mission" "educational_support" ) ;
            sh:maxCount 1 ;
            sh:message "Humanitarian cover must specify claimed purpose from allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-institutional:travelPurposeClaimed ] ;
    sh:targetClass cacontology-institutional:HumanitarianTravelCover .

cacontology-institutional:ImpoverishedChild a gufo:Phase,
        owl:Class ;
    rdfs:label "Impoverished Child"@en ;
    rdfs:comment "Child from impoverished background in need of institutional care and support."@en ;
    rdfs:subClassOf gufo:Object,
        uco-identity:Person .

cacontology-institutional:InstitutionalAuthorityExploitation a gufo:EventType,
        owl:Class ;
    rdfs:label "Institutional Authority Exploitation"@en ;
    rdfs:comment "Exploitation using institutional authority and control over vulnerable children."@en ;
    rdfs:subClassOf cacontology-institutional:PositionOfTrustAbuse .

cacontology-institutional:InstitutionalCompositionShape a sh:NodeShape ;
    sh:property [ sh:message "Institution must have at least one component part (gUFO part-whole)"@en ;
            sh:minCount 1 ;
            sh:path [ sh:inversePath cacontology-institutional:isPartOfInstitution ] ] ;
    sh:targetClass cacontology-institutional:CharitableOrganization .

cacontology-institutional:InstitutionalExploitationDataQualityShape a sh:NodeShape ;
    rdfs:label "Institutional Exploitation Data Quality Shape"@en ;
    rdfs:comment "Validates data quality for institutional exploitation with gUFO quality aspects."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 300 ;
            sh:message "Label should be between 10 and 300 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 10 ;
            sh:path rdfs:label ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 2000 ;
            sh:message "Comment should be between 20 and 2000 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 20 ;
            sh:path rdfs:comment ] ;
    sh:targetClass cacontology-institutional:InstitutionalExploitation .

cacontology-institutional:InstitutionalExploitationShape a sh:NodeShape ;
    rdfs:label "Institutional Exploitation Shape"@en ;
    rdfs:comment "Validation shape for institutional exploitation instances with gUFO integration."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Exploitation may have start date (gUFO temporal boundary)"@en ;
            sh:path cacontology-institutional:hasExploitationStartDate ],
        [ sh:datatype xsd:string ;
            sh:in ( "low" "moderate" "high" "severe" "extreme" "catastrophic" ) ;
            sh:maxCount 1 ;
            sh:message "Exploitation must specify severity level (gUFO quality aspect)"@en ;
            sh:minCount 1 ;
            sh:path cacontology-institutional:hasExploitationSeverityLevel ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 1000 ;
            sh:message "Exploitation must specify victim count (1-1000)."@en ;
            sh:minCount 1 ;
            sh:minInclusive 1 ;
            sh:path cacontology-institutional:victimCount ],
        [ sh:class cacontology-institutional:CharitableOrganization ;
            sh:maxCount 1 ;
            sh:message "Exploitation must occur within a charitable organization."@en ;
            sh:minCount 1 ;
            sh:path cacontology-institutional:occursWithin ] ;
    sh:targetClass cacontology-institutional:InstitutionalExploitation .

cacontology-institutional:InstitutionalFounderShape a sh:NodeShape ;
    rdfs:label "Institutional Founder Shape"@en ;
    rdfs:comment "Validation shape for institutional founder roles with gUFO integration."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Founder role must have start date (gUFO temporal boundary)"@en ;
            sh:minCount 1 ;
            sh:path cacontology-institutional:hasRoleStartDate ],
        [ sh:datatype xsd:string ;
            sh:in ( "founder" "executive_director" "board_chair" "senior_leadership" "middle_management" ) ;
            sh:maxCount 1 ;
            sh:message "Founder must specify authority level (gUFO quality aspect)"@en ;
            sh:minCount 1 ;
            sh:path cacontology-institutional:hasAuthorityLevel ],
        [ sh:datatype xsd:string ;
            sh:in ( "absolute" "high" "moderate" "low" "compromised" "none" ) ;
            sh:maxCount 1 ;
            sh:message "Founder must specify trust level (gUFO quality aspect)"@en ;
            sh:minCount 1 ;
            sh:path cacontology-institutional:hasTrustLevel ] ;
    sh:targetClass cacontology-institutional:InstitutionalFounder .

cacontology-institutional:InstitutionalRoleValidationShape a sh:NodeShape ;
    sh:message "Institutional roles are anti-rigid and cannot be subclasses of rigid Kinds"@en ;
    sh:not [ sh:property [ sh:class gufo:Kind ;
                    sh:path rdfs:subClassOf ] ] ;
    sh:property [ sh:hasValue gufo:Role ;
            sh:minCount 1 ;
            sh:path rdf:type ] ;
    sh:targetClass gufo:Role .

cacontology-institutional:InstitutionalTemporalBoundariesShape a sh:NodeShape ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Institution may have at most one founding date (gUFO temporal boundary)"@en ;
            sh:path cacontology-institutional:hasInstitutionFoundingDate ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Institution may have at most one operation end date (gUFO temporal boundary)"@en ;
            sh:path cacontology-institutional:hasOperationEndDate ] ;
    sh:sparql [ sh:message "Institution operation end date must be after founding date (gUFO temporal ordering)"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/institutional-exploitation#"^^xsd:anyURI ;
                            sh:prefix "cacontology-institutional" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-institutional:hasInstitutionFoundingDate ?foundingDate .
                $this cacontology-institutional:hasOperationEndDate ?endDate .
                FILTER (?endDate <= ?foundingDate)
            }
        """ ] ;
    sh:targetClass cacontology-institutional:CharitableOrganization .

cacontology-institutional:InvestigationCompositionShape a sh:NodeShape ;
    sh:property [ sh:message "Investigation must include at least one piece of evidence or testimony (gUFO part-whole)"@en ;
            sh:minCount 1 ;
            sh:path [ sh:inversePath cacontology-institutional:isPartOfInvestigation ] ] ;
    sh:targetClass cacontology-institutional:USProsecutionForeignCrimes .

cacontology-institutional:IsolationBasedControlShape a sh:NodeShape ;
    rdfs:label "Isolation Based Control Shape"@en ;
    rdfs:comment "Validation shape for isolation-based control with gUFO integration."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "complete" "high" "moderate" "partial" "minimal" ) ;
            sh:maxCount 1 ;
            sh:message "Isolation control must specify isolation degree (gUFO quality aspect)"@en ;
            sh:minCount 1 ;
            sh:path cacontology-institutional:hasIsolationDegree ],
        [ sh:datatype xsd:string ;
            sh:in ( "complete" "high" "moderate" "partial" ) ;
            sh:maxCount 1 ;
            sh:message "Isolation must specify degree from allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-institutional:isolationDegree ] ;
    sh:targetClass cacontology-institutional:IsolationBasedControl .

cacontology-institutional:LegalSituationTypeValidationShape a sh:NodeShape ;
    sh:message "Every legal SituationType must extend gufo:Situation"@en ;
    sh:property [ sh:hasValue gufo:SituationType ;
            sh:minCount 1 ;
            sh:path rdf:type ],
        [ sh:class gufo:Situation ;
            sh:minCount 1 ;
            sh:path rdfs:subClassOf ] ;
    sh:targetClass gufo:SituationType .

cacontology-institutional:LongTermControlBusinessRule a sh:NodeShape ;
    sh:sparql [ sh:message "Long-term institutional control must involve high authority roles and multiple victims"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/institutional-exploitation#"^^xsd:anyURI ;
                            sh:prefix "cacontology-institutional" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-institutional:operationDurationYears ?duration ;
                      cacontology-institutional:victimCount ?victims .
                FILTER (?duration >= 5 && ?victims < 5)
            }
        """ ] ;
    sh:targetClass cacontology-institutional:LongTermInstitutionalControl .

cacontology-institutional:LongTermInstitutionalControlShape a sh:NodeShape ;
    rdfs:label "Long Term Institutional Control Shape"@en ;
    rdfs:comment "Validation shape for long-term institutional control with gUFO integration."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 50 ;
            sh:message "Long-term control must specify duration (2-50 years)."@en ;
            sh:minCount 1 ;
            sh:minInclusive 2 ;
            sh:path cacontology-institutional:operationDurationYears ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Long-term control must have high systematicity degree (0.5-1.0) (gUFO quality aspect)"@en ;
            sh:minCount 1 ;
            sh:minInclusive 0.5 ;
            sh:path cacontology-institutional:hasSystematicityDegree ] ;
    sh:targetClass cacontology-institutional:LongTermInstitutionalControl .

cacontology-institutional:MultiVictimForeignOffense a gufo:SituationType,
        owl:Class ;
    rdfs:label "Multi Victim Foreign Offense"@en ;
    rdfs:comment "Foreign offense involving multiple separate child victims."@en ;
    rdfs:subClassOf cacontology-institutional:ForeignPlaceOffense .

cacontology-institutional:MultipleVictimTestimonyShape a sh:NodeShape ;
    rdfs:label "Multiple Victim Testimony Shape"@en ;
    rdfs:comment "Validation shape for multiple victim testimony with gUFO integration."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 100 ;
            sh:message "Multiple victim testimony must specify count (2-100)."@en ;
            sh:minCount 1 ;
            sh:minInclusive 2 ;
            sh:path cacontology-institutional:victimTestimoniesCount ] ;
    sh:targetClass cacontology-institutional:MultipleVictimTestimony .

cacontology-institutional:OccursWithinShape a sh:PropertyShape ;
    sh:class cacontology-institutional:CharitableOrganization ;
    sh:description "Links exploitation to institution where it occurs (gUFO situational context)" ;
    sh:maxCount 1 ;
    sh:minCount 1 ;
    sh:name "occurs within" ;
    sh:path cacontology-institutional:occursWithin .

cacontology-institutional:OrphanageDirector a gufo:Role,
        owl:Class ;
    rdfs:label "Orphanage Director"@en ;
    rdfs:comment "Individual with administrative control over orphanage operations."@en ;
    rdfs:subClassOf cacontology-institutional:InstitutionalFounder .

cacontology-institutional:OrphanageExploitation a gufo:EventType,
        owl:Class ;
    rdfs:label "Orphanage Exploitation"@en ;
    rdfs:comment "Sexual, physical, or emotional exploitation occurring within orphanage settings."@en ;
    rdfs:subClassOf cacontology-institutional:InstitutionalExploitation .

cacontology-institutional:OrphanageShape a sh:NodeShape ;
    rdfs:label "Orphanage Shape"@en ;
    rdfs:comment "Validation shape for orphanage instances with gUFO integration."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 500 ;
            sh:message "Orphanage must specify number of children served (1-500)."@en ;
            sh:minCount 1 ;
            sh:minInclusive 1 ;
            sh:path cacontology-institutional:childrenServed ],
        [ sh:datatype xsd:string ;
            sh:in ( "low" "moderate" "high" "extreme" "critical" ) ;
            sh:maxCount 1 ;
            sh:message "Orphanage must specify vulnerability level of children (gUFO quality aspect)"@en ;
            sh:minCount 1 ;
            sh:path cacontology-institutional:hasVulnerabilityLevel ] ;
    sh:targetClass cacontology-institutional:Orphanage .

cacontology-institutional:OrphanedChildShape a sh:NodeShape ;
    rdfs:label "Orphaned Child Shape"@en ;
    rdfs:comment "Validation shape for orphaned children with gUFO integration."@en ;
    sh:property [ sh:hasValue "orphaned" ;
            sh:message "Orphaned child must have 'orphaned' vulnerability type."@en ;
            sh:minCount 1 ;
            sh:path cacontology-institutional:vulnerabilityType ],
        [ sh:datatype xsd:string ;
            sh:in ( "high" "severe" "extreme" "critical" ) ;
            sh:maxCount 1 ;
            sh:message "Orphaned child must have high vulnerability level (gUFO quality aspect)"@en ;
            sh:minCount 1 ;
            sh:path cacontology-institutional:hasVulnerabilityLevel ] ;
    sh:targetClass cacontology-institutional:OrphanedChild .

cacontology-institutional:PositionOfTrustAbuseShape a sh:NodeShape ;
    rdfs:label "Position of Trust Abuse Shape"@en ;
    rdfs:comment "Validation shape for position of trust abuse with gUFO integration."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "high" "complete" "institutional" "parental" "absolute" ) ;
            sh:maxCount 1 ;
            sh:message "Position of trust abuse must specify trust level exploited."@en ;
            sh:minCount 1 ;
            sh:path cacontology-institutional:trustLevelExploited ],
        [ sh:class cacontology-institutional:TrustedAdultRole ;
            sh:maxCount 1 ;
            sh:message "Trust abuse must exploit a trusted adult role."@en ;
            sh:minCount 1 ;
            sh:path cacontology-institutional:exploitsRole ] ;
    sh:targetClass cacontology-institutional:PositionOfTrustAbuse .

cacontology-institutional:ReligiousInstitution a gufo:SubKind,
        owl:Class ;
    rdfs:label "Religious Institution"@en ;
    rdfs:comment "Religious organization providing child care or educational services."@en ;
    rdfs:subClassOf cacontology-institutional:CharitableOrganization .

cacontology-institutional:RepeatedCrossBorderTravelShape a sh:NodeShape ;
    rdfs:label "Repeated Cross Border Travel Shape"@en ;
    rdfs:comment "Validation shape for repeated travel patterns with gUFO integration."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "monthly" "quarterly" "semi_annually" "annually" "bi_annually" ) ;
            sh:maxCount 1 ;
            sh:message "Repeated travel must specify frequency from allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-institutional:travelFrequency ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 30 ;
            sh:message "Repeated travel pattern must span 2-30 years."@en ;
            sh:minCount 1 ;
            sh:minInclusive 2 ;
            sh:path cacontology-institutional:travelPatternYears ] ;
    sh:targetClass cacontology-institutional:RepeatedCrossBorderTravel .

cacontology-institutional:RoleTemporalBoundariesShape a sh:NodeShape ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Role may have at most one start date (gUFO temporal boundary)"@en ;
            sh:path cacontology-institutional:hasRoleStartDate ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Role may have at most one end date (gUFO temporal boundary)"@en ;
            sh:path cacontology-institutional:hasRoleEndDate ] ;
    sh:sparql [ sh:message "Role end date must be after start date when both specified (gUFO temporal ordering)"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/institutional-exploitation#"^^xsd:anyURI ;
                            sh:prefix "cacontology-institutional" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-institutional:hasRoleStartDate ?startDate .
                $this cacontology-institutional:hasRoleEndDate ?endDate .
                FILTER (?endDate <= ?startDate)
            }
        """ ] ;
    sh:targetClass cacontology-institutional:TrustedAdultRole .

cacontology-institutional:SystematicAbuseCompositionShape a sh:NodeShape ;
    sh:property [ sh:message "Systematic abuse must be composed of at least 3 individual exploitation instances (gUFO part-whole)"@en ;
            sh:minCount 3 ;
            sh:path [ sh:inversePath cacontology-institutional:isComponentOfExploitation ] ] ;
    sh:targetClass cacontology-institutional:SystematicInstitutionalAbuse .

cacontology-institutional:SystematicAbusePatternBusinessRule a sh:NodeShape ;
    sh:sparql [ sh:message "High systematicity requires institutional oversight failure and isolation control"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/institutional-exploitation#"^^xsd:anyURI ;
                            sh:prefix "cacontology-institutional" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-institutional:hasSystematicityDegree ?systematicity ;
                      cacontology-institutional:occursWithin ?institution .
                ?institution cacontology-institutional:hasOversightLevel ?oversight .
                FILTER (?systematicity > 0.8 && ?oversight NOT IN ("minimal", "none", "self_regulated"))
            }
        """ ] ;
    sh:targetClass cacontology-institutional:SystematicInstitutionalAbuse .

cacontology-institutional:SystematicInstitutionalAbuseShape a sh:NodeShape ;
    rdfs:label "Systematic Institutional Abuse Shape"@en ;
    rdfs:comment "Validation shape for systematic abuse patterns with gUFO integration."@en ;
    sh:property [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Systematic abuse must have high systematicity degree (0.7-1.0) (gUFO quality aspect)"@en ;
            sh:minCount 1 ;
            sh:minInclusive 0.7 ;
            sh:path cacontology-institutional:hasSystematicityDegree ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:message "Systematic abuse must involve at least 3 victims."@en ;
            sh:minCount 1 ;
            sh:minInclusive 3 ;
            sh:path cacontology-institutional:victimCount ] ;
    sh:targetClass cacontology-institutional:SystematicInstitutionalAbuse .

cacontology-institutional:TravelEventParticipationShape a sh:NodeShape ;
    sh:property [ sh:class uco-identity:Person ;
            sh:maxCount 1 ;
            sh:message "Travel event must have exactly one traveler participant (gUFO participation)"@en ;
            sh:minCount 1 ;
            sh:path cacontology-institutional:undertakesTravelFor ] ;
    sh:targetClass cacontology-institutional:CrossBorderPersonalTravel .

cacontology-institutional:TrustAbuseBusinessRule a sh:NodeShape ;
    sh:sparql [ sh:message "High trust level exploitation must involve high authority roles"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/institutional-exploitation#"^^xsd:anyURI ;
                            sh:prefix "cacontology-institutional" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-institutional:trustLevelExploited ?trustLevel ;
                      cacontology-institutional:exploitsRole ?role .
                ?role cacontology-institutional:hasAuthorityLevel ?authLevel .
                FILTER (?trustLevel IN ("absolute", "complete") && 
                        ?authLevel NOT IN ("founder", "director", "executive_director"))
            }
        """ ] ;
    sh:targetClass cacontology-institutional:PositionOfTrustAbuse .

cacontology-institutional:TrustedAdultRoleShape a sh:NodeShape ;
    rdfs:label "Trusted Adult Role Shape"@en ;
    rdfs:comment "Validation shape for trusted adult roles with gUFO integration."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "absolute" "high" "moderate" "low" "compromised" ) ;
            sh:maxCount 1 ;
            sh:message "Trusted adult must specify trust level (gUFO quality aspect)"@en ;
            sh:minCount 1 ;
            sh:path cacontology-institutional:hasTrustLevel ],
        [ sh:datatype xsd:string ;
            sh:in ( "founder" "director" "supervisor" "caregiver" "staff" "volunteer" ) ;
            sh:maxCount 1 ;
            sh:message "Trusted adult must specify authority level (gUFO quality aspect)"@en ;
            sh:minCount 1 ;
            sh:path cacontology-institutional:hasAuthorityLevel ] ;
    sh:targetClass cacontology-institutional:TrustedAdultRole .

cacontology-institutional:USProsecutionForeignCrimesShape a sh:NodeShape ;
    rdfs:label "US Prosecution Foreign Crimes Shape"@en ;
    rdfs:comment "Validation shape for US prosecution of foreign crimes with gUFO integration."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "federal" "state" "international" "joint_jurisdiction" ) ;
            sh:maxCount 1 ;
            sh:message "Prosecution must specify jurisdiction from allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-institutional:prosecutionJurisdiction ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 50 ;
            sh:message "Sentence length must be between 1 and 50 years when specified."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1 ;
            sh:path cacontology-institutional:sentenceLength ] ;
    sh:targetClass cacontology-institutional:USProsecutionForeignCrimes .

cacontology-institutional:VulnerableChildInCareShape a sh:NodeShape ;
    rdfs:label "Vulnerable Child in Care Shape"@en ;
    rdfs:comment "Validation shape for vulnerable children with gUFO integration."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "low" "moderate" "high" "severe" "extreme" "critical" ) ;
            sh:maxCount 1 ;
            sh:message "Vulnerable child must specify vulnerability level (gUFO quality aspect)"@en ;
            sh:minCount 1 ;
            sh:path cacontology-institutional:hasVulnerabilityLevel ],
        [ sh:datatype xsd:string ;
            sh:in ( "orphaned" "impoverished" "abandoned" "disabled" "refugee" "trafficked" "neglected" "abused" ) ;
            sh:message "Vulnerable child must specify at least one vulnerability type."@en ;
            sh:minCount 1 ;
            sh:path cacontology-institutional:vulnerabilityType ] ;
    sh:targetClass cacontology-institutional:VulnerableChildInCare .

cacontology-institutional:VulnerableChildPhaseValidationShape a sh:NodeShape ;
    sh:message "Vulnerable child phases are anti-rigid temporal stages and cannot be rigid Kinds"@en ;
    sh:not [ sh:property [ sh:class gufo:Kind ;
                    sh:path rdfs:subClassOf ] ] ;
    sh:property [ sh:hasValue gufo:Phase ;
            sh:minCount 1 ;
            sh:path rdf:type ] ;
    sh:targetClass gufo:Phase .

cacontology-institutional:YouthHome a gufo:SubKind,
        owl:Class ;
    rdfs:label "Youth Home"@en ;
    rdfs:comment "Residential home for youth in care or at-risk situations."@en ;
    rdfs:subClassOf cacontology-institutional:ChildCareInstitution .

cacontology-institutional:abuseEndYear a owl:DatatypeProperty ;
    rdfs:label "abuse end year"@en ;
    rdfs:comment "Year when abuse pattern ended."@en ;
    rdfs:domain cacontology-institutional:LongTermAbusePattern ;
    rdfs:range xsd:gYear .

cacontology-institutional:abuseStartYear a owl:DatatypeProperty ;
    rdfs:label "abuse start year"@en ;
    rdfs:comment "Year when abuse pattern began."@en ;
    rdfs:domain cacontology-institutional:LongTermAbusePattern ;
    rdfs:range xsd:gYear .

cacontology-institutional:authorityLevel a owl:DatatypeProperty ;
    rdfs:label "authority level"@en ;
    rdfs:comment "Level of authority within institution (founder, director, staff, volunteer)."@en ;
    rdfs:domain cacontology-institutional:InstitutionalFounder ;
    rdfs:range xsd:string .

cacontology-institutional:concealsFrom a owl:ObjectProperty ;
    rdfs:label "conceals from"@en ;
    rdfs:comment "Links deception to those being deceived."@en ;
    rdfs:domain cacontology-institutional:SupportNetworkDeception ;
    rdfs:range uco-identity:Person .

cacontology-institutional:concealsTravel a owl:ObjectProperty ;
    rdfs:label "conceals travel"@en ;
    rdfs:comment "Links cover story to travel it conceals."@en ;
    rdfs:domain cacontology-institutional:HumanitarianTravelCover ;
    rdfs:range cacontology-institutional:ForeignCommerceTravel .

cacontology-institutional:documentsPattern a owl:ObjectProperty ;
    rdfs:label "documents pattern"@en ;
    rdfs:comment "Links evidence to abuse pattern it documents."@en ;
    rdfs:domain cacontology-institutional:InstitutionalAbuseEvidence ;
    rdfs:range cacontology-institutional:LongTermAbusePattern .

cacontology-institutional:enablesExploitation a owl:ObjectProperty ;
    rdfs:label "enables exploitation"@en ;
    rdfs:comment "Links travel to exploitation it enables."@en ;
    rdfs:domain cacontology-institutional:CrossBorderPersonalTravel ;
    rdfs:range cacontology-institutional:InstitutionalExploitation .

cacontology-institutional:exercisesAuthorityOver a owl:ObjectProperty ;
    rdfs:label "exercises authority over"@en ;
    rdfs:comment "Links authority figure to children under their authority."@en ;
    rdfs:domain cacontology-institutional:InstitutionalFounder ;
    rdfs:range cacontology-institutional:VulnerableChildInCare .

cacontology-institutional:existentiallyDependsOn a owl:ObjectProperty ;
    rdfs:label "existentially depends on"@en ;
    rdfs:comment "Existential dependency relationship between institutional elements (gUFO dependency)."@en ;
    rdfs:domain gufo:Object ;
    rdfs:range gufo:Object .

cacontology-institutional:exploitationTypeCount a owl:DatatypeProperty ;
    rdfs:label "exploitation type count"@en ;
    rdfs:comment "Number of different exploitation types (sexual, physical, emotional)."@en ;
    rdfs:domain cacontology-institutional:MultiModalInstitutionalAbuse ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-institutional:foreignResidenceDuration a owl:DatatypeProperty ;
    rdfs:label "foreign residence duration"@en ;
    rdfs:comment "Duration of residence in foreign country in months."@en ;
    rdfs:domain cacontology-institutional:ForeignResidenceExploitation ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-institutional:genericallyDependsOn a owl:ObjectProperty ;
    rdfs:label "generically depends on"@en ;
    rdfs:comment "Generic dependency of roles on institutional context (gUFO generic dependency)."@en ;
    rdfs:domain gufo:Role ;
    rdfs:range gufo:Object .

cacontology-institutional:historicallyDependsOn a owl:ObjectProperty ;
    rdfs:label "historically depends on"@en ;
    rdfs:comment "Historical dependency between exploitation events (gUFO historical dependency)."@en ;
    rdfs:domain gufo:Event ;
    rdfs:range gufo:Event .

cacontology-institutional:holdsRole a owl:ObjectProperty ;
    rdfs:label "holds role"@en ;
    rdfs:comment "Links individual to institutional role held."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range cacontology-institutional:TrustedAdultRole .

cacontology-institutional:impactsVictim a owl:ObjectProperty ;
    rdfs:label "impacts victim"@en ;
    rdfs:comment "Links exploitation to victim impacted."@en ;
    rdfs:domain cacontology-institutional:InstitutionalExploitation ;
    rdfs:range cacontology-institutional:VulnerableChildInCare .

cacontology-institutional:investigatedBy a owl:ObjectProperty ;
    rdfs:label "investigated by"@en ;
    rdfs:comment "Links exploitation to investigating agencies."@en ;
    rdfs:domain cacontology-institutional:InstitutionalExploitation ;
    rdfs:range uco-identity:Organization .

cacontology-institutional:maintainedBy a owl:ObjectProperty ;
    rdfs:label "maintained by"@en ;
    rdfs:comment "Links institution to individual who maintained/directed it."@en ;
    rdfs:domain cacontology-institutional:CharitableOrganization ;
    rdfs:range uco-identity:Person .

cacontology-institutional:manipulates a owl:ObjectProperty ;
    rdfs:label "manipulates"@en ;
    rdfs:comment "Links manipulation to supporters being manipulated."@en ;
    rdfs:domain cacontology-institutional:DonorManipulation ;
    rdfs:range uco-identity:Person .

cacontology-institutional:occursInContext a owl:ObjectProperty ;
    rdfs:label "occurs in context"@en ;
    rdfs:comment "Situational context in which exploitation occurs (gUFO situational context)."@en ;
    rdfs:domain cacontology-institutional:InstitutionalExploitation ;
    rdfs:range gufo:Situation .

cacontology-institutional:operatesInCountry a owl:ObjectProperty ;
    rdfs:label "operates in country"@en ;
    rdfs:comment "Links institution to country where it operates."@en ;
    rdfs:domain cacontology-institutional:CharitableOrganization ;
    rdfs:range uco-location:Location .

cacontology-institutional:operatesInJurisdictionalContext a owl:ObjectProperty ;
    rdfs:label "operates in jurisdictional context"@en ;
    rdfs:comment "Jurisdictional context spanning multiple countries (gUFO situational context)."@en ;
    rdfs:domain cacontology-institutional:CrossBorderPersonalTravel ;
    rdfs:range gufo:Situation .

cacontology-institutional:participatesInInstitution a owl:ObjectProperty ;
    rdfs:label "participates in institution"@en ;
    rdfs:comment "Participation relationship between individual and institution (gUFO participation)."@en ;
    rdfs:domain gufo:Object ;
    rdfs:range cacontology-institutional:CharitableOrganization ;
    rdfs:subPropertyOf gufo:participatedIn .

cacontology-institutional:prosecutedInContext a owl:ObjectProperty ;
    rdfs:label "prosecuted in context"@en ;
    rdfs:comment "Legal context in which prosecution occurs (gUFO situational context)."@en ;
    rdfs:domain cacontology-institutional:USProsecutionForeignCrimes ;
    rdfs:range gufo:Situation .

cacontology-institutional:prosecutedUnder a owl:ObjectProperty ;
    rdfs:label "prosecuted under"@en ;
    rdfs:comment "Links exploitation to legal charges filed."@en ;
    rdfs:domain cacontology-institutional:InstitutionalExploitation ;
    rdfs:range cacontology-institutional:ForeignCommerceOffense .

cacontology-institutional:providesTestimony a owl:ObjectProperty ;
    rdfs:label "provides testimony"@en ;
    rdfs:comment "Links victim to testimony provided."@en ;
    rdfs:domain cacontology-institutional:VulnerableChildInCare ;
    rdfs:range cacontology-institutional:MultipleVictimTestimony .

cacontology-institutional:receivesSupport a owl:ObjectProperty ;
    rdfs:label "receives support"@en ;
    rdfs:comment "Links institution to support received."@en ;
    rdfs:domain cacontology-institutional:CharitableOrganization ;
    rdfs:range cacontology-institutional:DonorManipulation .

cacontology-institutional:resultsInSentence a owl:ObjectProperty ;
    rdfs:label "results in sentence"@en ;
    rdfs:comment "Links prosecution to sentence imposed."@en ;
    rdfs:domain cacontology-institutional:USProsecutionForeignCrimes ;
    rdfs:range uco-observable:ObservableObject .

cacontology-institutional:revealsPattern a owl:ObjectProperty ;
    rdfs:label "reveals pattern"@en ;
    rdfs:comment "Links testimony to abuse pattern it reveals."@en ;
    rdfs:domain cacontology-institutional:MultipleVictimTestimony ;
    rdfs:range cacontology-institutional:SystematicInstitutionalAbuse .

cacontology-institutional:servesPopulation a owl:ObjectProperty ;
    rdfs:label "serves population"@en ;
    rdfs:comment "Links institution to vulnerable population it serves."@en ;
    rdfs:domain cacontology-institutional:CharitableOrganization ;
    rdfs:range cacontology-institutional:VulnerableChildInCare .

cacontology-institutional:targetsPopulation a owl:ObjectProperty ;
    rdfs:label "targets population"@en ;
    rdfs:comment "Links targeting strategy to vulnerable population targeted."@en ;
    rdfs:domain cacontology-institutional:VulnerablePopulationTargeting ;
    rdfs:range cacontology-institutional:VulnerableChildInCare .

cacontology-international:ACCCEIntegrationShape a sh:NodeShape ;
    rdfs:label "ACCCE Integration Shape"@en ;
    rdfs:comment "Validation shape for ACCCE integration instances."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "ACCCE integration must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ] ;
    sh:targetClass cacontology-international:ACCCEIntegration .

cacontology-international:CoordinationComplexityValidationShape a sh:NodeShape ;
    rdfs:label "Coordination Complexity Validation Shape"@en ;
    rdfs:comment "Validates coordination complexity consistency."@en ;
    sh:sparql [ sh:message "Operations with many jurisdictions should have high coordination complexity."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-international:jurisdictionCount ?count ;
                      cacontology-international:coordinationComplexity ?complexity .
                FILTER (?count > 10 && ?complexity IN ("low", "medium"))
            }
        """ ] ;
    sh:targetClass cacontology-international:CrossBorderOperation .

cacontology-international:CountryPartnershipShape a sh:NodeShape ;
    rdfs:label "Country Partnership Shape"@en ;
    rdfs:comment "Validation shape for country partnership instances."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 50 ;
            sh:message "Country partnership must specify partner count between 2 and 50."@en ;
            sh:minCount 1 ;
            sh:minInclusive 2 ;
            sh:path cacontology-international:partnerCountryCount ] ;
    sh:targetClass cacontology-international:CountryPartnership .

cacontology-international:CrossBorderEffectiveness a owl:Class ;
    rdfs:label "Cross-Border Effectiveness"@en ;
    rdfs:comment "Effectiveness measurement for cross-border operations."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-international:CrossBorderEventTypeValidationShape a sh:NodeShape ;
    sh:message "Every cross-border operation EventType must extend gufo:Event"@en ;
    sh:property [ sh:hasValue gufo:EventType ;
            sh:minCount 1 ;
            sh:path rdf:type ],
        [ sh:class gufo:Event ;
            sh:minCount 1 ;
            sh:path rdfs:subClassOf ] ;
    sh:targetClass gufo:EventType .

cacontology-international:CrossBorderInvestigationCompositionShape a sh:NodeShape ;
    sh:property [ sh:message "Cross-border investigation must include at least two national investigation components (gUFO part-whole)"@en ;
            sh:minCount 2 ;
            sh:path [ sh:inversePath gufo:isProperPartOf ] ] ;
    sh:targetClass cacontology-international:CrossBorderInvestigation .

cacontology-international:CrossBorderInvestigationShape a sh:NodeShape ;
    rdfs:label "Cross-Border Investigation Shape"@en ;
    rdfs:comment "Validation shape for cross-border investigation instances."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 50 ;
            sh:message "Jurisdiction count must be between 2 and 50 when specified."@en ;
            sh:minCount 0 ;
            sh:minInclusive 2 ;
            sh:path cacontology-international:jurisdictionCount ] ;
    sh:targetClass cacontology-international:CrossBorderInvestigation .

cacontology-international:CrossBorderOperationCrossReferenceShape a sh:NodeShape ;
    rdfs:label "Cross-Border Operation Cross Reference Shape"@en ;
    rdfs:comment "Validates that cross-border operations operate in multiple countries."@en ;
    sh:sparql [ sh:message "Cross-border operation should operate in multiple countries."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-international:CrossBorderOperation .
                FILTER NOT EXISTS {
                    $this cacontology-international:operatesInCountry ?country1 .
                    $this cacontology-international:operatesInCountry ?country2 .
                    FILTER (?country1 != ?country2)
                }
            }
        """ ] ;
    sh:targetClass cacontology-international:CrossBorderOperation .

cacontology-international:CrossBorderOperationParticipationShape a sh:NodeShape ;
    sh:property [ sh:message "Every cross-border operation must have at least two participating entities (gUFO participation)"@en ;
            sh:minCount 2 ;
            sh:path [ sh:alternativePath ( gufo:participatedIn cacontology-international:coordinatedBy cacontology-international:operatesInCountry ) ] ] ;
    sh:targetClass cacontology-international:CrossBorderOperation .

cacontology-international:CrossBorderOperationShape a sh:NodeShape ;
    rdfs:label "Cross-Border Operation Shape"@en ;
    rdfs:comment "Validation shape for cross-border operation instances with gUFO integration."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Cross-border operation must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Cross-border operation may specify end time."@en ;
            sh:minCount 0 ;
            sh:path uco-core:endTime ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Cross-border operation must have start time (gUFO temporal boundary)"@en ;
            sh:minCount 1 ;
            sh:path gufo:hasBeginPointInXSDDateTimeStamp ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Cross-border operation may have end time (gUFO temporal boundary)"@en ;
            sh:path gufo:hasEndPointInXSDDateTimeStamp ],
        [ sh:datatype xsd:string ;
            sh:in ( "basic" "enhanced" "advanced" "expert" ) ;
            sh:maxCount 1 ;
            sh:message "Cross-border capability must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-international:crossBorderCapability ],
        [ sh:datatype xsd:string ;
            sh:in ( "low" "medium" "high" "complex" ) ;
            sh:maxCount 1 ;
            sh:message "Coordination complexity must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-international:coordinationComplexity ],
        [ sh:datatype xsd:string ;
            sh:in ( "routine" "urgent" "critical" "emergency" "immediate" ) ;
            sh:maxCount 1 ;
            sh:message "Operational urgency level must be from allowed list (gUFO quality aspect)"@en ;
            sh:path cacontology-international:hasOperationalUrgency ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Success likelihood must be between 0.0 and 1.0 (gUFO quality aspect)"@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-international:hasSuccessLikelihood ] ;
    sh:targetClass cacontology-international:CrossBorderOperation .

cacontology-international:CrossBorderOperationTemporalShape a sh:NodeShape ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Cross-border operation may have at most one start time (gUFO temporal boundary)"@en ;
            sh:path gufo:hasBeginPointInXSDDateTimeStamp ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Cross-border operation may have at most one end time (gUFO temporal boundary)"@en ;
            sh:path gufo:hasEndPointInXSDDateTimeStamp ] ;
    sh:sparql [ sh:message "Operation end time must be after start time when both specified (gUFO temporal ordering)"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "http://purl.org/nemo/gufo#"^^xsd:anyURI ;
                            sh:prefix "gufo" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this gufo:hasBeginPointInXSDDateTimeStamp ?startTime .
                $this gufo:hasEndPointInXSDDateTimeStamp ?endTime .
                FILTER (?endTime <= ?startTime)
            }
        """ ] ;
    sh:targetClass cacontology-international:CrossBorderOperation .

cacontology-international:CrossReferralProtocolShape a sh:NodeShape ;
    rdfs:label "Cross-Referral Protocol Shape"@en ;
    rdfs:comment "Validation shape for cross-referral protocol instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 100 ;
            sh:message "Cross-referral protocol must have a name (5-100 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path uco-core:name ] ;
    sh:targetClass cacontology-international:CrossReferralProtocol .

cacontology-international:DataExchangeProtocolShape a sh:NodeShape ;
    rdfs:label "Data Exchange Protocol Shape"@en ;
    rdfs:comment "Validation shape for data exchange protocol instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 100 ;
            sh:message "Data exchange protocol must have a name (5-100 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path uco-core:name ] ;
    sh:targetClass cacontology-international:DataExchangeProtocol .

cacontology-international:DataQualityShape a sh:NodeShape ;
    rdfs:label "Data Quality Shape"@en ;
    rdfs:comment "Validates data quality for international coordination entities with gUFO quality aspects."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Creation time should be specified when available."@en ;
            sh:minCount 0 ;
            sh:path uco-core:createdTime ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Modification time should be specified when available."@en ;
            sh:minCount 0 ;
            sh:path uco-core:modifiedTime ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Entity may have temporal beginning (gUFO temporal boundary)"@en ;
            sh:path gufo:hasBeginPointInXSDDateTimeStamp ],
        [ sh:datatype xsd:string ;
            sh:in ( "poor" "fair" "good" "excellent" "validated" ) ;
            sh:maxCount 1 ;
            sh:message "Data quality level must be from allowed list (gUFO quality aspect)"@en ;
            sh:path cacontology-international:hasDataQuality ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Reliability score must be between 0.0 and 1.0 (gUFO quality aspect)"@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-international:hasReliabilityScore ] ;
    sh:targetClass cacontology-international:CrossBorderOperation,
        cacontology-international:GlobalHotlineNetwork,
        cacontology-international:InformationSharingAgreement,
        cacontology-international:InternationalPartnership,
        cacontology-international:MutualLegalAssistance .

cacontology-international:DistanceChildAbuseShape a sh:NodeShape ;
    rdfs:label "Distance Child Abuse Shape"@en ;
    rdfs:comment "Validation shape for distance child abuse instances."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Distance child abuse operation must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ] ;
    sh:targetClass cacontology-international:DistanceChildAbuse .

cacontology-international:EuropeanCooperationFramework a owl:Class ;
    rdfs:label "European Cooperation Framework"@en ;
    rdfs:comment "Framework for cooperation among European Union member states in child protection operations."@en ;
    rdfs:subClassOf cacontology-international:InternationalPartnership .

cacontology-international:EuropolOperationShape a sh:NodeShape ;
    rdfs:label "Europol Operation Shape"@en ;
    rdfs:comment "Validation shape for Europol operation instances."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 50 ;
            sh:message "Europol operation must involve 3-50 jurisdictions."@en ;
            sh:minCount 1 ;
            sh:minInclusive 3 ;
            sh:path cacontology-international:jurisdictionCount ],
        [ sh:datatype xsd:string ;
            sh:in ( "high" "complex" ) ;
            sh:maxCount 1 ;
            sh:message "Europol operations must have high or complex coordination complexity."@en ;
            sh:minCount 0 ;
            sh:path cacontology-international:coordinationComplexity ] ;
    sh:targetClass cacontology-international:EuropolOperation .

cacontology-international:ExtraditionAgreementShape a sh:NodeShape ;
    rdfs:label "Extradition Agreement Shape"@en ;
    rdfs:comment "Validation shape for extradition agreement instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Extradition agreement must have a name (5-200 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path uco-core:name ] ;
    sh:targetClass cacontology-international:ExtraditionAgreement .

cacontology-international:GlobalCaseTrackingShape a sh:NodeShape ;
    rdfs:label "Global Case Tracking Shape"@en ;
    rdfs:comment "Validation shape for global case tracking instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 100 ;
            sh:message "Case tracking name should be 5-100 characters when specified."@en ;
            sh:minCount 0 ;
            sh:minLength 5 ;
            sh:path uco-core:name ] ;
    sh:targetClass cacontology-international:GlobalCaseTracking .

cacontology-international:GlobalHotlineNetworkShape a sh:NodeShape ;
    rdfs:label "Global Hotline Network Shape"@en ;
    rdfs:comment "Validation shape for global hotline network instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Global hotline network must have a name (5-200 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path uco-core:name ] ;
    sh:targetClass cacontology-international:GlobalHotlineNetwork .

cacontology-international:GlobalMissingChildrenCenterShape a sh:NodeShape ;
    rdfs:label "Global Missing Children Center Shape"@en ;
    rdfs:comment "Validation shape for global missing children center instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Global missing children center must have a name (5-200 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path uco-core:name ] ;
    sh:targetClass cacontology-international:GlobalMissingChildrenCenter .

cacontology-international:GlobalNetworkCompositionShape a sh:NodeShape ;
    sh:property [ sh:message "Global network must be composed of at least 3 national components (gUFO part-whole)"@en ;
            sh:minCount 3 ;
            sh:path [ sh:inversePath gufo:isProperPartOf ] ] ;
    sh:targetClass cacontology-international:GlobalHotlineNetwork .

cacontology-international:GlobalPlatformTakedownShape a sh:NodeShape ;
    rdfs:label "Global Platform Takedown Shape"@en ;
    rdfs:comment "Validation shape for global platform takedown instances."@en ;
    sh:property [ sh:hasValue "complex" ;
            sh:message "Global platform takedowns must have complex coordination complexity."@en ;
            sh:path cacontology-international:coordinationComplexity ] ;
    sh:targetClass cacontology-international:GlobalPlatformTakedown .

cacontology-international:InformationSharingAgreementShape a sh:NodeShape ;
    rdfs:label "Information Sharing Agreement Shape"@en ;
    rdfs:comment "Validation shape for information sharing agreement instances with gUFO integration."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "temporary" "provisional" "stable" "long_term" "permanent" ) ;
            sh:maxCount 1 ;
            sh:message "Agreement stability level must be from allowed list (gUFO quality aspect)"@en ;
            sh:path cacontology-international:hasAgreementStability ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Compliance rate must be between 0.0 and 1.0 (gUFO quality aspect)"@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-international:hasCompliance ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Agreement may have effective date (gUFO temporal boundary)"@en ;
            sh:path gufo:hasBeginPointInXSDDateTimeStamp ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Agreement may have expiration date (gUFO temporal boundary)"@en ;
            sh:path gufo:hasEndPointInXSDDateTimeStamp ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Information sharing agreement must have a name (5-200 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path uco-core:name ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Multilateral agreement must be a boolean value."@en ;
            sh:minCount 0 ;
            sh:path cacontology-international:multilateralAgreement ],
        [ sh:datatype xsd:string ;
            sh:in ( "basic" "enhanced" "full" "restricted" ) ;
            sh:maxCount 1 ;
            sh:message "Information sharing level must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-international:informationSharingLevel ] ;
    sh:targetClass cacontology-international:InformationSharingAgreement .

cacontology-international:InformationSharingCrossReferenceShape a sh:NodeShape ;
    rdfs:label "Information Sharing Cross Reference Shape"@en ;
    rdfs:comment "Validates that information sharing agreements have data sharing partners."@en ;
    sh:sparql [ sh:message "Information sharing agreement should have data sharing partners."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-international:InformationSharingAgreement .
                FILTER NOT EXISTS {
                    $this cacontology-international:sharesDataWith ?partner .
                    ?partner a uco-identity:Organization .
                }
            }
        """ ] ;
    sh:targetClass cacontology-international:InformationSharingAgreement .

cacontology-international:InformationSharingLevelBusinessRule a sh:NodeShape ;
    sh:sparql [ sh:message "Multilateral agreements with many partners require enhanced information sharing"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/international#"^^xsd:anyURI ;
                            sh:prefix "cacontology-international" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-international:multilateralAgreement true ;
                      cacontology-international:informationSharingLevel "basic" .
                {
                    SELECT $this (COUNT(?partner) as ?partnerCount)
                    WHERE {
                        $this cacontology-international:sharesDataWith ?partner .
                    }
                    GROUP BY $this
                    HAVING (?partnerCount > 5)
                }
            }
        """ ] ;
    sh:targetClass cacontology-international:InformationSharingAgreement .

cacontology-international:InformationSharingLevelValidationShape a sh:NodeShape ;
    rdfs:label "Information Sharing Level Validation Shape"@en ;
    rdfs:comment "Validates information sharing level consistency."@en ;
    sh:sparql [ sh:message "Multilateral agreements should have enhanced or full information sharing."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-international:multilateralAgreement true ;
                      cacontology-international:informationSharingLevel "basic" .
            }
        """ ] ;
    sh:targetClass cacontology-international:InformationSharingAgreement .

cacontology-international:InformationSharingParticipationShape a sh:NodeShape ;
    sh:property [ sh:class uco-identity:Organization ;
            sh:message "Information sharing must involve at least two organizations (gUFO participation)"@en ;
            sh:minCount 2 ;
            sh:path cacontology-international:sharesDataWith ] ;
    sh:targetClass cacontology-international:InformationSharingAgreement .

cacontology-international:InstructedAbuseOperationShape a sh:NodeShape ;
    rdfs:label "Instructed Abuse Operation Shape"@en ;
    rdfs:comment "Validation shape for instructed abuse operation instances."@en ;
    sh:property [ sh:hasValue "high" ;
            sh:message "Instructed abuse operations must have high coordination complexity."@en ;
            sh:path cacontology-international:coordinationComplexity ] ;
    sh:targetClass cacontology-international:InstructedAbuseOperation .

cacontology-international:InternationalAlertShape a sh:NodeShape ;
    rdfs:label "International Alert Shape"@en ;
    rdfs:comment "Validation shape for international alert instances."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "International alert must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ] ;
    sh:targetClass cacontology-international:InternationalAlert .

cacontology-international:InternationalAlertTemporalShape a sh:NodeShape ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "International alert must have exactly one start time (gUFO temporal boundary)"@en ;
            sh:minCount 1 ;
            sh:path gufo:hasBeginPointInXSDDateTimeStamp ] ;
    sh:targetClass cacontology-international:InternationalAlert .

cacontology-international:InternationalAnalyst a owl:Class ;
    rdfs:label "International Analyst"@en ;
    rdfs:comment "Analyst specializing in cross-border case analysis."@en ;
    rdfs:subClassOf uco-role:Role .

cacontology-international:InternationalCoordinator a owl:Class ;
    rdfs:label "International Coordinator"@en ;
    rdfs:comment "Role responsible for international coordination activities."@en ;
    rdfs:subClassOf uco-role:Role .

cacontology-international:InternationalDatabaseShape a sh:NodeShape ;
    rdfs:label "International Database Shape"@en ;
    rdfs:comment "Validation shape for international database instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 100 ;
            sh:message "International database must have a name (5-100 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path uco-core:name ] ;
    sh:targetClass cacontology-international:InternationalDatabase .

cacontology-international:InternationalHotlineCoordinationShape a sh:NodeShape ;
    rdfs:label "International Hotline Coordination Shape"@en ;
    rdfs:comment "Validation shape for international hotline coordination instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Hotline coordination name should be 5-200 characters when specified."@en ;
            sh:minCount 0 ;
            sh:minLength 5 ;
            sh:path uco-core:name ] ;
    sh:targetClass cacontology-international:InternationalHotlineCoordination .

cacontology-international:InternationalImpact a owl:Class ;
    rdfs:label "International Impact"@en ;
    rdfs:comment "Assessment of international program effectiveness."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-international:InternationalIntelligenceSharingShape a sh:NodeShape ;
    rdfs:label "International Intelligence Sharing Shape"@en ;
    rdfs:comment "Validation shape for international intelligence sharing instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "enhanced" "full" ) ;
            sh:maxCount 1 ;
            sh:message "International intelligence sharing must have enhanced or full sharing level."@en ;
            sh:minCount 1 ;
            sh:path cacontology-international:informationSharingLevel ] ;
    sh:targetClass cacontology-international:InternationalIntelligenceSharing .

cacontology-international:InternationalPartnershipKindValidationShape a sh:NodeShape ;
    sh:message "Every international partnership Kind must extend gufo:Object and be properly classified"@en ;
    sh:property [ sh:hasValue gufo:Kind ;
            sh:minCount 1 ;
            sh:path rdf:type ],
        [ sh:class gufo:Object ;
            sh:minCount 1 ;
            sh:path rdfs:subClassOf ] ;
    sh:targetClass gufo:Kind .

cacontology-international:InternationalPartnershipParticipationShape a sh:NodeShape ;
    sh:property [ sh:message "Partnership must have at least two participating organizations (gUFO participation)"@en ;
            sh:minCount 2 ;
            sh:path [ sh:alternativePath ( cacontology-international:partnerOrganization cacontology-international:coordinatesWith ) ] ] ;
    sh:targetClass cacontology-international:InternationalPartnership .

cacontology-international:InternationalPartnershipShape a sh:NodeShape ;
    rdfs:label "International Partnership Shape"@en ;
    rdfs:comment "Validation shape for international partnership instances with gUFO integration."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Partnership name should be 5-200 characters when specified."@en ;
            sh:minCount 0 ;
            sh:minLength 5 ;
            sh:path uco-core:name ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 200 ;
            sh:message "Partner country count must be between 2 and 200 when specified."@en ;
            sh:minCount 0 ;
            sh:minInclusive 2 ;
            sh:path cacontology-international:partnerCountryCount ],
        [ sh:datatype xsd:string ;
            sh:in ( "formal_request" "intelligence_sharing" "joint_investigation" "bilateral_agreement" "multilateral_treaty" ) ;
            sh:maxCount 1 ;
            sh:message "Coordination method must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-international:coordinationMethod ],
        [ sh:datatype xsd:string ;
            sh:in ( "low" "moderate" "high" "excellent" "outstanding" ) ;
            sh:maxCount 1 ;
            sh:message "Partnership effectiveness level must be from allowed list (gUFO quality aspect)"@en ;
            sh:path cacontology-international:hasCoordinationEffectiveness ],
        [ sh:datatype xsd:string ;
            sh:in ( "developing" "established" "strong" "exceptional" "complete" ) ;
            sh:maxCount 1 ;
            sh:message "Partnership trust level must be from allowed list (gUFO quality aspect)"@en ;
            sh:path cacontology-international:hasTrustLevel ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Partnership may have establishment date (gUFO temporal boundary)"@en ;
            sh:path gufo:hasBeginPointInXSDDateTimeStamp ] ;
    sh:targetClass cacontology-international:InternationalPartnership .

cacontology-international:InternationalPartnershipTemporalShape a sh:NodeShape ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Partnership may have establishment date (gUFO temporal boundary)"@en ;
            sh:path gufo:hasBeginPointInXSDDateTimeStamp ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Partnership may have termination date (gUFO temporal boundary)"@en ;
            sh:path gufo:hasEndPointInXSDDateTimeStamp ] ;
    sh:targetClass cacontology-international:InternationalPartnership .

cacontology-international:InternationalReferralCrossReferenceShape a sh:NodeShape ;
    rdfs:label "International Referral Cross Reference Shape"@en ;
    rdfs:comment "Validates that international referrals have alerting and receiving partners."@en ;
    sh:sparql [ sh:message "International referral should have alerting partner and referral target."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-international:InternationalReferral .
                FILTER NOT EXISTS {
                    $this cacontology-international:alertingPartner ?alerter ;
                          cacontology-international:referredTo ?target .
                    FILTER (?alerter != ?target)
                }
            }
        """ ] ;
    sh:targetClass cacontology-international:InternationalReferral .

cacontology-international:InternationalReferralShape a sh:NodeShape ;
    rdfs:label "International Referral Shape"@en ;
    rdfs:comment "Validation shape for international referral instances."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "International referral must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 8760.0 ;
            sh:message "International response time must be between 1 and 8760 hours (1 year)."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1.0 ;
            sh:path cacontology-international:responseTimeInternational ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Undercover coordination must be a boolean value."@en ;
            sh:minCount 0 ;
            sh:path cacontology-international:undercoverCoordination ] ;
    sh:targetClass cacontology-international:InternationalReferral .

cacontology-international:InternationalRoleValidationShape a sh:NodeShape ;
    sh:message "International coordination roles are anti-rigid and cannot be subclasses of rigid Kinds"@en ;
    sh:not [ sh:property [ sh:class gufo:Kind ;
                    sh:path rdfs:subClassOf ] ] ;
    sh:property [ sh:hasValue gufo:Role ;
            sh:minCount 1 ;
            sh:path rdf:type ] ;
    sh:targetClass gufo:Role .

cacontology-international:InternationalSituationTypeValidationShape a sh:NodeShape ;
    sh:message "Every international SituationType must extend gufo:Situation"@en ;
    sh:property [ sh:hasValue gufo:SituationType ;
            sh:minCount 1 ;
            sh:path rdf:type ],
        [ sh:class gufo:Situation ;
            sh:minCount 1 ;
            sh:path rdfs:subClassOf ] ;
    sh:targetClass gufo:SituationType .

cacontology-international:InternationalTaskForceCompositionShape a sh:NodeShape ;
    sh:property [ sh:message "Task force must have component organizations or units (gUFO part-whole)"@en ;
            sh:minCount 1 ;
            sh:path [ sh:inversePath gufo:isProperPartOf ] ] ;
    sh:targetClass cacontology-international:InternationalTaskForce .

cacontology-international:InternationalTaskForceShape a sh:NodeShape ;
    rdfs:label "International Task Force Shape"@en ;
    rdfs:comment "Validation shape for international task force instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "International task force must have a name (5-200 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path uco-core:name ] ;
    sh:targetClass cacontology-international:InternationalTaskForce .

cacontology-international:InternationalWarrantShape a sh:NodeShape ;
    rdfs:label "International Warrant Shape"@en ;
    rdfs:comment "Validation shape for international warrant instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 100 ;
            sh:message "International warrant must have a name (5-100 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path uco-core:name ] ;
    sh:targetClass cacontology-international:InternationalWarrant .

cacontology-international:JurisdictionalCoordinationShape a sh:NodeShape ;
    rdfs:label "Jurisdictional Coordination Shape"@en ;
    rdfs:comment "Validation shape for jurisdictional coordination instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Jurisdictional coordination name should be 5-200 characters when specified."@en ;
            sh:minCount 0 ;
            sh:minLength 5 ;
            sh:path uco-core:name ] ;
    sh:targetClass cacontology-international:JurisdictionalCoordination .

cacontology-international:LiaisonOfficer a owl:Class ;
    rdfs:label "Liaison Officer"@en ;
    rdfs:comment "Officer serving as liaison between international partners."@en ;
    rdfs:subClassOf uco-role:Role .

cacontology-international:LiveStreamingInvestigationCapabilityBusinessRule a sh:NodeShape ;
    sh:sparql [ sh:message "Live streaming investigations require expert capabilities and complex coordination"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/international#"^^xsd:anyURI ;
                            sh:prefix "cacontology-international" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-international:crossBorderCapability ?capability ;
                      cacontology-international:coordinationComplexity ?complexity .
                FILTER (?capability != "expert" || ?complexity != "complex")
            }
        """ ] ;
    sh:targetClass cacontology-international:LiveStreamingInvestigation .

cacontology-international:LiveStreamingInvestigationShape a sh:NodeShape ;
    rdfs:label "Live Streaming Investigation Shape"@en ;
    rdfs:comment "Validation shape for live streaming investigation instances with gUFO integration."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 10 ;
            sh:message "Live streaming investigation must involve 2-10 jurisdictions."@en ;
            sh:minCount 1 ;
            sh:minInclusive 2 ;
            sh:path cacontology-international:jurisdictionCount ],
        [ sh:hasValue "expert" ;
            sh:message "Live streaming investigations require expert cross-border capability (gUFO quality constraint)"@en ;
            sh:path cacontology-international:crossBorderCapability ],
        [ sh:hasValue "complex" ;
            sh:message "Live streaming investigations require complex coordination (gUFO quality constraint)"@en ;
            sh:path cacontology-international:coordinationComplexity ],
        [ sh:datatype xsd:string ;
            sh:in ( "urgent" "critical" "emergency" "immediate" ) ;
            sh:maxCount 1 ;
            sh:message "Live streaming investigations must have urgent operational priority (gUFO quality aspect)"@en ;
            sh:minCount 1 ;
            sh:path cacontology-international:hasOperationalUrgency ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Investigation must have start time (gUFO temporal boundary)"@en ;
            sh:minCount 1 ;
            sh:path gufo:hasBeginPointInXSDDateTimeStamp ] ;
    sh:targetClass cacontology-international:LiveStreamingInvestigation .

cacontology-international:MultiCountryTakedownShape a sh:NodeShape ;
    rdfs:label "Multi-Country Takedown Shape"@en ;
    rdfs:comment "Validation shape for multi-country takedown instances."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 50 ;
            sh:message "Multi-country takedown must involve 2-50 jurisdictions."@en ;
            sh:minCount 1 ;
            sh:minInclusive 2 ;
            sh:path cacontology-international:jurisdictionCount ] ;
    sh:targetClass cacontology-international:MultiCountryTakedown .

cacontology-international:MultiJurisdictionCoordinationBusinessRule a sh:NodeShape ;
    sh:sparql [ sh:message "High complexity operations must involve multiple jurisdictions and advanced capabilities"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/international#"^^xsd:anyURI ;
                            sh:prefix "cacontology-international" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-international:coordinationComplexity ?complexity ;
                      cacontology-international:crossBorderCapability ?capability .
                FILTER (?complexity IN ("high", "complex") && 
                        ?capability NOT IN ("advanced", "expert"))
            }
        """ ] ;
    sh:targetClass cacontology-international:CrossBorderOperation .

cacontology-international:MultilingualSupportShape a sh:NodeShape ;
    rdfs:label "Multilingual Support Shape"@en ;
    rdfs:comment "Validation shape for multilingual support instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 50 ;
            sh:maxLength 50 ;
            sh:message "Language support must specify 1-50 languages (2-50 characters each)."@en ;
            sh:minCount 1 ;
            sh:minLength 2 ;
            sh:path cacontology-international:languageSupport ] ;
    sh:targetClass cacontology-international:MultilingualSupport .

cacontology-international:MutualLegalAssistanceShape a sh:NodeShape ;
    rdfs:label "Mutual Legal Assistance Shape"@en ;
    rdfs:comment "Validation shape for mutual legal assistance instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Mutual legal assistance must have a name (5-200 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path uco-core:name ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Treaty basis should be 5-200 characters when specified."@en ;
            sh:minCount 0 ;
            sh:minLength 5 ;
            sh:path cacontology-international:treatyBasis ] ;
    sh:targetClass cacontology-international:MutualLegalAssistance .

cacontology-international:NCMECReportingShape a sh:NodeShape ;
    rdfs:label "NCMEC Reporting Shape"@en ;
    rdfs:comment "Validation shape for NCMEC reporting instances."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "NCMEC reporting must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ] ;
    sh:targetClass cacontology-international:NCMECReporting .

cacontology-international:OverseasVictimCoordinationShape a sh:NodeShape ;
    rdfs:label "Overseas Victim Coordination Shape"@en ;
    rdfs:comment "Validation shape for overseas victim coordination instances."@en ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 72.0 ;
            sh:message "Overseas victim coordination response time should be within 72 hours."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1.0 ;
            sh:path cacontology-international:responseTimeInternational ] ;
    sh:targetClass cacontology-international:OverseasVictimCoordination .

cacontology-international:PartnershipCoordinationCrossReferenceShape a sh:NodeShape ;
    rdfs:label "Partnership Coordination Cross Reference Shape"@en ;
    rdfs:comment "Validates that international partnerships have coordinating organizations."@en ;
    sh:sparql [ sh:message "International partnership should have coordinating organizations."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-international:InternationalPartnership .
                FILTER NOT EXISTS {
                    $this cacontology-international:coordinatesWith ?org .
                    ?org a uco-identity:Organization .
                }
            }
        """ ] ;
    sh:targetClass cacontology-international:InternationalPartnership .

cacontology-international:PartnershipEffectivenessBusinessRule a sh:NodeShape ;
    sh:sparql [ sh:message "High effectiveness partnerships require established or strong trust levels"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/international#"^^xsd:anyURI ;
                            sh:prefix "cacontology-international" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-international:hasCoordinationEffectiveness ?effectiveness ;
                      cacontology-international:hasTrustLevel ?trust .
                FILTER (?effectiveness IN ("high", "excellent", "outstanding") && 
                        ?trust IN ("developing"))
            }
        """ ] ;
    sh:targetClass cacontology-international:InternationalPartnership .

cacontology-international:PartnershipSizeValidationShape a sh:NodeShape ;
    rdfs:label "Partnership Size Validation Shape"@en ;
    rdfs:comment "Validates partnership size consistency."@en ;
    sh:sparql [ sh:message "Large partnerships should have appropriate coordination methods."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-international:partnerCountryCount ?count ;
                      cacontology-international:coordinationMethod "formal_request" .
                FILTER (?count > 20)
            }
        """ ] ;
    sh:targetClass cacontology-international:InternationalPartnership .

cacontology-international:RegionalCoordinationShape a sh:NodeShape ;
    rdfs:label "Regional Coordination Shape"@en ;
    rdfs:comment "Validation shape for regional coordination instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "europe" "asia_pacific" "americas" "africa" "middle_east" "global" ) ;
            sh:maxCount 1 ;
            sh:message "Global coverage must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-international:globalCoverage ] ;
    sh:targetClass cacontology-international:RegionalCoordination .

cacontology-international:ResponseTimeValidationShape a sh:NodeShape ;
    rdfs:label "Response Time Validation Shape"@en ;
    rdfs:comment "Validates reasonable response times for international referrals."@en ;
    sh:sparql [ sh:message "Urgent international referrals should have rapid response times."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-international:OverseasVictimCoordination ;
                      cacontology-international:responseTimeInternational ?responseTime .
                FILTER (?responseTime > 72.0)
            }
        """ ] ;
    sh:targetClass cacontology-international:InternationalReferral .

cacontology-international:SecureChannelShape a sh:NodeShape ;
    rdfs:label "Secure Communication Channel Shape"@en ;
    rdfs:comment "Validation shape for secure communication channel instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 100 ;
            sh:message "Secure channel must have a name (5-100 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path uco-core:name ] ;
    sh:targetClass cacontology-international:SecureChannel .

cacontology-international:SpecializedOperationValidationShape a sh:NodeShape ;
    rdfs:label "Specialized Operation Validation Shape"@en ;
    rdfs:comment "Validates specialized international operations."@en ;
    sh:sparql [ sh:message "Specialized operations should have appropriate support mechanisms."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a ?operationType .
                FILTER (?operationType IN (
                    cacontology-international:LiveStreamingInvestigation,
                    cacontology-international:InstructedAbuseOperation,
                    cacontology-international:GlobalPlatformTakedown
                ))
                FILTER NOT EXISTS {
                    $this cacontology-international:supportedBy ?taskforce .
                    ?taskforce a cacontology-international:InternationalTaskForce .
                }
            }
        """ ] ;
    sh:targetClass cacontology-international:GlobalPlatformTakedown,
        cacontology-international:InstructedAbuseOperation,
        cacontology-international:LiveStreamingInvestigation .

cacontology-international:TemporalValidationShape a sh:NodeShape ;
    rdfs:label "Temporal Validation Shape"@en ;
    rdfs:comment "Validates temporal consistency for international operations."@en ;
    sh:sparql [ sh:message "Start time must be before end time when both are specified."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this uco-core:startTime ?start ;
                      uco-core:endTime ?end .
                FILTER (?start >= ?end)
            }
        """ ] ;
    sh:targetClass cacontology-international:ACCCEIntegration,
        cacontology-international:CrossBorderOperation,
        cacontology-international:InternationalAlert,
        cacontology-international:InternationalReferral,
        cacontology-international:NCMECReporting .

cacontology-international:USAustraliaCoordinationShape a sh:NodeShape ;
    rdfs:label "US-Australia Coordination Shape"@en ;
    rdfs:comment "Validation shape for US-Australia coordination instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "undercover_investigation" "direct_referral" "joint_operation" "intelligence_sharing" ) ;
            sh:maxCount 1 ;
            sh:message "Operation context must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-international:operationContext ] ;
    sh:targetClass cacontology-international:USAustraliaCoordination .

cacontology-international:UrgentOperationResponseBusinessRule a sh:NodeShape ;
    sh:sparql [ sh:message "Emergency operations must have rapid response times"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/international#"^^xsd:anyURI ;
                            sh:prefix "cacontology-international" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-international:hasOperationalUrgency ?urgency ;
                      cacontology-international:responseTimeInternational ?responseTime .
                FILTER (?urgency IN ("emergency", "immediate") && ?responseTime > 24.0)
            }
        """ ] ;
    sh:targetClass cacontology-international:InternationalReferral .

cacontology-international:alertResponseTime a owl:DatatypeProperty ;
    rdfs:label "alert response time"@en ;
    rdfs:comment "Average response time to international alerts in minutes."@en ;
    rdfs:domain cacontology-international:InstantAlertSystem ;
    rdfs:range xsd:decimal .

cacontology-international:alertingPartner a owl:ObjectProperty ;
    rdfs:label "alerting partner"@en ;
    rdfs:comment "International partner who initiated the alert or referral."@en ;
    rdfs:domain cacontology-international:InternationalReferral ;
    rdfs:range uco-identity:Organization .

cacontology-international:analysesUsers a owl:ObjectProperty ;
    rdfs:label "analyses users"@en ;
    rdfs:comment "Links mass user analysis to user databases."@en ;
    rdfs:domain cacontology-international:MassUserAnalysis ;
    rdfs:range uco-observable:ObservableObject .

cacontology-international:automatedMatchAccuracy a owl:DatatypeProperty ;
    rdfs:label "automated match accuracy"@en ;
    rdfs:comment "Accuracy of automated cross-matching system (0.0-1.0)."@en ;
    rdfs:domain cacontology-international:AutomatedCrossMatching ;
    rdfs:range xsd:decimal .

cacontology-international:channelsMonitored a owl:DatatypeProperty ;
    rdfs:label "channels monitored"@en ;
    rdfs:comment "Number of communication channels monitored for real-time intelligence."@en ;
    rdfs:domain cacontology-international:LiveIntelligenceFeed ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-international:communicationLatency a owl:DatatypeProperty ;
    rdfs:label "communication latency"@en ;
    rdfs:comment "Average latency for real-time communications between international partners in milliseconds."@en ;
    rdfs:domain cacontology-international:RealTimeIntelligenceSharing ;
    rdfs:range xsd:decimal .

cacontology-international:contributesToFusion a owl:ObjectProperty ;
    rdfs:label "contributes to fusion"@en ;
    rdfs:comment "Links intelligence sources to fusion processes they contribute to."@en ;
    rdfs:domain uco-identity:Organization ;
    rdfs:range cacontology-international:IntelligenceFusion .

cacontology-international:cooperationResponseTime a owl:DatatypeProperty ;
    rdfs:label "cooperation response time"@en ;
    rdfs:comment "Response time for international cooperation requests in days."@en ;
    rdfs:domain cacontology-international:InternationalEvidenceSharing ;
    rdfs:range xsd:decimal .

cacontology-international:coordinatedByEuropol a owl:ObjectProperty ;
    rdfs:label "coordinated by Europol"@en ;
    rdfs:comment "Links operation to Europol coordination framework."@en ;
    rdfs:domain cacontology-international:EuropolOperation ;
    rdfs:range cacontology-international:EuropolCoordination .

cacontology-international:coordinatesGlobalTakedown a owl:ObjectProperty ;
    rdfs:label "coordinates global takedown"@en ;
    rdfs:comment "Links real-time sharing to global takedown coordination."@en ;
    rdfs:domain cacontology-international:RealTimeIntelligenceSharing ;
    rdfs:range cacontology-international:GlobalTakedownCoordination .

cacontology-international:coordinatesHotlines a owl:ObjectProperty ;
    rdfs:label "coordinates hotlines"@en ;
    rdfs:comment "Hotlines coordinated under international framework."@en ;
    rdfs:domain cacontology-international:InternationalHotlineCoordination ;
    rdfs:range uco-identity:Organization .

cacontology-international:coordinatesInternationalEffort a owl:ObjectProperty ;
    rdfs:label "coordinates international effort"@en ;
    rdfs:comment "Links investigation to international coordination efforts."@en ;
    rdfs:domain cacontology-international:CrossJurisdictionalInvestigation ;
    rdfs:range cacontology-international:MutualLegalAssistanceTreatyOperation .

cacontology-international:coordinatesProsecution a owl:ObjectProperty ;
    rdfs:label "coordinates prosecution"@en ;
    rdfs:comment "Links international prosecution to operations."@en ;
    rdfs:domain cacontology-international:InternationalProsecution ;
    rdfs:range cacontology-international:EuropolOperation .

cacontology-international:coordinatesResources a owl:ObjectProperty ;
    rdfs:label "coordinates resources"@en ;
    rdfs:comment "Links operation to resource coordination framework."@en ;
    rdfs:domain cacontology-international:EuropolOperation ;
    rdfs:range cacontology-international:InternationalResourceCoordination .

cacontology-international:coordinatingAgency a owl:ObjectProperty ;
    rdfs:label "coordinating agency"@en ;
    rdfs:comment "Primary agency coordinating the international operation."@en ;
    rdfs:domain cacontology-international:USAustraliaCoordination ;
    rdfs:range uco-identity:Organization .

cacontology-international:coordinationComplexityLevel a owl:DatatypeProperty ;
    rdfs:label "coordination complexity level"@en ;
    rdfs:comment "Complexity level of international coordination (basic, moderate, complex, highly_complex)."@en ;
    rdfs:domain cacontology-international:EuropolCoordination ;
    rdfs:range xsd:string .

cacontology-international:crossReferencesFound a owl:DatatypeProperty ;
    rdfs:label "cross-references found"@en ;
    rdfs:comment "Number of cross-references identified across international databases."@en ;
    rdfs:domain cacontology-international:CrossReferenceAnalysis ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-international:dataLakeSize a owl:DatatypeProperty ;
    rdfs:label "data lake size"@en ;
    rdfs:comment "Size of intelligence data lake in petabytes."@en ;
    rdfs:domain cacontology-international:IntelligenceDataLake ;
    rdfs:range xsd:decimal .

cacontology-international:databasesIntegrated a owl:DatatypeProperty ;
    rdfs:label "databases integrated"@en ;
    rdfs:comment "Number of international databases integrated in network."@en ;
    rdfs:domain cacontology-international:GlobalDatabaseNetwork ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-international:deploysTeam a owl:ObjectProperty ;
    rdfs:label "deploys team"@en ;
    rdfs:comment "Links operation to global investigative team deployed."@en ;
    rdfs:domain cacontology-international:EuropolOperation ;
    rdfs:range cacontology-international:GlobalInvestigativeTeam .

cacontology-international:disruptionEffectiveness a owl:DatatypeProperty ;
    rdfs:label "disruption effectiveness"@en ;
    rdfs:comment "Effectiveness of network disruption efforts (low, moderate, high, complete)."@en ;
    rdfs:domain cacontology-international:InternationalNetworkDisruption ;
    rdfs:range xsd:string .

cacontology-international:disruptsInternationalNetwork a owl:ObjectProperty ;
    rdfs:label "disrupts international network"@en ;
    rdfs:comment "Links disruption effort to international networks being disrupted."@en ;
    rdfs:domain cacontology-international:InternationalNetworkDisruption ;
    rdfs:range uco-identity:Organization .

cacontology-international:emergencyResponseTime a owl:DatatypeProperty ;
    rdfs:label "emergency response time"@en ;
    rdfs:comment "Emergency response time for critical threats in minutes."@en ;
    rdfs:domain cacontology-international:EmergencyCoordinationProtocol ;
    rdfs:range xsd:decimal .

cacontology-international:enablesAutomatedMatching a owl:ObjectProperty ;
    rdfs:label "enables automated matching"@en ;
    rdfs:comment "Links database network to automated cross-matching capabilities."@en ;
    rdfs:domain cacontology-international:GlobalDatabaseNetwork ;
    rdfs:range cacontology-international:AutomatedCrossMatching .

cacontology-international:enablesRealTimeSharing a owl:ObjectProperty ;
    rdfs:label "enables real-time sharing"@en ;
    rdfs:comment "Links international cooperation to real-time intelligence sharing capabilities."@en ;
    rdfs:domain cacontology-international:InternationalPartnership ;
    rdfs:range cacontology-international:RealTimeIntelligenceSharing .

cacontology-international:encryptionLevel a owl:DatatypeProperty ;
    rdfs:label "encryption level"@en ;
    rdfs:comment "Level of encryption used for secure communications (basic, enhanced, military_grade)."@en ;
    rdfs:domain cacontology-international:SecureCommunicationChannel ;
    rdfs:range xsd:string .

cacontology-international:europeanMemberStatesInvolved a owl:DatatypeProperty ;
    rdfs:label "European member states involved"@en ;
    rdfs:comment "Number of EU member states participating in Europol operation."@en ;
    rdfs:domain cacontology-international:EuropolOperation ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-international:evidenceSharingVolume a owl:DatatypeProperty ;
    rdfs:label "evidence sharing volume"@en ;
    rdfs:comment "Volume of evidence shared internationally in gigabytes."@en ;
    rdfs:domain cacontology-international:InternationalEvidenceSharing ;
    rdfs:range xsd:decimal .

cacontology-international:evidenceVolumeInternational a owl:DatatypeProperty ;
    rdfs:label "evidence volume international"@en ;
    rdfs:comment "Total volume of evidence collected across all participating countries in terabytes."@en ;
    rdfs:domain cacontology-international:InternationalEvidence ;
    rdfs:range xsd:decimal .

cacontology-international:executesQuery a owl:ObjectProperty ;
    rdfs:label "executes query"@en ;
    rdfs:comment "Links intelligence analysis to federated database queries executed."@en ;
    rdfs:domain uco-action:Action ;
    rdfs:range cacontology-international:FederatedDatabaseQuery .

cacontology-international:feedsDataLake a owl:ObjectProperty ;
    rdfs:label "feeds data lake"@en ;
    rdfs:comment "Links intelligence sources to data lake they feed."@en ;
    rdfs:domain uco-identity:Organization ;
    rdfs:range cacontology-international:IntelligenceDataLake .

cacontology-international:forensicTeamsDeployed a owl:DatatypeProperty ;
    rdfs:label "forensic teams deployed"@en ;
    rdfs:comment "Number of forensic teams deployed across participating countries."@en ;
    rdfs:domain cacontology-international:CrossBorderForensics ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-international:fusionAccuracy a owl:DatatypeProperty ;
    rdfs:label "fusion accuracy"@en ;
    rdfs:comment "Accuracy of intelligence fusion process (0.0-1.0)."@en ;
    rdfs:domain cacontology-international:IntelligenceFusion ;
    rdfs:range xsd:decimal .

cacontology-international:generatesThreatAssessment a owl:ObjectProperty ;
    rdfs:label "generates threat assessment"@en ;
    rdfs:comment "Links fusion process to threat assessments generated."@en ;
    rdfs:domain cacontology-international:IntelligenceFusion ;
    rdfs:range cacontology-international:ThreatAssessmentSharing .

cacontology-international:integratesToNetwork a owl:ObjectProperty ;
    rdfs:label "integrates to network"@en ;
    rdfs:comment "Links national databases to global database network."@en ;
    rdfs:domain cacontology-international:InternationalDatabase ;
    rdfs:range cacontology-international:GlobalDatabaseNetwork .

cacontology-international:intelligenceChannels a owl:DatatypeProperty ;
    rdfs:label "intelligence channels"@en ;
    rdfs:comment "Number of intelligence sharing channels activated for operation."@en ;
    rdfs:domain cacontology-international:InternationalIntelligenceSharing ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-international:intelligenceSources a owl:DatatypeProperty ;
    rdfs:label "intelligence sources"@en ;
    rdfs:comment "Number of intelligence sources contributing to fusion process."@en ;
    rdfs:domain cacontology-international:IntelligenceFusion ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-international:internationalPartnersInvolved a owl:DatatypeProperty ;
    rdfs:label "international partners involved"@en ;
    rdfs:comment "Number of non-EU countries participating in operation."@en ;
    rdfs:domain cacontology-international:MultiCountryTakedown ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-international:investigativeTeamSize a owl:DatatypeProperty ;
    rdfs:label "investigative team size"@en ;
    rdfs:comment "Total size of global investigative team across all countries."@en ;
    rdfs:domain cacontology-international:GlobalInvestigativeTeam ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-international:involvesCountries a owl:ObjectProperty ;
    rdfs:label "involves countries"@en ;
    rdfs:comment "Links multi-country operation to participating countries."@en ;
    rdfs:domain cacontology-international:MultiCountryTakedown ;
    rdfs:range uco-location:Location .

cacontology-international:managedBy a owl:ObjectProperty ;
    rdfs:label "managed by"@en ;
    rdfs:comment "Organization managing the global hotline network."@en ;
    rdfs:domain cacontology-international:GlobalHotlineNetwork ;
    rdfs:range uco-identity:Organization .

cacontology-international:operationDurationMonths a owl:DatatypeProperty ;
    rdfs:label "operation duration months"@en ;
    rdfs:comment "Duration of international operation in months."@en ;
    rdfs:domain cacontology-international:EuropolOperation ;
    rdfs:range xsd:decimal .

cacontology-international:participatesIn a owl:ObjectProperty ;
    rdfs:label "participates in"@en ;
    rdfs:comment "Indicates participation in international partnerships."@en ;
    rdfs:domain uco-identity:Organization ;
    rdfs:range cacontology-international:InternationalPartnership .

cacontology-international:performsCrossReference a owl:ObjectProperty ;
    rdfs:label "performs cross-reference"@en ;
    rdfs:comment "Links database integration to cross-reference analysis performed."@en ;
    rdfs:domain cacontology-international:GlobalDatabaseNetwork ;
    rdfs:range cacontology-international:CrossReferenceAnalysis .

cacontology-international:processesDistributed a owl:ObjectProperty ;
    rdfs:label "processes distributed"@en ;
    rdfs:comment "Links intelligence processing to distributed processing systems."@en ;
    rdfs:domain cacontology-international:IntelligenceDataLake ;
    rdfs:range cacontology-international:DistributedIntelligenceProcessing .

cacontology-international:processesEvidence a owl:ObjectProperty ;
    rdfs:label "processes evidence"@en ;
    rdfs:comment "Links cross-border forensics to international evidence."@en ;
    rdfs:domain cacontology-international:CrossBorderForensics ;
    rdfs:range cacontology-international:InternationalEvidence .

cacontology-international:processingNodeCount a owl:DatatypeProperty ;
    rdfs:label "processing node count"@en ;
    rdfs:comment "Number of processing nodes in distributed intelligence system."@en ;
    rdfs:domain cacontology-international:DistributedIntelligenceProcessing ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-international:prosecutionsCrossCountry a owl:DatatypeProperty ;
    rdfs:label "prosecutions cross country"@en ;
    rdfs:comment "Number of prosecutions initiated across multiple countries."@en ;
    rdfs:domain cacontology-international:InternationalProsecution ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-international:providesExpertise a owl:ObjectProperty ;
    rdfs:label "provides expertise"@en ;
    rdfs:comment "Links team to specialized expertise provided."@en ;
    rdfs:domain cacontology-international:GlobalInvestigativeTeam ;
    rdfs:range uco-identity:Organization .

cacontology-international:queryPerformanceMs a owl:DatatypeProperty ;
    rdfs:label "query performance ms"@en ;
    rdfs:comment "Average query performance across federated databases in milliseconds."@en ;
    rdfs:domain cacontology-international:FederatedDatabaseQuery ;
    rdfs:range xsd:decimal .

cacontology-international:receivesIntelligenceFeed a owl:ObjectProperty ;
    rdfs:label "receives intelligence feed"@en ;
    rdfs:comment "Links country to intelligence feeds received."@en ;
    rdfs:domain uco-identity:Organization ;
    rdfs:range cacontology-international:LiveIntelligenceFeed .

cacontology-international:referredTo a owl:ObjectProperty ;
    rdfs:label "referred to"@en ;
    rdfs:comment "Organization or country to which the case is referred."@en ;
    rdfs:domain cacontology-international:InternationalReferral ;
    rdfs:range uco-identity:Organization .

cacontology-international:requiresAssistance a owl:ObjectProperty ;
    rdfs:label "requires assistance"@en ;
    rdfs:comment "Cross-border investigation requiring legal assistance."@en ;
    rdfs:domain cacontology-international:CrossBorderInvestigation ;
    rdfs:range cacontology-international:MutualLegalAssistance .

cacontology-international:resourcesCoordinated a owl:DatatypeProperty ;
    rdfs:label "resources coordinated"@en ;
    rdfs:comment "Types of resources coordinated internationally (personnel, technology, intelligence)."@en ;
    rdfs:domain cacontology-international:InternationalResourceCoordination ;
    rdfs:range xsd:string .

cacontology-international:resultsInSeizure a owl:ObjectProperty ;
    rdfs:label "results in seizure"@en ;
    rdfs:comment "Links international cooperation to device seizures performed."@en ;
    rdfs:domain cacontology-international:MutualLegalAssistanceTreatyOperation ;
    rdfs:range cacontology-international:CrossBorderDeviceSeizure .

cacontology-international:sharesEvidenceInternationally a owl:ObjectProperty ;
    rdfs:label "shares evidence internationally"@en ;
    rdfs:comment "Links evidence sharing to evidence shared across borders."@en ;
    rdfs:domain cacontology-international:InternationalEvidenceSharing ;
    rdfs:range uco-observable:ObservableObject .

cacontology-international:sharesIntelligence a owl:ObjectProperty ;
    rdfs:label "shares intelligence"@en ;
    rdfs:comment "Links operation to intelligence sharing framework."@en ;
    rdfs:domain cacontology-international:EuropolOperation ;
    rdfs:range cacontology-international:InternationalIntelligenceSharing .

cacontology-international:simultaneousCountries a owl:DatatypeProperty ;
    rdfs:label "simultaneous countries"@en ;
    rdfs:comment "Number of countries participating simultaneously in real-time coordination."@en ;
    rdfs:domain cacontology-international:GlobalTakedownCoordination ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-international:simultaneousOperations a owl:DatatypeProperty ;
    rdfs:label "simultaneous operations"@en ;
    rdfs:comment "Number of operations synchronized simultaneously across countries."@en,
        "Number of simultaneous operations coordinated across countries."@en ;
    rdfs:domain cacontology-international:MultiCountryTakedown,
        cacontology-international:OperationalSyncronization ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-international:specializedExpertiseAreas a owl:DatatypeProperty ;
    rdfs:label "specialized expertise areas"@en ;
    rdfs:comment "Areas of specialized expertise coordinated for operation (forensics, intelligence, legal)."@en ;
    rdfs:domain cacontology-international:GlobalInvestigativeTeam ;
    rdfs:range xsd:string .

cacontology-international:supportedBy a owl:ObjectProperty ;
    rdfs:label "supported by"@en ;
    rdfs:comment "International task force supporting the operation."@en ;
    rdfs:domain cacontology-international:CrossBorderOperation ;
    rdfs:range cacontology-international:InternationalTaskForce .

cacontology-international:synchronizationAccuracy a owl:DatatypeProperty ;
    rdfs:label "synchronization accuracy"@en ;
    rdfs:comment "Accuracy of operational synchronization across countries (0.0-1.0)."@en ;
    rdfs:domain cacontology-international:OperationalSyncronization ;
    rdfs:range xsd:decimal .

cacontology-international:synchronizesOperations a owl:ObjectProperty ;
    rdfs:label "synchronizes operations"@en ;
    rdfs:comment "Links takedown coordination to operational synchronization."@en ;
    rdfs:domain cacontology-international:GlobalTakedownCoordination ;
    rdfs:range cacontology-international:OperationalSyncronization .

cacontology-international:targetsPlatform a owl:ObjectProperty ;
    rdfs:label "targets platform"@en ;
    rdfs:comment "Links global takedown to platform being targeted."@en ;
    rdfs:domain cacontology-international:GlobalPlatformTakedown ;
    rdfs:range uco-observable:ObservableObject .

cacontology-international:threatLevelAssessed a owl:DatatypeProperty ;
    rdfs:label "threat level assessed"@en ;
    rdfs:comment "Threat level assessment result (low, moderate, high, critical, extreme)."@en ;
    rdfs:domain cacontology-international:ThreatAssessmentSharing ;
    rdfs:range xsd:string .

cacontology-international:transmitsAlert a owl:ObjectProperty ;
    rdfs:label "transmits alert"@en ;
    rdfs:comment "Links alert system to alerts transmitted."@en ;
    rdfs:domain cacontology-international:InstantAlertSystem ;
    rdfs:range cacontology-international:CrossBorderThreatAlert .

cacontology-international:treatyMechanism a owl:DatatypeProperty ;
    rdfs:label "treaty mechanism"@en ;
    rdfs:comment "Specific treaty mechanism used for international cooperation (MLAT, extradition, informal_cooperation)."@en ;
    rdfs:domain cacontology-international:MutualLegalAssistanceTreatyOperation ;
    rdfs:range xsd:string .

cacontology-international:triggersAlert a owl:ObjectProperty ;
    rdfs:label "triggers alert"@en ;
    rdfs:comment "Investigation that triggers an international alert."@en ;
    rdfs:domain cacontology:Investigation ;
    rdfs:range cacontology-international:InternationalAlert .

cacontology-international:triggersEmergencyProtocol a owl:ObjectProperty ;
    rdfs:label "triggers emergency protocol"@en ;
    rdfs:comment "Links threat alerts to emergency protocols triggered."@en ;
    rdfs:domain cacontology-international:CrossBorderThreatAlert ;
    rdfs:range cacontology-international:EmergencyCoordinationProtocol .

cacontology-international:userCountriesAffected a owl:DatatypeProperty ;
    rdfs:label "user countries affected"@en ;
    rdfs:comment "Number of countries with affected users in global platform takedown."@en ;
    rdfs:domain cacontology-international:GlobalPlatformTakedown ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-international:usersAnalyzedMillions a owl:DatatypeProperty ;
    rdfs:label "users analyzed millions"@en ;
    rdfs:comment "Number of users analyzed in millions for mass user database operations."@en ;
    rdfs:domain cacontology-international:MassUserAnalysis ;
    rdfs:range xsd:decimal .

cacontology-international:utilizesSecureChannel a owl:ObjectProperty ;
    rdfs:label "utilizes secure channel"@en ;
    rdfs:comment "Links real-time sharing to secure communication channels used."@en ;
    rdfs:domain cacontology-international:RealTimeIntelligenceSharing ;
    rdfs:range cacontology-international:SecureCommunicationChannel .

cacontology-coord:AgreementValidityShape a sh:NodeShape ;
    rdfs:label "Agreement Validity Shape"@en ;
    rdfs:comment "Validates coordination agreement validity."@en ;
    sh:sparql [ sh:message "Coordination agreement effective date must be before expiration date when both are specified."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-coord:effectiveDate ?effective ;
                      cacontology-coord:expirationDate ?expiration .
                FILTER (?effective >= ?expiration)
            }
        """ ] ;
    sh:targetClass cacontology-coord:CoordinationAgreement .

cacontology-coord:AssignsLiaisonShape a sh:PropertyShape ;
    sh:class cacontology-coord:LiaisonOfficer ;
    sh:description "Links coordination to liaison officers" ;
    sh:minCount 0 ;
    sh:name "assigns liaison" ;
    sh:path cacontology-coord:assignsLiaison .

cacontology-coord:CaseInformationSharing a gufo:EventType,
        owl:Class ;
    rdfs:label "Case Information Sharing"@en ;
    rdfs:comment "Sharing of case-specific information including case files, reports, witness statements, and investigative findings."@en ;
    rdfs:subClassOf cacontology-coord:InformationSharing .

cacontology-coord:CaseResolutionTimeMetrics a gufo:SubKind,
        owl:Class ;
    rdfs:label "Case Resolution Time Metrics"@en ;
    rdfs:comment "Metrics measuring impact of coordination on case resolution times and outcomes."@en ;
    rdfs:subClassOf cacontology-coord:CoordinationMetrics .

cacontology-coord:CommunicationProtocolShape a sh:NodeShape ;
    rdfs:label "Communication Protocol Shape"@en ;
    rdfs:comment "Validation shape for communication protocol instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "formal_channels" "informal_channels" "emergency_channels" "secure_channels" "encrypted_channels" "liaison_channels" ) ;
            sh:maxCount 1 ;
            sh:message "Communication protocol must specify protocol type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-coord:protocolType ],
        [ sh:datatype xsd:string ;
            sh:in ( "real_time" "daily" "weekly" "bi_weekly" "monthly" "as_needed" "emergency_only" ) ;
            sh:maxCount 1 ;
            sh:message "Communication protocol must specify communication frequency from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-coord:communicationFrequency ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Communication protocol must specify if escalation procedure exists."@en ;
            sh:minCount 1 ;
            sh:path cacontology-coord:escalationProcedure ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 168.0 ;
            sh:message "Response time requirement must be between 1 and 168 hours (1 week)."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1.0 ;
            sh:path cacontology-coord:responseTimeRequirement ] ;
    sh:targetClass cacontology-coord:CommunicationProtocol .

cacontology-coord:CoordinationAgreementShape a sh:NodeShape ;
    rdfs:label "Coordination Agreement Shape"@en ;
    rdfs:comment "Validation shape for coordination agreement instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "mou" "moa" "formal_agreement" "informal_agreement" "task_force_charter" "joint_operations_plan" ) ;
            sh:maxCount 1 ;
            sh:message "Coordination agreement must specify agreement type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-coord:agreementType ],
        [ sh:datatype xsd:string ;
            sh:in ( "specific_case" "case_category" "ongoing_cooperation" "resource_sharing" "information_sharing" "comprehensive" ) ;
            sh:maxCount 1 ;
            sh:message "Coordination agreement must specify agreement scope from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-coord:agreementScope ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Coordination agreement must specify effective date."@en ;
            sh:minCount 1 ;
            sh:path cacontology-coord:effectiveDate ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Coordination agreement may specify expiration date."@en ;
            sh:minCount 0 ;
            sh:path cacontology-coord:expirationDate ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Coordination agreement must specify if renewal clause exists."@en ;
            sh:minCount 1 ;
            sh:path cacontology-coord:renewalClause ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Coordination agreement must specify if termination clause exists."@en ;
            sh:minCount 1 ;
            sh:path cacontology-coord:terminationClause ] ;
    sh:targetClass cacontology-coord:CoordinationAgreement .

cacontology-coord:CoordinationAgreementTemporalShape a sh:NodeShape ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Agreement must have effective date (gUFO temporal boundary)"@en ;
            sh:minCount 1 ;
            sh:path cacontology-coord:effectiveDate ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Agreement may have expiration date (gUFO temporal boundary)"@en ;
            sh:path cacontology-coord:expirationDate ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Agreement may have gUFO temporal start boundary"@en ;
            sh:path gufo:hasBeginPointInXSDDateTimeStamp ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Agreement may have gUFO temporal end boundary"@en ;
            sh:path gufo:hasEndPointInXSDDateTimeStamp ] ;
    sh:targetClass cacontology-coord:CoordinationAgreement .

cacontology-coord:CoordinationCrossReferenceShape a sh:NodeShape ;
    rdfs:label "Coordination Cross Reference Shape"@en ;
    rdfs:comment "Validates cross-references between coordination and related entities."@en ;
    sh:sparql [ sh:message "Investigation coordination must involve at least two agencies and use communication protocols."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-coord:InvestigationCoordination .
                FILTER NOT EXISTS {
                    $this cacontology-coord:involvesAgency ?agency1, ?agency2 ;
                          cacontology-coord:usesProtocol ?protocol .
                    FILTER (?agency1 != ?agency2)
                }
            }
        """ ] ;
    sh:targetClass cacontology-coord:InvestigationCoordination .

cacontology-coord:CoordinationEffectivenessMetrics a gufo:SubKind,
        owl:Class ;
    rdfs:label "Coordination Effectiveness Metrics"@en ;
    rdfs:comment "Metrics measuring overall effectiveness of coordination efforts and outcomes."@en ;
    rdfs:subClassOf cacontology-coord:CoordinationMetrics .

cacontology-coord:CoordinationEffectivenessSuccessBusinessRule a sh:NodeShape ;
    sh:sparql [ sh:message "High-effectiveness coordination should demonstrate high success rates"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/investigation-coordination#"^^xsd:anyURI ;
                            sh:prefix "cacontology-coord" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-coord:hasCoordinationEffectiveness ?effectiveness ;
                      cacontology-coord:hasSuccessRate ?successRate .
                FILTER (?effectiveness IN ("excellent", "outstanding") && ?successRate < 0.7)
            }
        """ ] ;
    sh:targetClass cacontology-coord:InvestigationCoordination .

cacontology-coord:CoordinationEventTypeValidationShape a sh:NodeShape ;
    sh:message "Every coordination EventType must extend gufo:Event"@en ;
    sh:property [ sh:hasValue gufo:EventType ;
            sh:minCount 1 ;
            sh:path rdf:type ],
        [ sh:class gufo:Event ;
            sh:minCount 1 ;
            sh:path rdfs:subClassOf ] ;
    sh:targetClass gufo:EventType .

cacontology-coord:CoordinationMetricsShape a sh:NodeShape ;
    rdfs:label "Coordination Metrics Shape"@en ;
    rdfs:comment "Validation shape for coordination metrics instances with gUFO integration."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "response_time" "information_sharing_rate" "resource_utilization" "case_resolution_time" "coordination_effectiveness" "cost_efficiency" ) ;
            sh:maxCount 1 ;
            sh:message "Coordination metrics must specify metric type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-coord:metricType ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 100.0 ;
            sh:message "Metric value must be between 0.0 and 100.0."@en ;
            sh:minCount 1 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-coord:metricValue ],
        [ sh:datatype xsd:string ;
            sh:in ( "daily" "weekly" "monthly" "quarterly" "annually" "case_based" ) ;
            sh:maxCount 1 ;
            sh:message "Coordination metrics must specify measurement period from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-coord:measurementPeriod ],
        [ sh:datatype xsd:string ;
            sh:in ( "above_benchmark" "meets_benchmark" "below_benchmark" "no_benchmark" "exceeds_target" ) ;
            sh:maxCount 1 ;
            sh:message "Benchmark comparison must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-coord:benchmarkComparison ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Metrics measurement may have start time (gUFO temporal boundary)"@en ;
            sh:path gufo:hasBeginPointInXSDDateTimeStamp ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Metrics reliability must be between 0.0 and 1.0 (gUFO quality aspect)"@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-coord:hasReliability ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Metrics accuracy must be between 0.0 and 1.0 (gUFO quality aspect)"@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-coord:hasAccuracy ] ;
    sh:targetClass cacontology-coord:CoordinationMetrics .

cacontology-coord:CoordinationSituationTypeValidationShape a sh:NodeShape ;
    sh:message "Every coordination SituationType must extend gufo:Situation"@en ;
    sh:property [ sh:hasValue gufo:SituationType ;
            sh:minCount 1 ;
            sh:path rdf:type ],
        [ sh:class gufo:Situation ;
            sh:minCount 1 ;
            sh:path rdfs:subClassOf ] ;
    sh:targetClass gufo:SituationType .

cacontology-coord:CostEfficiencyMetrics a gufo:SubKind,
        owl:Class ;
    rdfs:label "Cost Efficiency Metrics"@en ;
    rdfs:comment "Metrics measuring cost efficiency and financial benefits of coordination activities."@en ;
    rdfs:subClassOf cacontology-coord:CoordinationMetrics .

cacontology-coord:DataQualityShape a sh:NodeShape ;
    rdfs:label "Data Quality Shape"@en ;
    rdfs:comment "Validates data quality for investigation coordination entities with gUFO quality aspects."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Label should be between 5 and 200 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 5 ;
            sh:path rdfs:label ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 1000 ;
            sh:message "Comment should be between 10 and 1000 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 10 ;
            sh:path rdfs:comment ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Creation time should be specified when available."@en ;
            sh:minCount 0 ;
            sh:path uco-core:createdTime ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Modification time should be specified when available."@en ;
            sh:minCount 0 ;
            sh:path uco-core:modifiedTime ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Entity may have temporal beginning (gUFO temporal boundary)"@en ;
            sh:path gufo:hasBeginPointInXSDDateTimeStamp ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Entity may have temporal ending (gUFO temporal boundary)"@en ;
            sh:path gufo:hasEndPointInXSDDateTimeStamp ],
        [ sh:datatype xsd:string ;
            sh:in ( "poor" "fair" "good" "excellent" "validated" ) ;
            sh:maxCount 1 ;
            sh:message "Data quality level must be from allowed list (gUFO quality aspect)"@en ;
            sh:path cacontology-coord:hasDataQuality ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Data completeness must be between 0.0 and 1.0 (gUFO quality aspect)"@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-coord:hasDataCompleteness ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Data consistency must be between 0.0 and 1.0 (gUFO quality aspect)"@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-coord:hasDataConsistency ],
        [ sh:datatype xsd:string ;
            sh:in ( "none" "basic" "standard" "comprehensive" "full_verification" ) ;
            sh:maxCount 1 ;
            sh:message "Validation level must be from allowed list (gUFO quality aspect)"@en ;
            sh:path cacontology-coord:hasValidationLevel ] ;
    sh:targetClass cacontology-coord:CoordinationAgreement,
        cacontology-coord:InformationSharing,
        cacontology-coord:InvestigationCoordination,
        cacontology-coord:LiaisonOfficer,
        cacontology-coord:ResourceSharing .

cacontology-coord:EmergencyCommunicationChannel a gufo:SituationType,
        owl:Class ;
    rdfs:label "Emergency Communication Channel"@en ;
    rdfs:comment "Emergency communication channels for urgent coordination and crisis response."@en ;
    rdfs:subClassOf cacontology-coord:CommunicationProtocol .

cacontology-coord:EncryptedCommunicationChannel a gufo:SituationType,
        owl:Class ;
    rdfs:label "Encrypted Communication Channel"@en ;
    rdfs:comment "Encrypted communication channels providing enhanced security for sensitive operations."@en ;
    rdfs:subClassOf cacontology-coord:SecureCommunicationChannel .

cacontology-coord:EquipmentSharing a gufo:EventType,
        owl:Class ;
    rdfs:label "Equipment Sharing"@en ;
    rdfs:comment "Sharing of specialized equipment including forensic tools, surveillance equipment, and technical devices."@en ;
    rdfs:subClassOf cacontology-coord:ResourceSharing .

cacontology-coord:EvidenceSharing a gufo:EventType,
        owl:Class ;
    rdfs:label "Evidence Sharing"@en ;
    rdfs:comment "Formal sharing of evidence between agencies including digital evidence, physical evidence, and forensic analysis results."@en ;
    rdfs:subClassOf cacontology-coord:InformationSharing .

cacontology-coord:ExpertiseSharing a gufo:EventType,
        owl:Class ;
    rdfs:label "Expertise Sharing"@en ;
    rdfs:comment "Sharing of specialized expertise including subject matter experts, consultants, and technical specialists."@en ;
    rdfs:subClassOf cacontology-coord:ResourceSharing .

cacontology-coord:FacilitySharing a gufo:EventType,
        owl:Class ;
    rdfs:label "Facility Sharing"@en ;
    rdfs:comment "Sharing of facilities including laboratories, command centers, training facilities, and secure meeting spaces."@en ;
    rdfs:subClassOf cacontology-coord:ResourceSharing .

cacontology-coord:FederalCoordination a gufo:EventType,
        owl:Class ;
    rdfs:label "Federal Coordination"@en ;
    rdfs:comment "Coordination involving federal agencies and national-level law enforcement."@en ;
    rdfs:subClassOf cacontology-coord:InvestigationCoordination .

cacontology-coord:FormalAgreement a gufo:SituationType,
        owl:Class ;
    rdfs:label "Formal Agreement"@en ;
    rdfs:comment "Comprehensive formal agreement with legal binding terms for inter-agency coordination."@en ;
    rdfs:subClassOf cacontology-coord:CoordinationAgreement .

cacontology-coord:FormalCommunicationChannel a gufo:SituationType,
        owl:Class ;
    rdfs:label "Formal Communication Channel"@en ;
    rdfs:comment "Official communication channels following established protocols and hierarchies."@en ;
    rdfs:subClassOf cacontology-coord:CommunicationProtocol .

cacontology-coord:FundingSharing a gufo:EventType,
        owl:Class ;
    rdfs:label "Funding Sharing"@en ;
    rdfs:comment "Coordinated funding arrangements including cost sharing, joint funding, and resource pooling."@en ;
    rdfs:subClassOf cacontology-coord:ResourceSharing .

cacontology-coord:GovernsAgreementShape a sh:PropertyShape ;
    sh:class cacontology-coord:CoordinationAgreement ;
    sh:description "Links coordination to governing agreements" ;
    sh:minCount 0 ;
    sh:name "governs agreement" ;
    sh:path cacontology-coord:governsAgreement .

cacontology-coord:InformalAgreement a gufo:SituationType,
        owl:Class ;
    rdfs:label "Informal Agreement"@en ;
    rdfs:comment "Informal agreement or understanding for coordination without formal legal binding."@en ;
    rdfs:subClassOf cacontology-coord:CoordinationAgreement .

cacontology-coord:InformalCommunicationChannel a gufo:SituationType,
        owl:Class ;
    rdfs:label "Informal Communication Channel"@en ;
    rdfs:comment "Informal communication channels for rapid information exchange and coordination."@en ;
    rdfs:subClassOf cacontology-coord:CommunicationProtocol .

cacontology-coord:InformationSharingParticipationShape a sh:NodeShape ;
    sh:property [ sh:message "Information sharing must involve at least two organizations (gUFO participation)"@en ;
            sh:minCount 2 ;
            sh:path [ sh:alternativePath ( cacontology-coord:sharesWithAgency cacontology-coord:sharesFromAgency ) ] ] ;
    sh:targetClass cacontology-coord:InformationSharing .

cacontology-coord:InformationSharingRateMetrics a gufo:SubKind,
        owl:Class ;
    rdfs:label "Information Sharing Rate Metrics"@en ;
    rdfs:comment "Metrics measuring the rate and volume of information sharing between agencies."@en ;
    rdfs:subClassOf cacontology-coord:CoordinationMetrics .

cacontology-coord:InformationSharingSecurityBusinessRule a sh:NodeShape ;
    sh:sparql [ sh:message "High classification information requires enhanced security and formal agreements"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/investigation-coordination#"^^xsd:anyURI ;
                            sh:prefix "cacontology-coord" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-coord:classificationLevel ?classification ;
                      cacontology-coord:sharingAgreement ?agreement .
                FILTER (?classification IN ("classified", "top_secret") && ?agreement = false)
            }
        """ ] ;
    sh:targetClass cacontology-coord:InformationSharing .

cacontology-coord:InformationSharingShape a sh:NodeShape ;
    rdfs:label "Information Sharing Shape"@en ;
    rdfs:comment "Validation shape for information sharing instances with gUFO integration."@en ;
    sh:property [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Information sharing must specify if reciprocity is expected."@en ;
            sh:minCount 1 ;
            sh:path cacontology-coord:reciprocity ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Information sharing must specify if formal sharing agreement exists."@en ;
            sh:minCount 1 ;
            sh:path cacontology-coord:sharingAgreement ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Information sharing may have start time (gUFO temporal boundary)"@en ;
            sh:path gufo:hasBeginPointInXSDDateTimeStamp ],
        [ sh:datatype xsd:string ;
            sh:in ( "poor" "fair" "good" "excellent" "optimal" ) ;
            sh:maxCount 1 ;
            sh:message "Sharing efficiency level must be from allowed list (gUFO quality aspect)"@en ;
            sh:path cacontology-coord:hasSharingEfficiency ],
        [ sh:datatype xsd:string ;
            sh:in ( "basic" "standard" "enhanced" "high" "maximum" ) ;
            sh:maxCount 1 ;
            sh:message "Security level must be from allowed list (gUFO quality aspect)"@en ;
            sh:path cacontology-coord:hasSecurityLevel ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Timeliness score must be between 0.0 and 1.0 (gUFO quality aspect)"@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-coord:hasTimeliness ],
        [ sh:datatype xsd:string ;
            sh:in ( "intelligence_sharing" "evidence_sharing" "case_information" "suspect_information" "victim_information" "technical_data" ) ;
            sh:maxCount 1 ;
            sh:message "Information sharing must specify sharing type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-coord:sharingType ],
        [ sh:datatype xsd:string ;
            sh:in ( "unclassified" "law_enforcement_sensitive" "confidential" "restricted" "classified" "top_secret" ) ;
            sh:maxCount 1 ;
            sh:message "Information sharing must specify classification level from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-coord:classificationLevel ],
        [ sh:datatype xsd:string ;
            sh:in ( "secure_email" "encrypted_portal" "database_access" "formal_request" "liaison_officer" "joint_briefing" ) ;
            sh:maxCount 1 ;
            sh:message "Information sharing must specify sharing mechanism from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-coord:sharingMechanism ] ;
    sh:targetClass cacontology-coord:InformationSharing .

cacontology-coord:IntelligenceLiaison a gufo:Role,
        owl:Class ;
    rdfs:label "Intelligence Liaison"@en ;
    rdfs:comment "Intelligence liaison officer managing intelligence sharing and coordination activities."@en ;
    rdfs:subClassOf cacontology-coord:LiaisonOfficer .

cacontology-coord:IntelligenceSharingShape a sh:NodeShape ;
    rdfs:label "Intelligence Sharing Shape"@en ;
    rdfs:comment "Validation shape for intelligence sharing instances with gUFO integration."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "tactical" "strategic" "operational" "technical" "threat_assessment" "pattern_analysis" ) ;
            sh:maxCount 1 ;
            sh:message "Intelligence sharing must specify intelligence type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-coord:intelligenceType ],
        [ sh:datatype xsd:string ;
            sh:in ( "reliable" "usually_reliable" "fairly_reliable" "not_usually_reliable" "unreliable" "unknown" ) ;
            sh:maxCount 1 ;
            sh:message "Intelligence sharing must specify source reliability from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-coord:sourceReliability ],
        [ sh:datatype xsd:string ;
            sh:in ( "confirmed" "probably_true" "possibly_true" "doubtfully_true" "improbable" "cannot_be_judged" ) ;
            sh:maxCount 1 ;
            sh:message "Intelligence sharing must specify information accuracy from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-coord:informationAccuracy ],
        [ sh:datatype xsd:string ;
            sh:in ( "low" "moderate" "high" "critical" "exceptional" ) ;
            sh:maxCount 1 ;
            sh:message "Intelligence value level must be from allowed list (gUFO quality aspect)"@en ;
            sh:path cacontology-coord:hasIntelligenceValue ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Actionability score must be between 0.0 and 1.0 (gUFO quality aspect)"@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-coord:hasActionability ] ;
    sh:targetClass cacontology-coord:IntelligenceSharing .

cacontology-coord:InternationalCoordination a gufo:EventType,
        owl:Class ;
    rdfs:label "International Coordination"@en ;
    rdfs:comment "Coordination activities involving international agencies and cross-border cooperation."@en ;
    rdfs:subClassOf cacontology-coord:InvestigationCoordination .

cacontology-coord:InvestigationCoordinationParticipationShape a sh:NodeShape ;
    sh:property [ sh:message "Every investigation coordination must have at least two participating entities (gUFO participation)"@en ;
            sh:minCount 2 ;
            sh:path [ sh:alternativePath ( gufo:participatedIn cacontology-coord:involvesAgency cacontology-coord:assignsLiaison ) ] ] ;
    sh:targetClass cacontology-coord:InvestigationCoordination .

cacontology-coord:InvestigationCoordinationShape a sh:NodeShape ;
    rdfs:label "Investigation Coordination Shape"@en ;
    rdfs:comment "Validation shape for investigation coordination instances with gUFO integration."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "joint_investigation" "parallel_investigation" "information_sharing" "resource_sharing" "task_force_coordination" "multi_agency_coordination" ) ;
            sh:maxCount 1 ;
            sh:message "Investigation coordination must specify coordination type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-coord:coordinationType ],
        [ sh:datatype xsd:string ;
            sh:in ( "local" "regional" "state" "multi_state" "federal" "international" ) ;
            sh:maxCount 1 ;
            sh:message "Investigation coordination must specify coordination level from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-coord:coordinationLevel ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 50 ;
            sh:message "Investigation coordination must have between 2 and 50 participating agencies."@en ;
            sh:minCount 1 ;
            sh:minInclusive 2 ;
            sh:path cacontology-coord:participatingAgencies ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 100 ;
            sh:message "Investigation coordination must specify lead agency (3-100 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 3 ;
            sh:path cacontology-coord:leadAgency ],
        [ sh:datatype xsd:string ;
            sh:in ( "active" "inactive" "pending" "completed" "suspended" "terminated" ) ;
            sh:maxCount 1 ;
            sh:message "Investigation coordination must specify coordination status from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-coord:coordinationStatus ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Investigation coordination may have a start time."@en ;
            sh:minCount 0 ;
            sh:path uco-core:startTime ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Investigation coordination may have an end time."@en ;
            sh:minCount 0 ;
            sh:path uco-core:endTime ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Coordination may have gUFO temporal start boundary"@en ;
            sh:path gufo:hasBeginPointInXSDDateTimeStamp ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Coordination may have gUFO temporal end boundary"@en ;
            sh:path gufo:hasEndPointInXSDDateTimeStamp ],
        [ sh:datatype xsd:string ;
            sh:in ( "poor" "fair" "good" "excellent" "outstanding" ) ;
            sh:maxCount 1 ;
            sh:message "Coordination effectiveness level must be from allowed list (gUFO quality aspect)"@en ;
            sh:path cacontology-coord:hasCoordinationEffectiveness ],
        [ sh:datatype xsd:string ;
            sh:in ( "simple" "moderate" "complex" "highly_complex" "extremely_complex" ) ;
            sh:maxCount 1 ;
            sh:message "Coordination complexity level must be from allowed list (gUFO quality aspect)"@en ;
            sh:path cacontology-coord:hasComplexityLevel ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Success rate must be between 0.0 and 1.0 (gUFO quality aspect)"@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-coord:hasSuccessRate ] ;
    sh:targetClass cacontology-coord:InvestigationCoordination .

cacontology-coord:InvestigationCoordinationTemporalShape a sh:NodeShape ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Coordination may have at most one end time (gUFO temporal boundary)"@en ;
            sh:path gufo:hasEndPointInXSDDateTimeStamp ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Coordination may have at most one start time (gUFO temporal boundary)"@en ;
            sh:path gufo:hasBeginPointInXSDDateTimeStamp ] ;
    sh:sparql [ sh:message "Coordination end time must be after start time when both specified (gUFO temporal ordering)"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "http://purl.org/nemo/gufo#"^^xsd:anyURI ;
                            sh:prefix "gufo" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this gufo:hasBeginPointInXSDDateTimeStamp ?startTime .
                $this gufo:hasEndPointInXSDDateTimeStamp ?endTime .
                FILTER (?endTime <= ?startTime)
            }
        """ ] ;
    sh:targetClass cacontology-coord:InvestigationCoordination .

cacontology-coord:InvolvesAgencyShape a sh:PropertyShape ;
    sh:class uco-identity:Organization ;
    sh:description "Links coordination to participating agencies" ;
    sh:minCount 2 ;
    sh:name "involves agency" ;
    sh:path cacontology-coord:involvesAgency .

cacontology-coord:JointInvestigationCompositionShape a sh:NodeShape ;
    sh:property [ sh:message "Joint investigation must include at least two investigation components (gUFO part-whole)"@en ;
            sh:minCount 2 ;
            sh:path [ sh:inversePath gufo:isProperPartOf ] ] ;
    sh:targetClass cacontology-coord:JointInvestigation .

cacontology-coord:JointInvestigationResourceIntegrationBusinessRule a sh:NodeShape ;
    sh:sparql [ sh:message "High-integration joint investigations require resource pooling and shared command"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/investigation-coordination#"^^xsd:anyURI ;
                            sh:prefix "cacontology-coord" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-coord:hasCoordinationIntensity ?intensity ;
                      cacontology-coord:resourcePooling ?pooling ;
                      cacontology-coord:sharedCommand ?command .
                FILTER (?intensity IN ("intensive", "fully_integrated") && 
                        (?pooling = false || ?command = false))
            }
        """ ] ;
    sh:targetClass cacontology-coord:JointInvestigation .

cacontology-coord:JointInvestigationShape a sh:NodeShape ;
    rdfs:label "Joint Investigation Shape"@en ;
    rdfs:comment "Validation shape for joint investigation instances with gUFO integration."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "single_case" "related_cases" "criminal_network" "organized_crime" "multi_jurisdictional" "international" ) ;
            sh:maxCount 1 ;
            sh:message "Joint investigation must specify investigation scope from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-coord:investigationScope ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Joint investigation must specify if resource pooling is used."@en ;
            sh:minCount 1 ;
            sh:path cacontology-coord:resourcePooling ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Joint investigation must specify if shared command structure is used."@en ;
            sh:minCount 1 ;
            sh:path cacontology-coord:sharedCommand ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Joint investigation must specify if unified reporting is used."@en ;
            sh:minCount 1 ;
            sh:path cacontology-coord:unifiedReporting ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Joint investigation must have start time (gUFO temporal boundary)"@en ;
            sh:minCount 1 ;
            sh:path gufo:hasBeginPointInXSDDateTimeStamp ],
        [ sh:datatype xsd:string ;
            sh:in ( "minimal" "moderate" "high" "intensive" "fully_integrated" ) ;
            sh:maxCount 1 ;
            sh:message "Coordination intensity level must be from allowed list (gUFO quality aspect)"@en ;
            sh:path cacontology-coord:hasCoordinationIntensity ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Unification level must be between 0.0 and 1.0 (gUFO quality aspect)"@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-coord:hasUnificationLevel ] ;
    sh:targetClass cacontology-coord:JointInvestigation .

cacontology-coord:JointOperationsPlan a gufo:SituationType,
        owl:Class ;
    rdfs:label "Joint Operations Plan"@en ;
    rdfs:comment "Detailed operational plan for joint investigations and coordinated activities."@en ;
    rdfs:subClassOf cacontology-coord:CoordinationAgreement .

cacontology-coord:LegalLiaison a gufo:Role,
        owl:Class ;
    rdfs:label "Legal Liaison"@en ;
    rdfs:comment "Legal liaison officer handling legal aspects of inter-agency coordination and agreements."@en ;
    rdfs:subClassOf cacontology-coord:LiaisonOfficer .

cacontology-coord:LiaisonAssignmentShape a sh:NodeShape ;
    rdfs:label "Liaison Assignment Shape"@en ;
    rdfs:comment "Validates liaison officer assignment consistency."@en ;
    sh:sparql [ sh:message "Primary liaison officers should have full or limited communication authority."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-coord:liaisonRole "primary_liaison" ;
                      cacontology-coord:communicationAuthority ?authority .
                FILTER (?authority NOT IN ("full_authority", "limited_authority"))
            }
        """ ] ;
    sh:targetClass cacontology-coord:LiaisonOfficer .

cacontology-coord:LiaisonAuthorityAlignmentBusinessRule a sh:NodeShape ;
    sh:sparql [ sh:message "Primary liaisons should have full or limited authority aligned with their clearance level"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/investigation-coordination#"^^xsd:anyURI ;
                            sh:prefix "cacontology-coord" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-coord:liaisonRole "primary_liaison" ;
                      cacontology-coord:communicationAuthority ?authority ;
                      cacontology-coord:clearanceLevel ?clearance .
                FILTER (?clearance IN ("secret", "top_secret", "sci_access") && 
                        ?authority IN ("information_only", "advisory_only"))
            }
        """ ] ;
    sh:targetClass cacontology-coord:LiaisonOfficer .

cacontology-coord:LiaisonCommunicationChannel a gufo:SituationType,
        owl:Class ;
    rdfs:label "Liaison Communication Channel"@en ;
    rdfs:comment "Communication channels managed through designated liaison officers for inter-agency coordination."@en ;
    rdfs:subClassOf cacontology-coord:CommunicationProtocol .

cacontology-coord:LiaisonOfficerShape a sh:NodeShape ;
    rdfs:label "Liaison Officer Shape"@en ;
    rdfs:comment "Validation shape for liaison officer instances with gUFO integration."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "primary_liaison" "secondary_liaison" "technical_liaison" "legal_liaison" "intelligence_liaison" "operational_liaison" ) ;
            sh:maxCount 1 ;
            sh:message "Liaison officer must specify liaison role from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-coord:liaisonRole ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 2190.0 ;
            sh:message "Liaison assignment duration must be between 1 and 2190 days (6 years)."@en ;
            sh:minCount 1 ;
            sh:minInclusive 1.0 ;
            sh:path cacontology-coord:assignmentDuration ],
        [ sh:datatype xsd:string ;
            sh:in ( "none" "public_trust" "confidential" "secret" "top_secret" "sci_access" ) ;
            sh:maxCount 1 ;
            sh:message "Clearance level must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-coord:clearanceLevel ],
        [ sh:datatype xsd:string ;
            sh:in ( "full_authority" "limited_authority" "information_only" "coordination_only" "advisory_only" ) ;
            sh:maxCount 1 ;
            sh:message "Liaison officer must specify communication authority from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-coord:communicationAuthority ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Liaison assignment may have start time (gUFO temporal boundary)"@en ;
            sh:path gufo:hasBeginPointInXSDDateTimeStamp ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Liaison assignment may have end time (gUFO temporal boundary)"@en ;
            sh:path gufo:hasEndPointInXSDDateTimeStamp ],
        [ sh:datatype xsd:string ;
            sh:in ( "poor" "adequate" "good" "excellent" "exceptional" ) ;
            sh:maxCount 1 ;
            sh:message "Liaison effectiveness level must be from allowed list (gUFO quality aspect)"@en ;
            sh:path cacontology-coord:hasLiaisonEffectiveness ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Trust level must be between 0.0 and 1.0 (gUFO quality aspect)"@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-coord:hasTrustLevel ],
        [ sh:datatype xsd:string ;
            sh:in ( "slow" "moderate" "good" "rapid" "immediate" ) ;
            sh:maxCount 1 ;
            sh:message "Responsiveness level must be from allowed list (gUFO quality aspect)"@en ;
            sh:path cacontology-coord:hasResponsiveness ] ;
    sh:targetClass cacontology-coord:LiaisonOfficer .

cacontology-coord:LiaisonRoleValidationShape a sh:NodeShape ;
    sh:message "Liaison roles are anti-rigid and cannot be subclasses of rigid Kinds"@en ;
    sh:not [ sh:property [ sh:class gufo:Kind ;
                    sh:path rdfs:subClassOf ] ] ;
    sh:property [ sh:hasValue gufo:Role ;
            sh:minCount 1 ;
            sh:path rdf:type ] ;
    sh:targetClass gufo:Role .

cacontology-coord:LocalCoordination a gufo:EventType,
        owl:Class ;
    rdfs:label "Local Coordination"@en ;
    rdfs:comment "Coordination activities within local jurisdictions and municipal boundaries."@en ;
    rdfs:subClassOf cacontology-coord:InvestigationCoordination .

cacontology-coord:MeasuresPerformanceShape a sh:PropertyShape ;
    sh:class cacontology-coord:CoordinationMetrics ;
    sh:description "Links coordination to performance metrics" ;
    sh:minCount 0 ;
    sh:name "measures performance" ;
    sh:path cacontology-coord:measuresPerformance .

cacontology-coord:MemorandumOfAgreement a gufo:SituationType,
        owl:Class ;
    rdfs:label "Memorandum of Agreement"@en ;
    rdfs:comment "Formal MOA defining specific terms and conditions for inter-agency cooperation."@en ;
    rdfs:subClassOf cacontology-coord:CoordinationAgreement .

cacontology-coord:MemorandumOfUnderstanding a gufo:SituationType,
        owl:Class ;
    rdfs:label "Memorandum of Understanding"@en ;
    rdfs:comment "Formal MOU establishing framework for ongoing cooperation and coordination between agencies."@en ;
    rdfs:subClassOf cacontology-coord:CoordinationAgreement .

cacontology-coord:MetricsObjectValidationShape a sh:NodeShape ;
    sh:message "Coordination metrics must be properly classified as gUFO Objects"@en ;
    sh:property [ sh:hasValue gufo:Object ;
            sh:minCount 1 ;
            sh:path rdf:type ] ;
    sh:targetClass gufo:Object .

cacontology-coord:MissingChildRescueOperationShape a sh:NodeShape ;
    rdfs:label "Missing Child Rescue Operation Shape"@en ;
    rdfs:comment "Validation shape for missing-child rescue operation instances, including explicit located-count outcomes."@en ;
    sh:property [ sh:message "Missing child rescue operation must have an rdfs:label."@en ;
            sh:minCount 1 ;
            sh:path rdfs:label ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:message "Missing child rescue operation must specify childrenLocatedCount as a non-negative integer."@en ;
            sh:minCount 1 ;
            sh:path cacontology-coord:childrenLocatedCount ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:message "casesInProgressCount, when provided, must be a non-negative integer."@en ;
            sh:minCount 0 ;
            sh:path cacontology-coord:casesInProgressCount ] ;
    sh:targetClass cacontology-coord:MissingChildRescueOperation .

cacontology-coord:MultiAgencyCompositionShape a sh:NodeShape ;
    sh:property [ sh:message "Multi-agency coordination must include at least three agency components (gUFO part-whole)"@en ;
            sh:minCount 3 ;
            sh:path [ sh:inversePath gufo:isProperPartOf ] ] ;
    sh:targetClass cacontology-coord:MultiAgencyCoordination .

cacontology-coord:MultiAgencyCoordinationComplexityBusinessRule a sh:NodeShape ;
    sh:sparql [ sh:message "Complex multi-agency coordination must have adequate liaison support and high effectiveness"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/investigation-coordination#"^^xsd:anyURI ;
                            sh:prefix "cacontology-coord" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-coord:hasComplexityLevel ?complexity ;
                      cacontology-coord:participatingAgencies ?agencies .
                FILTER (?complexity IN ("highly_complex", "extremely_complex") && ?agencies > 10)
                FILTER NOT EXISTS {
                    $this cacontology-coord:assignsLiaison ?liaison .
                    ?liaison cacontology-coord:hasLiaisonEffectiveness ?effectiveness .
                    FILTER (?effectiveness IN ("good", "excellent", "exceptional"))
                }
            }
        """ ] ;
    sh:targetClass cacontology-coord:MultiAgencyCoordination .

cacontology-coord:MultiStateCoordination a gufo:EventType,
        owl:Class ;
    rdfs:label "Multi State Coordination"@en ;
    rdfs:comment "Coordination activities spanning multiple states requiring interstate cooperation."@en ;
    rdfs:subClassOf cacontology-coord:InvestigationCoordination .

cacontology-coord:OperationalLiaison a gufo:Role,
        owl:Class ;
    rdfs:label "Operational Liaison"@en ;
    rdfs:comment "Operational liaison officer coordinating operational activities and tactical coordination."@en ;
    rdfs:subClassOf cacontology-coord:LiaisonOfficer .

cacontology-coord:ParallelInvestigation a gufo:EventType,
        owl:Class ;
    rdfs:label "Parallel Investigation"@en ;
    rdfs:comment "Parallel investigation where multiple agencies investigate related aspects independently while maintaining coordination."@en ;
    rdfs:subClassOf cacontology-coord:InvestigationCoordination .

cacontology-coord:PersonnelSharingShape a sh:NodeShape ;
    rdfs:label "Personnel Sharing Shape"@en ;
    rdfs:comment "Validation shape for personnel sharing instances."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 100 ;
            sh:message "Personnel sharing must specify personnel count between 1 and 100."@en ;
            sh:minCount 1 ;
            sh:minInclusive 1 ;
            sh:path cacontology-coord:personnelCount ],
        [ sh:datatype xsd:string ;
            sh:in ( "digital_forensics" "undercover_operations" "surveillance" "analysis" "technical_support" "legal_expertise" ) ;
            sh:maxCount 1 ;
            sh:message "Personnel sharing must specify specialization from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-coord:specialization ],
        [ sh:datatype xsd:string ;
            sh:in ( "none" "public_trust" "confidential" "secret" "top_secret" "sci_access" ) ;
            sh:maxCount 1 ;
            sh:message "Security clearance must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-coord:securityClearance ] ;
    sh:targetClass cacontology-coord:PersonnelSharing .

cacontology-coord:PrimaryLiaison a gufo:Role,
        owl:Class ;
    rdfs:label "Primary Liaison"@en ;
    rdfs:comment "Primary liaison officer with full authority for inter-agency communication and coordination."@en ;
    rdfs:subClassOf cacontology-coord:LiaisonOfficer .

cacontology-coord:RegionalCoordination a gufo:EventType,
        owl:Class ;
    rdfs:label "Regional Coordination"@en ;
    rdfs:comment "Coordination activities spanning regional areas and multiple local jurisdictions."@en ;
    rdfs:subClassOf cacontology-coord:InvestigationCoordination .

cacontology-coord:ResourceSharingDurationShape a sh:NodeShape ;
    rdfs:label "Resource Sharing Duration Shape"@en ;
    rdfs:comment "Validates resource sharing duration reasonableness."@en ;
    sh:sparql [ sh:message "Long-term resource sharing should have formal agreements."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-coord:sharingDuration ?duration .
                FILTER (?duration > 720)
                FILTER NOT EXISTS {
                    ?coordination cacontology-coord:sharesResources $this ;
                                  cacontology-coord:governsAgreement ?agreement .
                }
            }
        """ ] ;
    sh:targetClass cacontology-coord:ResourceSharing .

cacontology-coord:ResourceSharingParticipationShape a sh:NodeShape ;
    sh:property [ sh:message "Resource sharing must involve at least provider and receiver organizations (gUFO participation)"@en ;
            sh:minCount 2 ;
            sh:path [ sh:alternativePath ( cacontology-coord:providesResource cacontology-coord:receivesResource ) ] ] ;
    sh:targetClass cacontology-coord:ResourceSharing .

cacontology-coord:ResourceSharingShape a sh:NodeShape ;
    rdfs:label "Resource Sharing Shape"@en ;
    rdfs:comment "Validation shape for resource sharing instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "personnel" "equipment" "facilities" "technology" "expertise" "funding" "vehicles" "specialized_units" ) ;
            sh:maxCount 1 ;
            sh:message "Resource sharing must specify resource type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-coord:resourceType ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 8760.0 ;
            sh:message "Resource sharing duration must be between 1 and 8760 hours (1 year)."@en ;
            sh:minCount 1 ;
            sh:minInclusive 1.0 ;
            sh:path cacontology-coord:sharingDuration ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Resource sharing must specify if cost sharing is involved."@en ;
            sh:minCount 1 ;
            sh:path cacontology-coord:costSharing ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Resource sharing must specify if reimbursement is required."@en ;
            sh:minCount 1 ;
            sh:path cacontology-coord:reimbursement ],
        [ sh:datatype xsd:string ;
            sh:in ( "immediate" "short_notice" "scheduled" "on_request" "limited" "emergency_only" ) ;
            sh:maxCount 1 ;
            sh:message "Resource sharing must specify availability level from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-coord:availabilityLevel ] ;
    sh:targetClass cacontology-coord:ResourceSharing .

cacontology-coord:ResourceSharingTemporalShape a sh:NodeShape ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Resource sharing may have start time (gUFO temporal boundary)"@en ;
            sh:path gufo:hasBeginPointInXSDDateTimeStamp ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Resource sharing may have end time (gUFO temporal boundary)"@en ;
            sh:path gufo:hasEndPointInXSDDateTimeStamp ] ;
    sh:targetClass cacontology-coord:ResourceSharing .

cacontology-coord:ResourceUtilizationMetrics a gufo:SubKind,
        owl:Class ;
    rdfs:label "Resource Utilization Metrics"@en ;
    rdfs:comment "Metrics measuring efficiency of shared resource utilization and allocation."@en ;
    rdfs:subClassOf cacontology-coord:CoordinationMetrics .

cacontology-coord:ResponseTimeMetrics a gufo:SubKind,
        owl:Class ;
    rdfs:label "Response Time Metrics"@en ;
    rdfs:comment "Metrics measuring response times for coordination requests and information sharing."@en ;
    rdfs:subClassOf cacontology-coord:CoordinationMetrics .

cacontology-coord:SecondaryLiaison a gufo:Role,
        owl:Class ;
    rdfs:label "Secondary Liaison"@en ;
    rdfs:comment "Secondary liaison officer providing backup and specialized coordination support."@en ;
    rdfs:subClassOf cacontology-coord:LiaisonOfficer .

cacontology-coord:SharesInformationShape a sh:PropertyShape ;
    sh:class cacontology-coord:InformationSharing ;
    sh:description "Links coordination to information sharing" ;
    sh:minCount 0 ;
    sh:name "shares information" ;
    sh:path cacontology-coord:sharesInformation .

cacontology-coord:SharesResourcesShape a sh:PropertyShape ;
    sh:class cacontology-coord:ResourceSharing ;
    sh:description "Links coordination to resource sharing" ;
    sh:minCount 0 ;
    sh:name "shares resources" ;
    sh:path cacontology-coord:sharesResources .

cacontology-coord:StateCoordination a gufo:EventType,
        owl:Class ;
    rdfs:label "State Coordination"@en ;
    rdfs:comment "Coordination activities within state boundaries involving state and local agencies."@en ;
    rdfs:subClassOf cacontology-coord:InvestigationCoordination .

cacontology-coord:SuspectInformationSharing a gufo:EventType,
        owl:Class ;
    rdfs:label "Suspect Information Sharing"@en ;
    rdfs:comment "Sharing of suspect-related information including identification, criminal history, and behavioral patterns."@en ;
    rdfs:subClassOf cacontology-coord:InformationSharing .

cacontology-coord:TaskForceCharter a gufo:SituationType,
        owl:Class ;
    rdfs:label "Task Force Charter"@en ;
    rdfs:comment "Charter document establishing task force structure, authority, and operational parameters."@en ;
    rdfs:subClassOf cacontology-coord:CoordinationAgreement .

cacontology-coord:TaskForceCompositionShape a sh:NodeShape ;
    sh:property [ sh:message "Task force must be composed of at least two component agencies (gUFO part-whole)"@en ;
            sh:minCount 2 ;
            sh:path [ sh:inversePath gufo:isProperPartOf ] ] ;
    sh:targetClass cacontology-coord:TaskForceCoordination .

cacontology-coord:TechnicalDataSharing a gufo:EventType,
        owl:Class ;
    rdfs:label "Technical Data Sharing"@en ;
    rdfs:comment "Sharing of technical data including forensic tools, methodologies, and technical analysis results."@en ;
    rdfs:subClassOf cacontology-coord:InformationSharing .

cacontology-coord:TechnicalLiaison a gufo:Role,
        owl:Class ;
    rdfs:label "Technical Liaison"@en ;
    rdfs:comment "Technical liaison officer specializing in technical coordination and information sharing."@en ;
    rdfs:subClassOf cacontology-coord:LiaisonOfficer .

cacontology-coord:TechnologySharing a gufo:EventType,
        owl:Class ;
    rdfs:label "Technology Sharing"@en ;
    rdfs:comment "Sharing of technology resources including software, databases, communication systems, and analytical tools."@en ;
    rdfs:subClassOf cacontology-coord:ResourceSharing .

cacontology-coord:TemporalValidationShape a sh:NodeShape ;
    rdfs:label "Temporal Validation Shape"@en ;
    rdfs:comment "Validates temporal consistency in investigation coordination."@en ;
    sh:sparql [ sh:message "Start time must be before end time when both are specified."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this uco-core:startTime ?start ;
                      uco-core:endTime ?end .
                FILTER (?start >= ?end)
            }
        """ ] ;
    sh:targetClass cacontology-coord:InvestigationCoordination .

cacontology-coord:UsesProtocolShape a sh:PropertyShape ;
    sh:class cacontology-coord:CommunicationProtocol ;
    sh:description "Links coordination to communication protocols" ;
    sh:minCount 1 ;
    sh:name "uses protocol" ;
    sh:path cacontology-coord:usesProtocol .

cacontology-coord:VictimInformationSharing a gufo:EventType,
        owl:Class ;
    rdfs:label "Victim Information Sharing"@en ;
    rdfs:comment "Coordinated sharing of victim information while maintaining privacy and protection protocols."@en ;
    rdfs:subClassOf cacontology-coord:InformationSharing .

cacontology-coord:assignedBy a owl:ObjectProperty ;
    rdfs:label "assigned by"@en ;
    rdfs:comment "Links liaison officer to assigning authority."@en ;
    rdfs:domain cacontology-coord:LiaisonOfficer ;
    rdfs:range uco-identity:Person .

cacontology-coord:authorizedBy a owl:ObjectProperty ;
    rdfs:label "authorized by"@en ;
    rdfs:comment "Links agreement to authorizing officials."@en ;
    rdfs:domain cacontology-coord:CoordinationAgreement ;
    rdfs:range uco-identity:Person .

cacontology-coord:benchmarkedAgainst a owl:ObjectProperty ;
    rdfs:label "benchmarked against"@en ;
    rdfs:comment "Links metrics to benchmark standards."@en ;
    rdfs:domain cacontology-coord:CoordinationMetrics ;
    rdfs:range cacontology-coord:CoordinationMetrics .

cacontology-coord:concernsCase a owl:ObjectProperty ;
    rdfs:label "concerns case"@en ;
    rdfs:comment "Links information sharing to related cases."@en ;
    rdfs:domain cacontology-coord:InformationSharing ;
    rdfs:range case-investigation:Investigation .

cacontology-coord:concernsParticipant a owl:ObjectProperty ;
    rdfs:label "concerns participant"@en ;
    rdfs:comment "Links participation situations to the participating entities - gUFO qualified relation."@en ;
    rdfs:domain gufo:ParticipationSituation ;
    rdfs:range [ owl:unionOf ( uco-identity:Organization uco-identity:Person ) ] .

cacontology-coord:concernsTemporaryPart a owl:ObjectProperty ;
    rdfs:label "concerns temporary part"@en ;
    rdfs:comment "Links part-whole situations to the part entity - gUFO qualified relation."@en ;
    rdfs:domain gufo:TemporaryParthoodSituation ;
    rdfs:range [ owl:unionOf ( uco-identity:Organization case-investigation:Investigation ) ] .

cacontology-coord:concernsTemporaryWhole a owl:ObjectProperty ;
    rdfs:label "concerns temporary whole"@en ;
    rdfs:comment "Links part-whole situations to the whole entity - gUFO qualified relation."@en ;
    rdfs:domain gufo:TemporaryParthoodSituation ;
    rdfs:range [ owl:unionOf ( cacontology-coord:InvestigationCoordination uco-identity:Organization ) ] .

cacontology-coord:connectsAgencies a owl:ObjectProperty ;
    rdfs:label "connects agencies"@en ;
    rdfs:comment "Links communication protocol to connected agencies."@en ;
    rdfs:domain cacontology-coord:CommunicationProtocol ;
    rdfs:range uco-identity:Organization .

cacontology-coord:evaluatesCoordination a owl:ObjectProperty ;
    rdfs:label "evaluates coordination"@en ;
    rdfs:comment "Links metrics to evaluated coordination activities."@en ;
    rdfs:domain cacontology-coord:CoordinationMetrics ;
    rdfs:range cacontology-coord:InvestigationCoordination .

cacontology-coord:facilitatesCommunication a owl:ObjectProperty ;
    rdfs:label "facilitates communication"@en ;
    rdfs:comment "Links protocol to communication facilitation."@en ;
    rdfs:domain cacontology-coord:CommunicationProtocol ;
    rdfs:range cacontology-coord:InvestigationCoordination .

cacontology-coord:hasComponent a owl:ObjectProperty ;
    rdfs:label "has component"@en ;
    rdfs:comment "Links coordination structures to their component agencies - gUFO part-whole relation."@en ;
    rdfs:domain [ owl:unionOf ( cacontology-coord:TaskForceCoordination cacontology-coord:MultiAgencyCoordination cacontology-coord:JointInvestigation ) ] ;
    rdfs:range uco-identity:Organization ;
    owl:inverseOf cacontology-coord:isComponentOf .

cacontology-coord:hasSubInvestigation a owl:ObjectProperty ;
    rdfs:label "has sub investigation"@en ;
    rdfs:comment "Links joint investigations to their component sub-investigations - gUFO part-whole relation."@en ;
    rdfs:domain cacontology-coord:JointInvestigation ;
    rdfs:range case-investigation:Investigation ;
    owl:inverseOf cacontology-coord:isSubInvestigationOf .

cacontology-coord:involvesPersonnel a owl:ObjectProperty ;
    rdfs:label "involves personnel"@en ;
    rdfs:comment "Links personnel sharing to specific personnel."@en ;
    rdfs:domain cacontology-coord:PersonnelSharing ;
    rdfs:range uco-identity:Person .

cacontology-coord:liaisonWith a owl:ObjectProperty ;
    rdfs:label "liaison with"@en ;
    rdfs:comment "Links liaison officer to partner agencies."@en ;
    rdfs:domain cacontology-coord:LiaisonOfficer ;
    rdfs:range uco-identity:Organization .

cacontology-coord:participatesIn a owl:ObjectProperty ;
    rdfs:label "participates in"@en ;
    rdfs:comment "Links an organization or person to coordination activities they participate in - gUFO participation relation."@en ;
    rdfs:domain [ owl:unionOf ( uco-identity:Organization uco-identity:Person ) ] ;
    rdfs:range cacontology-coord:InvestigationCoordination ;
    rdfs:subPropertyOf gufo:participatedIn .

cacontology-coord:participatesInSharing a owl:ObjectProperty ;
    rdfs:label "participates in sharing"@en ;
    rdfs:comment "Links an organization to information or resource sharing activities - gUFO participation relation."@en ;
    rdfs:domain uco-identity:Organization ;
    rdfs:range [ owl:unionOf ( cacontology-coord:InformationSharing cacontology-coord:ResourceSharing ) ] ;
    rdfs:subPropertyOf gufo:participatedIn .

cacontology-coord:representsAgency a owl:ObjectProperty ;
    rdfs:label "represents agency"@en ;
    rdfs:comment "Links liaison officer to represented agency."@en ;
    rdfs:domain cacontology-coord:LiaisonOfficer ;
    rdfs:range uco-identity:Organization .

cacontology-coord:signedByAgency a owl:ObjectProperty ;
    rdfs:label "signed by agency"@en ;
    rdfs:comment "Links agreement to signatory agencies."@en ;
    rdfs:domain cacontology-coord:CoordinationAgreement ;
    rdfs:range uco-identity:Organization .

cacontology-coord:standsInQualifiedParthood a owl:ObjectProperty ;
    rdfs:label "stands in qualified parthood"@en ;
    rdfs:comment "Links entities to qualified part-whole situations in coordination structures - gUFO qualified relation."@en ;
    rdfs:domain [ owl:unionOf ( uco-identity:Organization case-investigation:Investigation ) ] ;
    rdfs:range gufo:TemporaryParthoodSituation .

cacontology-coord:standsInQualifiedParticipation a owl:ObjectProperty ;
    rdfs:label "stands in qualified participation"@en ;
    rdfs:comment "Links entities to qualified participation situations in coordination - gUFO qualified relation."@en ;
    rdfs:domain [ owl:unionOf ( uco-identity:Organization uco-identity:Person ) ] ;
    rdfs:range gufo:ParticipationSituation .

cacontology-corruption:CorruptArmyReservist a gufo:Role,
        owl:Class ;
    rdfs:label "Corrupt Army Reservist"@en ;
    rdfs:comment "Army reservist engaged in child exploitation activities while in military uniform."@en ;
    rdfs:subClassOf cacontology-corruption:CorruptLawEnforcementOfficer .

cacontology-corruption:CorruptMetropolitanPoliceDepartmentOfficer a gufo:Role,
        owl:Class ;
    rdfs:label "Corrupt Metropolitan Police Department Officer"@en ;
    rdfs:comment "Former or current metropolitan police department officer engaged in child trafficking."@en ;
    rdfs:subClassOf cacontology-corruption:CorruptLawEnforcementOfficer .

cacontology-corruption:CorruptStateTrooper a gufo:Role,
        owl:Class ;
    rdfs:label "Corrupt State Trooper"@en ;
    rdfs:comment "State trooper engaged in child exploitation activities while in uniform."@en ;
    rdfs:subClassOf cacontology-corruption:CorruptLawEnforcementOfficer .

cacontology-corruption:DatabaseAccessAbuse a gufo:EventType,
        owl:Class ;
    rdfs:label "Database Access Abuse"@en ;
    rdfs:comment "Misuse of law enforcement database access for personal exploitation activities."@en ;
    rdfs:subClassOf cacontology-corruption:AccessPrivilegeAbuse .

cacontology-corruption:FormerLawEnforcementOfficer a gufo:Role,
        owl:Class ;
    rdfs:label "Former Law Enforcement Officer"@en ;
    rdfs:comment "Former law enforcement officer using previous position and contacts for exploitation."@en ;
    rdfs:subClassOf cacontology-corruption:CorruptLawEnforcementOfficer .

cacontology-corruption:InternalAffairsInvestigation a gufo:EventType,
        owl:Class ;
    rdfs:label "Internal Affairs Investigation"@en ;
    rdfs:comment "Investigation by internal affairs department into officer corruption."@en ;
    rdfs:subClassOf cacontology-corruption:InsiderThreatDetection .

cacontology-corruption:MilitaryUniformProduction a gufo:EventType,
        owl:Class ;
    rdfs:label "Military Uniform Production"@en ;
    rdfs:comment "Production of CSAM while wearing military uniform."@en ;
    rdfs:subClassOf cacontology-corruption:UniformEnhancedProduction .

cacontology-corruption:OfficerChildTrafficking a gufo:EventType,
        owl:Class ;
    rdfs:label "Officer Child Trafficking"@en ;
    rdfs:comment "Child trafficking conducted by law enforcement officers using their position and authority."@en ;
    rdfs:subClassOf cacontology-corruption:PositionOfAuthorityAbuse .

cacontology-corruption:OfficialVehicleExploitation a gufo:EventType,
        owl:Class ;
    rdfs:label "Official Vehicle Exploitation"@en ;
    rdfs:comment "Use of official law enforcement vehicles in exploitation activities."@en ;
    rdfs:subClassOf cacontology-corruption:PositionOfAuthorityAbuse .

cacontology-corruption:PoliceUniformProduction a gufo:EventType,
        owl:Class ;
    rdfs:label "Police Uniform Production"@en ;
    rdfs:comment "Production of CSAM while wearing police uniform."@en ;
    rdfs:subClassOf cacontology-corruption:UniformEnhancedProduction .

cacontology-corruption:PublicIntegrityInvestigation a gufo:EventType,
        owl:Class ;
    rdfs:label "Public Integrity Investigation"@en ;
    rdfs:comment "Investigation into public integrity violations by law enforcement personnel."@en ;
    rdfs:subClassOf cacontology-corruption:ExternalOversightInvestigation .

cacontology-corruption:abusesAccess a owl:ObjectProperty ;
    rdfs:label "abuses access"@en ;
    rdfs:comment "Links corruption to system or information access being abused."@en ;
    rdfs:domain cacontology-corruption:AccessPrivilegeAbuse ;
    rdfs:range uco-observable:ObservableObject .

cacontology-corruption:accessLevel a owl:DatatypeProperty ;
    rdfs:label "access level"@en ;
    rdfs:comment "Level of system access held by corrupt officer (basic, elevated, administrative)."@en ;
    rdfs:domain cacontology-corruption:AccessPrivilegeAbuse ;
    rdfs:range xsd:string .

cacontology-corruption:badgeVisible a owl:DatatypeProperty ;
    rdfs:label "badge visible"@en ;
    rdfs:comment "Whether law enforcement badge was visible during exploitation."@en ;
    rdfs:domain cacontology-corruption:BadgeDisplayedProduction ;
    rdfs:range xsd:boolean .

cacontology-corruption:corruptsEvidence a owl:ObjectProperty ;
    rdfs:label "corrupts evidence"@en ;
    rdfs:comment "Links corruption to evidence that was manipulated or destroyed."@en ;
    rdfs:domain cacontology-corruption:EvidenceManipulation ;
    rdfs:range uco-observable:ObservableObject .

cacontology-corruption:detectedBy a owl:ObjectProperty ;
    rdfs:label "detected by"@en ;
    rdfs:comment "Links corruption to detection method or source."@en ;
    rdfs:domain cacontology-corruption:LawEnforcementCorruption ;
    rdfs:range cacontology-corruption:InsiderThreatDetection .

cacontology-corruption:displaysAuthority a owl:ObjectProperty ;
    rdfs:label "displays authority"@en ;
    rdfs:comment "Links exploitation to authority symbol displayed."@en ;
    rdfs:domain cacontology-corruption:AuthoritySymbolExploitation ;
    rdfs:range uco-observable:ObservableObject .

cacontology-corruption:employsOfficer a owl:ObjectProperty ;
    rdfs:label "employs officer"@en ;
    rdfs:comment "Links law enforcement agency to corrupt officer."@en ;
    rdfs:domain uco-identity:Organization ;
    rdfs:range cacontology-corruption:CorruptLawEnforcementOfficer .

cacontology-corruption:exploitsPosition a owl:ObjectProperty ;
    rdfs:label "exploits position"@en ;
    rdfs:comment "Links corruption to position being exploited."@en ;
    rdfs:domain cacontology-corruption:LawEnforcementCorruption ;
    rdfs:range uco-role:Role .

cacontology-corruption:leaksInformation a owl:ObjectProperty ;
    rdfs:label "leaks information"@en ;
    rdfs:comment "Links corruption to information that was leaked."@en ;
    rdfs:domain cacontology-corruption:InformationLeakage ;
    rdfs:range uco-observable:ObservableObject .

cacontology-corruption:reportedBy a owl:ObjectProperty ;
    rdfs:label "reported by"@en ;
    rdfs:comment "Links corruption to person or entity that reported it."@en ;
    rdfs:domain cacontology-corruption:WhistleblowerReport ;
    rdfs:range uco-identity:Person .

cacontology-corruption:standsInQualifiedCorruption a owl:ObjectProperty ;
    rdfs:label "stands in qualified corruption"@en ;
    rdfs:comment "Links entities to qualified corruption situations - gUFO qualified relation."@en ;
    rdfs:domain [ owl:unionOf ( cacontology-corruption:CorruptLawEnforcementOfficer uco-identity:Organization ) ] ;
    rdfs:range gufo:ParticipationSituation .

cacontology-corruption:wearsUniform a owl:ObjectProperty ;
    rdfs:label "wears uniform"@en ;
    rdfs:comment "Links exploitation to uniform worn during activity."@en ;
    rdfs:domain cacontology-corruption:UniformBasedExploitation ;
    rdfs:range uco-observable:ObservableObject .

cacontology-corruption-shapes:AuthorityEnhancementRule a sh:NodeShape ;
    rdfs:label "Authority Enhancement Rule"@en ;
    rdfs:comment "Maximum authority enhancement should correlate with high corruption impact."@en ;
    sh:sparql [ sh:message "Maximum authority enhancement should have high corruption impact"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/law-enforcement-corruption#"^^xsd:anyURI ;
                            sh:prefix "cacontology-corruption" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-corruption:hasAuthorityEnhancementLevel "maximum" .
                OPTIONAL {
                    $this cacontology-corruption:hasCorruptionImpact ?impact .
                    FILTER (?impact IN ("high", "severe", "devastating"))
                }
                FILTER (!BOUND(?impact))
            }
        """ ;
            sh:severity sh:Warning ] ;
    sh:targetClass cacontology-corruption:UniformBasedExploitation .

cacontology-corruption-shapes:AuthoritySymbolExploitationShape a sh:NodeShape ;
    rdfs:label "Authority Symbol Exploitation Shape"@en ;
    rdfs:comment "Enhanced shape for authority symbol exploitation with symbol visibility assessment."@en ;
    sh:property [ sh:hasValue gufo:EventType ;
            sh:message "Must be classified as gUFO EventType"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ;
            sh:severity sh:Violation ],
        [ sh:datatype xsd:string ;
            sh:in ( "hidden" "subtle" "visible" "prominent" "conspicuous" ) ;
            sh:maxCount 1 ;
            sh:message "Symbol visibility level should be assessed"@en ;
            sh:path cacontology-corruption:hasSymbolVisibility ;
            sh:severity sh:Warning ] ;
    sh:targetClass cacontology-corruption:AuthoritySymbolExploitation .

cacontology-corruption-shapes:CorruptLawEnforcementOfficerShape a sh:NodeShape ;
    rdfs:label "Corrupt Law Enforcement Officer Shape"@en ;
    rdfs:comment "Enhanced shape for corrupt officers with corruption dependency and trust betrayal assessments."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:message "Department affiliation should be specified"@en ;
            sh:minLength 1 ;
            sh:path cacontology-corruption:departmentAffiliation ;
            sh:severity sh:Warning ],
        [ sh:hasValue gufo:Role ;
            sh:message "Must be classified as gUFO Role"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ;
            sh:severity sh:Violation ],
        [ sh:datatype xsd:string ;
            sh:in ( "low" "moderate" "high" "complete" "systemic" ) ;
            sh:maxCount 1 ;
            sh:message "Corruption dependency level should be assessed"@en ;
            sh:path cacontology-corruption:hasCorruptionDependency ;
            sh:severity sh:Warning ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Position exploitation level should be measured"@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-corruption:hasPositionExploitationLevel ;
            sh:severity sh:Info ],
        [ sh:datatype xsd:string ;
            sh:in ( "minimal" "moderate" "significant" "severe" "complete" ) ;
            sh:maxCount 1 ;
            sh:message "Trust betrayal level should be assessed"@en ;
            sh:path cacontology-corruption:hasTrustBetrayalLevel ;
            sh:severity sh:Warning ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxInclusive 50 ;
            sh:message "Years of service should be reasonable"@en ;
            sh:minInclusive 0 ;
            sh:path cacontology-corruption:yearsOfService ;
            sh:severity sh:Warning ],
        [ sh:datatype xsd:string ;
            sh:in ( "patrol" "detective" "supervisor" "command" "executive" ) ;
            sh:maxCount 1 ;
            sh:message "Authority level should be specified"@en ;
            sh:path cacontology-corruption:authorityLevel ;
            sh:severity sh:Info ],
        [ sh:datatype xsd:string ;
            sh:in ( "active" "reserve" "retired" "terminated" "suspended" ) ;
            sh:maxCount 1 ;
            sh:message "Employment status should be specified"@en ;
            sh:path cacontology-corruption:employmentStatus ;
            sh:severity sh:Warning ] ;
    sh:targetClass cacontology-corruption:CorruptLawEnforcementOfficer .

cacontology-corruption-shapes:CorruptOfficerRoleValidationShape a sh:NodeShape ;
    rdfs:label "Corrupt Officer Role Validation Shape"@en ;
    rdfs:comment "Validates that corrupt officer classes are properly classified as anti-rigid gUFO Roles."@en ;
    sh:property [ sh:hasValue gufo:Role ;
            sh:maxCount 1 ;
            sh:message "Corrupt officer types must be classified as gUFO Role (anti-rigid)"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ;
            sh:severity sh:Violation ],
        [ sh:message "Corrupt officer roles must extend UCO Role"@en ;
            sh:path rdfs:subClassOf ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class uco-role:Role ] ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-corruption:CorruptLawEnforcementOfficer .

cacontology-corruption-shapes:CorruptionDataQualityShape a sh:NodeShape ;
    rdfs:label "Corruption Data Quality Shape"@en ;
    rdfs:comment "Comprehensive gUFO quality validation for law enforcement corruption data."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "poor" "fair" "good" "excellent" "validated" ) ;
            sh:maxCount 1 ;
            sh:message "Data quality level should be assessed"@en ;
            sh:path cacontology-corruption:hasDataQuality ;
            sh:severity sh:Warning ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Data completeness should be measured (0.0-1.0)"@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-corruption:hasDataCompleteness ;
            sh:severity sh:Info ],
        [ sh:datatype xsd:string ;
            sh:in ( "none" "basic" "standard" "comprehensive" "full_verification" ) ;
            sh:maxCount 1 ;
            sh:message "Validation thoroughness should be specified"@en ;
            sh:path cacontology-corruption:hasValidationLevel ;
            sh:severity sh:Info ] ;
    sh:sparql [ sh:message "Excellent data quality should have high completeness and comprehensive validation"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/law-enforcement-corruption#"^^xsd:anyURI ;
                            sh:prefix "cacontology-corruption" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-corruption:hasDataQuality "excellent" .
                OPTIONAL {
                    $this cacontology-corruption:hasDataCompleteness ?completeness .
                    FILTER (?completeness >= 0.8)
                }
                OPTIONAL {
                    $this cacontology-corruption:hasValidationLevel ?validation .
                    FILTER (?validation IN ("comprehensive", "full_verification"))
                }
                FILTER (!BOUND(?completeness) || !BOUND(?validation))
            }
        """ ;
            sh:severity sh:Warning ] ;
    sh:targetClass cacontology-corruption:LawEnforcementCorruption .

cacontology-corruption-shapes:CorruptionEventTypeValidationShape a sh:NodeShape ;
    rdfs:label "Corruption Event Type Validation Shape"@en ;
    rdfs:comment "Validates that corruption activities are properly classified as gUFO Events and EventTypes."@en ;
    sh:property [ sh:hasValue gufo:EventType ;
            sh:maxCount 1 ;
            sh:message "Corruption activities must be classified as gUFO EventType"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ;
            sh:severity sh:Violation ],
        [ sh:message "Corruption activities must extend gUFO Event"@en ;
            sh:path rdfs:subClassOf ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class gufo:Event ] ;
            sh:severity sh:Violation ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Corruption events should have temporal boundaries"@en ;
            sh:path gufo:hasBeginPointInXSDDateTimeStamp ;
            sh:severity sh:Warning ] ;
    sh:targetClass cacontology-corruption:LawEnforcementCorruption .

cacontology-corruption-shapes:CorruptionParticipationShape a sh:NodeShape ;
    rdfs:label "Corruption Participation Shape"@en ;
    rdfs:comment "Validates participation constraints for corruption activities following gUFO participation patterns."@en ;
    sh:property [ sh:class cacontology-corruption:CorruptLawEnforcementOfficer ;
            sh:message "Corruption must involve at least one corrupt officer"@en ;
            sh:minCount 1 ;
            sh:path [ sh:inversePath cacontology-corruption:participatesIn ] ;
            sh:severity sh:Violation ],
        [ sh:class cacontology-corruption:InsiderThreatDetection ;
            sh:maxCount 1 ;
            sh:message "Corruption should be linked to detection activity"@en ;
            sh:path cacontology-corruption:isDetectedBy ;
            sh:severity sh:Info ] ;
    sh:targetClass cacontology-corruption:LawEnforcementCorruption .

cacontology-corruption-shapes:CorruptionTemporalShape a sh:NodeShape ;
    rdfs:label "Corruption Temporal Shape"@en ;
    rdfs:comment "Validates temporal constraints for corruption events according to gUFO framework."@en ;
    sh:property [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Corruption events should specify start time"@en ;
            sh:path gufo:hasBeginPointInXSDDateTimeStamp ;
            sh:severity sh:Info ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Corruption events should specify end time"@en ;
            sh:path gufo:hasEndPointInXSDDateTimeStamp ;
            sh:severity sh:Info ] ;
    sh:sparql [ sh:message "Corruption event end time must be after start time"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "http://purl.org/nemo/gufo#"^^xsd:anyURI ;
                            sh:prefix "gufo" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this gufo:hasBeginPointInXSDDateTimeStamp ?start .
                $this gufo:hasEndPointInXSDDateTimeStamp ?end .
                FILTER (?end <= ?start)
            }
        """ ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-corruption:LawEnforcementCorruption .

cacontology-corruption-shapes:DetectionActivityTypeValidationShape a sh:NodeShape ;
    rdfs:label "Detection Activity Type Validation Shape"@en ;
    rdfs:comment "Validates that detection and investigation activities are properly classified as gUFO EventTypes."@en ;
    sh:property [ sh:hasValue gufo:EventType ;
            sh:maxCount 1 ;
            sh:message "Detection activities must be classified as gUFO EventType"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ;
            sh:severity sh:Violation ],
        [ sh:message "Detection activities must extend gUFO Event"@en ;
            sh:path rdfs:subClassOf ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class gufo:Event ] ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-corruption:InsiderThreatDetection .

cacontology-corruption-shapes:DetectionDifficultyRule a sh:NodeShape ;
    rdfs:label "Detection Difficulty Rule"@en ;
    rdfs:comment "Very difficult detection should require comprehensive investigation complexity."@en ;
    sh:sparql [ sh:message "Very difficult detection should have comprehensive investigation"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/law-enforcement-corruption#"^^xsd:anyURI ;
                            sh:prefix "cacontology-corruption" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-corruption:hasDetectionDifficulty ?difficulty .
                FILTER (?difficulty IN ("very_difficult", "nearly_impossible"))
                OPTIONAL {
                    $this cacontology-corruption:isDetectedBy ?detection .
                    ?detection cacontology-corruption:hasInvestigationComplexity ?complexity .
                    FILTER (?complexity IN ("highly_complex", "extremely_complex"))
                }
                FILTER (!BOUND(?complexity))
            }
        """ ;
            sh:severity sh:Info ] ;
    sh:targetClass cacontology-corruption:InsiderThreat .

cacontology-corruption-shapes:DetectionParticipationShape a sh:NodeShape ;
    rdfs:label "Detection Participation Shape"@en ;
    rdfs:comment "Validates participation constraints for detection activities."@en ;
    sh:property [ sh:class uco-identity:Organization ;
            sh:message "Detection should involve investigating organization"@en ;
            sh:minCount 1 ;
            sh:path [ sh:inversePath cacontology-corruption:investigatedBy ] ;
            sh:severity sh:Warning ] ;
    sh:targetClass cacontology-corruption:InsiderThreatDetection .

cacontology-corruption-shapes:DetectionTemporalShape a sh:NodeShape ;
    rdfs:label "Detection Temporal Shape"@en ;
    rdfs:comment "Validates temporal constraints for corruption detection activities."@en ;
    sh:property [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Detection activities should specify start time"@en ;
            sh:path gufo:hasBeginPointInXSDDateTimeStamp ;
            sh:severity sh:Info ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Detection activities should specify end time"@en ;
            sh:path gufo:hasEndPointInXSDDateTimeStamp ;
            sh:severity sh:Info ] ;
    sh:targetClass cacontology-corruption:InsiderThreatDetection .

cacontology-corruption-shapes:EvidenceIntegrityRule a sh:NodeShape ;
    rdfs:label "Evidence Integrity Rule"@en ;
    rdfs:comment "Low evidence integrity should be flagged for validation concerns."@en ;
    sh:sparql [ sh:message "Low evidence integrity requires enhanced validation"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/law-enforcement-corruption#"^^xsd:anyURI ;
                            sh:prefix "cacontology-corruption" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-corruption:hasEvidenceIntegrity ?integrity .
                FILTER (?integrity < 0.5)
                OPTIONAL {
                    $this cacontology-corruption:hasValidationLevel ?validation .
                    FILTER (?validation IN ("comprehensive", "full_verification"))
                }
                FILTER (!BOUND(?validation))
            }
        """ ;
            sh:severity sh:Warning ] ;
    sh:targetClass cacontology-corruption:InsiderThreatDetection .

cacontology-corruption-shapes:HighSeverityCorruptionRule a sh:NodeShape ;
    rdfs:label "High Severity Corruption Rule"@en ;
    rdfs:comment "High severity corruption should have comprehensive detection efforts."@en ;
    sh:sparql [ sh:message "High severity corruption should have comprehensive investigation"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/law-enforcement-corruption#"^^xsd:anyURI ;
                            sh:prefix "cacontology-corruption" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-corruption:hasCorruptionSeverity ?severity .
                FILTER (?severity IN ("severe", "extreme"))
                OPTIONAL {
                    $this cacontology-corruption:isDetectedBy ?detection .
                    ?detection cacontology-corruption:hasInvestigationComplexity ?complexity .
                    FILTER (?complexity IN ("complex", "highly_complex", "extremely_complex"))
                }
                FILTER (!BOUND(?complexity))
            }
        """ ;
            sh:severity sh:Warning ] ;
    sh:targetClass cacontology-corruption:LawEnforcementCorruption .

cacontology-corruption-shapes:InsiderThreatDetectionShape a sh:NodeShape ;
    rdfs:label "Insider Threat Detection Shape"@en ;
    rdfs:comment "Enhanced shape for insider threat detection with complexity and evidence integrity assessments."@en ;
    sh:property [ sh:hasValue gufo:EventType ;
            sh:message "Must be classified as gUFO EventType"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ;
            sh:severity sh:Violation ],
        [ sh:datatype xsd:string ;
            sh:in ( "simple" "moderate" "complex" "highly_complex" "extremely_complex" ) ;
            sh:maxCount 1 ;
            sh:message "Investigation complexity should be assessed"@en ;
            sh:path cacontology-corruption:hasInvestigationComplexity ;
            sh:severity sh:Warning ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Evidence integrity should be measured"@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-corruption:hasEvidenceIntegrity ;
            sh:severity sh:Info ] ;
    sh:targetClass cacontology-corruption:InsiderThreatDetection .

cacontology-corruption-shapes:InsiderThreatShape a sh:NodeShape ;
    rdfs:label "Insider Threat Shape"@en ;
    rdfs:comment "Enhanced shape for insider threats with detection difficulty assessment."@en ;
    sh:property [ sh:hasValue gufo:EventType ;
            sh:message "Must be classified as gUFO EventType"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ;
            sh:severity sh:Violation ],
        [ sh:datatype xsd:string ;
            sh:in ( "easy" "moderate" "difficult" "very_difficult" "nearly_impossible" ) ;
            sh:maxCount 1 ;
            sh:message "Detection difficulty should be assessed"@en ;
            sh:path cacontology-corruption:hasDetectionDifficulty ;
            sh:severity sh:Warning ] ;
    sh:targetClass cacontology-corruption:InsiderThreat .

cacontology-corruption-shapes:LawEnforcementCorruptionShape a sh:NodeShape ;
    rdfs:label "Law Enforcement Corruption Shape"@en ;
    rdfs:comment "Enhanced shape for law enforcement corruption with gUFO quality aspects."@en ;
    sh:property [ sh:hasValue gufo:EventType ;
            sh:message "Must be classified as gUFO EventType"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ;
            sh:severity sh:Violation ],
        [ sh:datatype xsd:string ;
            sh:in ( "minor" "moderate" "serious" "severe" "extreme" ) ;
            sh:maxCount 1 ;
            sh:message "Corruption severity should be specified using standard levels"@en ;
            sh:path cacontology-corruption:hasCorruptionSeverity ;
            sh:severity sh:Warning ],
        [ sh:datatype xsd:string ;
            sh:in ( "low" "moderate" "high" "severe" "devastating" ) ;
            sh:maxCount 1 ;
            sh:message "Corruption impact should be assessed"@en ;
            sh:path cacontology-corruption:hasCorruptionImpact ;
            sh:severity sh:Warning ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Victim vulnerability should be measured (0.0-1.0)"@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-corruption:hasVictimVulnerability ;
            sh:severity sh:Info ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:message "Victim count must be at least 1"@en ;
            sh:minInclusive 1 ;
            sh:path cacontology-corruption:victimCount ;
            sh:severity sh:Warning ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:message "Corruption duration should be specified"@en ;
            sh:minInclusive 0 ;
            sh:path cacontology-corruption:corruptionDuration ;
            sh:severity sh:Info ],
        [ sh:datatype xsd:string ;
            sh:in ( "poor" "fair" "good" "excellent" "validated" ) ;
            sh:maxCount 1 ;
            sh:message "Data quality should be assessed"@en ;
            sh:path cacontology-corruption:hasDataQuality ;
            sh:severity sh:Info ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Data completeness should be measured"@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-corruption:hasDataCompleteness ;
            sh:severity sh:Info ],
        [ sh:datatype xsd:string ;
            sh:in ( "none" "basic" "standard" "comprehensive" "full_verification" ) ;
            sh:maxCount 1 ;
            sh:message "Validation level should be specified"@en ;
            sh:path cacontology-corruption:hasValidationLevel ;
            sh:severity sh:Info ] ;
    sh:targetClass cacontology-corruption:LawEnforcementCorruption .

cacontology-corruption-shapes:OfficerCareerTemporalShape a sh:NodeShape ;
    rdfs:label "Officer Career Temporal Shape"@en ;
    rdfs:comment "Validates temporal aspects of officer corruption career."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxInclusive 50 ;
            sh:message "Years of service should be reasonable (0-50 years)"@en ;
            sh:minInclusive 0 ;
            sh:path cacontology-corruption:yearsOfService ;
            sh:severity sh:Warning ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:message "Corruption duration should be specified in months"@en ;
            sh:minInclusive 0 ;
            sh:path cacontology-corruption:corruptionDuration ;
            sh:severity sh:Info ] ;
    sh:targetClass cacontology-corruption:CorruptLawEnforcementOfficer .

cacontology-corruption-shapes:OfficerParticipationShape a sh:NodeShape ;
    rdfs:label "Officer Participation Shape"@en ;
    rdfs:comment "Validates participation of officers in corruption activities."@en ;
    sh:property [ sh:class cacontology-corruption:LawEnforcementCorruption ;
            sh:message "Corrupt officer must participate in at least one corruption activity"@en ;
            sh:minCount 1 ;
            sh:path cacontology-corruption:participatesIn ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-corruption:CorruptLawEnforcementOfficer .

cacontology-corruption-shapes:PositionOfAuthorityAbuseShape a sh:NodeShape ;
    rdfs:label "Position of Authority Abuse Shape"@en ;
    rdfs:comment "Enhanced shape for position of authority abuse with abuse degree and intimidation assessments."@en ;
    sh:property [ sh:hasValue gufo:EventType ;
            sh:message "Must be classified as gUFO EventType"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ;
            sh:severity sh:Violation ],
        [ sh:datatype xsd:string ;
            sh:in ( "minimal" "moderate" "extensive" "systematic" "comprehensive" ) ;
            sh:maxCount 1 ;
            sh:message "Authority abuse degree should be assessed"@en ;
            sh:path cacontology-corruption:hasAuthorityAbuseDegree ;
            sh:severity sh:Warning ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Intimidation factor should be measured"@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-corruption:hasIntimidationFactor ;
            sh:severity sh:Info ] ;
    sh:targetClass cacontology-corruption:PositionOfAuthorityAbuse .

cacontology-corruption-shapes:QualifiedCorruptionParticipationShape a sh:NodeShape ;
    rdfs:label "Qualified Corruption Participation Shape"@en ;
    rdfs:comment "Validates qualified participation relationships in corruption according to gUFO patterns."@en ;
    sh:property [ sh:class cacontology-corruption:CorruptLawEnforcementOfficer ;
            sh:maxCount 1 ;
            sh:message "Participation situation must concern exactly one corrupt officer"@en ;
            sh:minCount 1 ;
            sh:path cacontology-corruption:concernsCorruptOfficer ;
            sh:severity sh:Violation ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Participation situation should have temporal boundaries"@en ;
            sh:path gufo:hasBeginPointInXSDDateTimeStamp ;
            sh:severity sh:Info ] ;
    sh:targetClass gufo:ParticipationSituation .

cacontology-corruption-shapes:TrustBetrayalRule a sh:NodeShape ;
    rdfs:label "Trust Betrayal Rule"@en ;
    rdfs:comment "Complete trust betrayal should correlate with high position exploitation."@en ;
    sh:sparql [ sh:message "Complete trust betrayal should have high position exploitation"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/law-enforcement-corruption#"^^xsd:anyURI ;
                            sh:prefix "cacontology-corruption" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-corruption:hasTrustBetrayalLevel "complete" .
                OPTIONAL {
                    $this cacontology-corruption:hasPositionExploitationLevel ?exploitation .
                    FILTER (?exploitation >= 0.7)
                }
                FILTER (!BOUND(?exploitation))
            }
        """ ;
            sh:severity sh:Warning ] ;
    sh:targetClass cacontology-corruption:CorruptLawEnforcementOfficer .

cacontology-corruption-shapes:UniformBasedExploitationShape a sh:NodeShape ;
    rdfs:label "Uniform Based Exploitation Shape"@en ;
    rdfs:comment "Enhanced shape for uniform-based exploitation with authority enhancement quality aspects."@en ;
    sh:property [ sh:hasValue gufo:EventType ;
            sh:message "Must be classified as gUFO EventType"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ;
            sh:severity sh:Violation ],
        [ sh:datatype xsd:string ;
            sh:in ( "minimal" "moderate" "significant" "substantial" "maximum" ) ;
            sh:maxCount 1 ;
            sh:message "Authority enhancement level should be assessed"@en ;
            sh:path cacontology-corruption:hasAuthorityEnhancementLevel ;
            sh:severity sh:Warning ],
        [ sh:datatype xsd:string ;
            sh:in ( "police" "military" "state_trooper" "sheriff" "federal" ) ;
            sh:maxCount 1 ;
            sh:message "Uniform type should be specified"@en ;
            sh:path cacontology-corruption:uniformType ;
            sh:severity sh:Warning ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Whether uniform was displayed should be recorded"@en ;
            sh:path cacontology-corruption:uniformDisplayed ;
            sh:severity sh:Info ] ;
    sh:targetClass cacontology-corruption:UniformBasedExploitation .

cacontology-legal:AmendmentProcess a gufo:EventType,
        owl:Class ;
    rdfs:label "Amendment Process"@en ;
    rdfs:comment "Process of amending legislation."@en ;
    rdfs:subClassOf cacontology-legal:LegislativeProcess ;
    cacontology-legal:isCountrySpecific false .

cacontology-legal:AnnualReview a gufo:EventType,
        owl:Class ;
    rdfs:label "Annual Review"@en ;
    rdfs:comment "Annual compliance review process."@en ;
    rdfs:subClassOf cacontology-legal:ComplianceProcess ;
    cacontology-legal:isCountrySpecific false .

cacontology-legal:BillSponsor a owl:Class ;
    rdfs:label "Bill Sponsor"@en ;
    rdfs:comment "Legislator who introduces or sponsors legislation."@en ;
    rdfs:subClassOf cacontology-legal:LegislativeRole ;
    cacontology-legal:isCountrySpecific false .

cacontology-legal:CSAMCriminalization a gufo:Kind,
        owl:Class ;
    rdfs:label "CSAM Criminalization"@en ;
    rdfs:comment "Legislation criminalizing child sexual abuse material."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-legal:CertificationProcess a gufo:EventType,
        owl:Class ;
    rdfs:label "Certification Process"@en ;
    rdfs:comment "Process for obtaining compliance certification."@en ;
    rdfs:subClassOf cacontology-legal:ComplianceProcess ;
    cacontology-legal:isCountrySpecific false .

cacontology-legal:ChildTraffickingLaw a gufo:Kind,
        owl:Class ;
    rdfs:label "Child Trafficking Law"@en ;
    rdfs:comment "Legislation addressing child trafficking crimes."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-legal:CommitteeMember a owl:Class ;
    rdfs:label "Committee Member"@en ;
    rdfs:comment "Member of a legislative committee."@en ;
    rdfs:subClassOf cacontology-legal:LegislativeRole ;
    cacontology-legal:isCountrySpecific false .

cacontology-legal:ComplianceBenchmark a gufo:Kind,
        owl:Class ;
    rdfs:label "Compliance Benchmark"@en ;
    rdfs:comment "Benchmark for measuring legal compliance."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-legal:GrantCompliance a gufo:EventType,
        owl:Class ;
    rdfs:label "Grant Compliance"@en ;
    rdfs:comment "Compliance with grant requirements."@en ;
    rdfs:subClassOf cacontology-legal:ComplianceProcess ;
    cacontology-legal:isCountrySpecific false .

cacontology-legal:GrassrootsAdvocacy a gufo:EventType,
        owl:Class ;
    rdfs:label "Grassroots Advocacy"@en ;
    rdfs:comment "Mobilizing public support for advocacy goals."@en ;
    rdfs:subClassOf cacontology-legal:AdvocacyProcess ;
    cacontology-legal:isCountrySpecific false .

cacontology-legal:HarmonizationInitiative a owl:Class ;
    rdfs:label "Harmonization Initiative"@en ;
    rdfs:comment "Organized effort to harmonize laws across jurisdictions."@en ;
    rdfs:subClassOf gufo:Situation ;
    cacontology-legal:isCountrySpecific false .

cacontology-legal:ImpactAssessment a gufo:EventType,
        owl:Class ;
    rdfs:label "Impact Assessment"@en ;
    rdfs:comment "Assessing the impact of proposed legislation."@en ;
    rdfs:subClassOf cacontology-legal:AdvocacyProcess ;
    cacontology-legal:isCountrySpecific false .

cacontology-legal:JurisdictionalCoordination a gufo:Kind,
        owl:Class ;
    rdfs:label "Jurisdictional Coordination"@en ;
    rdfs:comment "Framework for coordinating across legal jurisdictions."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-legal:JurisdictionalVariation a gufo:Kind,
        owl:Class ;
    rdfs:label "Jurisdictional Variation"@en ;
    rdfs:comment "Variation in legal approaches across jurisdictions."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-legal:LawEnforcementOfficer a owl:Class ;
    rdfs:label "Law Enforcement Officer"@en ;
    rdfs:comment "Officer involved in child safety investigations."@en ;
    rdfs:subClassOf cacontology-legal:LegislativeRole ;
    cacontology-legal:isCountrySpecific false .

cacontology-legal:LegislativeAdvocate a owl:Class ;
    rdfs:label "Legislative Advocate"@en ;
    rdfs:comment "Person who advocates for legislative change."@en ;
    rdfs:subClassOf cacontology-legal:LegislativeRole ;
    cacontology-legal:isCountrySpecific false .

cacontology-legal:LegislativeDrafting a gufo:EventType,
        owl:Class ;
    rdfs:label "Legislative Drafting"@en ;
    rdfs:comment "Process of drafting child protection legislation."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-legal:LegislativeEducation a gufo:EventType,
        owl:Class ;
    rdfs:label "Legislative Education"@en ;
    rdfs:comment "Educating legislators on issues."@en ;
    rdfs:subClassOf cacontology-legal:AdvocacyProcess ;
    cacontology-legal:isCountrySpecific false .

cacontology-legal:Legislator a owl:Class ;
    rdfs:label "Legislator"@en ;
    rdfs:comment "Elected member of a legislative body."@en ;
    rdfs:subClassOf cacontology-legal:LegislativeRole ;
    cacontology-legal:isCountrySpecific false .

cacontology-legal:MandatoryReporting a gufo:EventType,
        owl:Class ;
    rdfs:label "Mandatory Reporting"@en ;
    rdfs:comment "Required reporting to authorities."@en ;
    rdfs:subClassOf cacontology-legal:ComplianceProcess ;
    cacontology-legal:isCountrySpecific false .

cacontology-legal:MandatoryReportingLaw a gufo:Kind,
        owl:Class ;
    rdfs:label "Mandatory Reporting Law"@en ;
    rdfs:comment "Legislation requiring mandatory reporting of child abuse."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-legal:MediaOutreach a gufo:EventType,
        owl:Class ;
    rdfs:label "Media Outreach"@en ;
    rdfs:comment "Engaging media to support advocacy goals."@en ;
    rdfs:subClassOf cacontology-legal:AdvocacyProcess ;
    cacontology-legal:isCountrySpecific false .

cacontology-legal:MinimumStandard a gufo:Kind,
        owl:Class ;
    rdfs:label "Minimum Standard"@en ;
    rdfs:comment "Minimum standard for child protection laws."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-legal:MutualLegalAssistance a gufo:Kind,
        owl:Class ;
    rdfs:label "Mutual Legal Assistance"@en ;
    rdfs:comment "Framework for mutual legal assistance between countries."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-legal:OnlineGroomingLaw a gufo:Kind,
        owl:Class ;
    rdfs:label "Online Grooming Law"@en ;
    rdfs:comment "Legislation addressing online grooming behaviors."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-legal:PolicyAnalyst a owl:Class ;
    rdfs:label "Policy Analyst"@en ;
    rdfs:comment "Person who analyzes and develops policy recommendations."@en ;
    rdfs:subClassOf cacontology-legal:LegislativeRole ;
    cacontology-legal:isCountrySpecific false .

cacontology-legal:ProsecutorAdvocate a owl:Class ;
    rdfs:label "Prosecutor Advocate"@en ;
    rdfs:comment "Prosecutor who advocates for stronger laws."@en ;
    rdfs:subClassOf cacontology-legal:LegislativeRole ;
    cacontology-legal:isCountrySpecific false .

cacontology-legal:PublicHearing a gufo:EventType,
        owl:Class ;
    rdfs:label "Public Hearing"@en ;
    rdfs:comment "Public hearing on proposed legislation."@en ;
    rdfs:subClassOf cacontology-legal:LegislativeProcess ;
    cacontology-legal:isCountrySpecific false .

cacontology-legal:StakeholderEngagement a gufo:EventType,
        owl:Class ;
    rdfs:label "Stakeholder Engagement"@en ;
    rdfs:comment "Engaging stakeholders in advocacy efforts."@en ;
    rdfs:subClassOf cacontology-legal:AdvocacyProcess ;
    cacontology-legal:isCountrySpecific false .

cacontology-legal:StatutoryReporting a gufo:EventType,
        owl:Class ;
    rdfs:label "Statutory Reporting"@en ;
    rdfs:comment "Reporting required by statute."@en ;
    rdfs:subClassOf cacontology-legal:ComplianceProcess ;
    cacontology-legal:isCountrySpecific false .

cacontology-legal:TaskForceLiaison a owl:Class ;
    rdfs:label "Task Force Liaison"@en ;
    rdfs:comment "Person who coordinates between task forces and other entities."@en ;
    rdfs:subClassOf cacontology-legal:LegislativeRole ;
    cacontology-legal:isCountrySpecific false .

cacontology-legal:VictimAdvocate a owl:Class ;
    rdfs:label "Victim Advocate"@en ;
    rdfs:comment "Person who advocates on behalf of crime victims."@en ;
    rdfs:subClassOf cacontology-legal:LegislativeRole ;
    cacontology-legal:isCountrySpecific false .

cacontology-legal:VictimProtectionLaw a gufo:Kind,
        owl:Class ;
    rdfs:label "Victim Protection Law"@en ;
    rdfs:comment "Legislation protecting child victims."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-legal:addressesGap a owl:ObjectProperty ;
    rdfs:label "addresses gap"@en ;
    rdfs:comment "Links a statute to the legal gap it addresses."@en ;
    rdfs:domain cacontology-legal:Statute ;
    rdfs:range cacontology-legal:LegalFrameworkGap .

cacontology-legal:advocatesFor a owl:ObjectProperty ;
    rdfs:label "advocates for"@en ;
    rdfs:comment "Links an actor to legislation they advocate for."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range cacontology-legal:LegislativeInstrument .

cacontology-legal:affiliatedWith a owl:ObjectProperty ;
    rdfs:label "affiliated with"@en ;
    rdfs:comment "Links an actor to an organization they are affiliated with."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range uco-identity:Organization .

cacontology-legal:assessedBy a owl:ObjectProperty ;
    rdfs:label "assessed by"@en ;
    rdfs:comment "Assessment conducted on the legislation."@en ;
    rdfs:domain cacontology-legal:NationalLegislation ;
    rdfs:range cacontology-legal:LegislativeAssessment .

cacontology-legal:basedOnModel a owl:ObjectProperty ;
    rdfs:label "based on model"@en ;
    rdfs:comment "Model law on which national legislation is based."@en ;
    rdfs:domain cacontology-legal:NationalLegislation ;
    rdfs:range cacontology-legal:CSAMModelLaw .

cacontology-legal:complianceDate a owl:DatatypeProperty ;
    rdfs:label "compliance date"@en ;
    rdfs:comment "Date of compliance assessment."@en ;
    rdfs:domain cacontology-multi:Jurisdiction ;
    rdfs:range xsd:date .

cacontology-legal:countryCode a owl:AnnotationProperty ;
    rdfs:label "Country Code"@en ;
    rdfs:comment "ISO 3166-1 alpha-2 country code."@en .

cacontology-legal:coveragePercentage a owl:DatatypeProperty ;
    rdfs:label "coverage percentage"@en ;
    rdfs:comment "Percentage of legal coverage achieved (0.0-100.0)."@en ;
    rdfs:domain cacontology-legal:LegalCoverageAssessment ;
    rdfs:range xsd:decimal .

cacontology-legal:createsIncentiveConflict a owl:ObjectProperty ;
    rdfs:label "creates incentive conflict"@en ;
    dcterms:source "Community & Intelligence Beyond Detection (Global Emancipation Network), 2026-02-10."@en ;
    rdfs:comment "Links a statute to a policy incentive-conflict situation it creates or reinforces (e.g., the 'knowing paradox')."@en ;
    rdfs:domain cacontology-legal:Statute ;
    rdfs:range cacontology-legal:KnowingParadox ;
    rdfs:seeAlso <https://www.linkedin.com/pulse/community-intelligence-beyond-detection-global-emancipation-network-xvemc/> .

cacontology-legal:documentsGoodFaithEffort a owl:ObjectProperty ;
    rdfs:label "documents good faith effort"@en ;
    dcterms:source "Community & Intelligence Beyond Detection (Global Emancipation Network), 2026-02-10."@en ;
    rdfs:comment "Links a compliance documentation artifact to the organization whose good-faith effort it documents."@en ;
    rdfs:domain cacontology-legal:ComplianceDocumentationArtifact ;
    rdfs:range uco-identity:Organization ;
    rdfs:seeAlso <https://www.linkedin.com/pulse/community-intelligence-beyond-detection-global-emancipation-network-xvemc/> .

cacontology-legal:effectivenessScore a owl:DatatypeProperty ;
    rdfs:label "effectiveness score"@en ;
    rdfs:comment "Effectiveness score of legal framework (0.0-1.0)."@en ;
    rdfs:domain cacontology-legal:LegalEffectiveness ;
    rdfs:range xsd:decimal .

cacontology-legal:enablesExtradition a owl:ObjectProperty ;
    rdfs:label "enables extradition"@en ;
    rdfs:comment "Law enforcement action enabled by extradition agreement."@en ;
    rdfs:domain cacontology-legal:ExtraditionAgreement ;
    rdfs:range cacontology-legal:InternationalLawEnforcement .

cacontology-legal:gapSeverity a owl:DatatypeProperty ;
    rdfs:label "gap severity"@en ;
    rdfs:comment "Severity of legal gap (1-5 scale)."@en ;
    rdfs:domain cacontology-legal:LegalFrameworkGap ;
    rdfs:range xsd:integer .

cacontology-legal:gapType a owl:DatatypeProperty ;
    rdfs:label "gap type"@en ;
    rdfs:comment "Type of legal gap (e.g., missing_law, weak_enforcement, outdated)."@en ;
    rdfs:domain cacontology-legal:LegalFrameworkGap ;
    rdfs:range xsd:string .

cacontology-legal:harmonizationProgress a owl:DatatypeProperty ;
    rdfs:label "harmonization progress"@en ;
    rdfs:comment "Progress toward policy harmonization (0.0-1.0)."@en ;
    rdfs:domain cacontology-legal:HarmonizationProgress ;
    rdfs:range xsd:decimal .

cacontology-legal:harmonizedWith a owl:ObjectProperty ;
    rdfs:label "harmonized with"@en ;
    rdfs:comment "Links laws that are harmonized across jurisdictions."@en ;
    rdfs:domain cacontology-legal:Statute ;
    rdfs:range cacontology-legal:Statute .

cacontology-legal:hasCapacityLevel a owl:DatatypeProperty ;
    rdfs:label "has capacity level"@en ;
    rdfs:comment "Legal capacity level (insufficient, basic, adequate, strong, advanced) - gUFO quality aspect."@en ;
    rdfs:domain cacontology-legal:CapacityBuilding ;
    rdfs:range xsd:string ;
    rdfs:subPropertyOf gufo:hasQuality .

cacontology-legal:hasCoverageCompleteness a owl:DatatypeProperty ;
    rdfs:label "has coverage completeness"@en ;
    rdfs:comment "Completeness of legal coverage (0.0 to 1.0) - gUFO quality aspect."@en ;
    rdfs:domain cacontology-legal:LegalCoverageAssessment ;
    rdfs:range xsd:double ;
    rdfs:subPropertyOf gufo:hasQuality .

cacontology-legal:hasDevelopmentProgress a owl:DatatypeProperty ;
    rdfs:label "has development progress"@en ;
    rdfs:comment "Progress in policy development (0.0 to 1.0) - gUFO quality aspect."@en ;
    rdfs:domain cacontology-legal:PolicyDevelopment ;
    rdfs:range xsd:double ;
    rdfs:subPropertyOf gufo:hasQuality .

cacontology-legal:hasExtraditionEfficiency a owl:DatatypeProperty ;
    rdfs:label "has extradition efficiency"@en ;
    rdfs:comment "Efficiency of extradition processes (0.0 to 1.0) - gUFO quality aspect."@en ;
    rdfs:domain cacontology-legal:ExtraditionAgreement ;
    rdfs:range xsd:double ;
    rdfs:subPropertyOf gufo:hasQuality .

cacontology-legal:hasLawType a owl:ObjectProperty ;
    rdfs:label "has law type"@en ;
    rdfs:comment "Links a jurisdiction to child safety law types it has enacted."@en ;
    rdfs:domain cacontology-multi:Jurisdiction ;
    rdfs:range uco-core:UcoObject .

cacontology-legal:hasSafeHarbor a owl:ObjectProperty ;
    rdfs:label "has safe harbor"@en ;
    dcterms:source "Community & Intelligence Beyond Detection (Global Emancipation Network), 2026-02-10."@en ;
    rdfs:comment "Links a statute to a safe harbor provision it establishes."@en ;
    rdfs:domain cacontology-legal:Statute ;
    rdfs:range cacontology-legal:SafeHarbor ;
    rdfs:seeAlso <https://www.linkedin.com/pulse/community-intelligence-beyond-detection-global-emancipation-network-xvemc/> .

cacontology-legal:hasStandardCompliance a owl:DatatypeProperty ;
    rdfs:label "has standard compliance"@en ;
    rdfs:comment "Compliance with international standards (non_compliant, partially_compliant, substantially_compliant, fully_compliant) - gUFO quality aspect."@en ;
    rdfs:domain [ owl:unionOf ( cacontology-legal:InternationalStandard cacontology-legal:BestPractice ) ] ;
    rdfs:range xsd:string ;
    rdfs:subPropertyOf gufo:hasQuality .

cacontology-legal:hasStatute a owl:ObjectProperty ;
    rdfs:label "has statute"@en ;
    rdfs:comment "Links a jurisdiction to its enacted statutes."@en ;
    rdfs:domain cacontology-multi:Jurisdiction ;
    rdfs:range cacontology-legal:Statute .

cacontology-legal:identifiesGap a owl:ObjectProperty ;
    rdfs:label "identifies gap"@en ;
    rdfs:comment "Gap identified through assessment."@en ;
    rdfs:domain cacontology-legal:LegislativeAssessment ;
    rdfs:range cacontology-legal:LegalFrameworkGap .

cacontology-legal:implementsModelLaw a owl:ObjectProperty ;
    rdfs:label "implements model law"@en ;
    rdfs:comment "Links a statute to a model law it implements."@en ;
    rdfs:domain cacontology-legal:Statute ;
    rdfs:range cacontology-legal:CSAMModelLaw .

cacontology-legal:isAssessedBy a owl:ObjectProperty ;
    rdfs:label "is assessed by"@en ;
    rdfs:comment "Links legislation to assessment activities - gUFO participation relation."@en ;
    rdfs:domain cacontology-legal:NationalLegislation ;
    rdfs:range cacontology-legal:LegislativeAssessment ;
    rdfs:subPropertyOf gufo:participatedIn .

cacontology-legal:isCountrySpecific a owl:AnnotationProperty ;
    rdfs:label "Is Country Specific"@en ;
    rdfs:comment "True if this concept is specific to a particular country's legal system."@en .

cacontology-legal:meetsStandard a owl:DatatypeProperty ;
    rdfs:label "meets standard"@en ;
    rdfs:comment "Whether jurisdiction meets the minimum standard."@en ;
    rdfs:domain cacontology-multi:Jurisdiction ;
    rdfs:range xsd:boolean .

cacontology-legal:parentJurisdiction a owl:ObjectProperty ;
    rdfs:label "parent jurisdiction"@en ;
    rdfs:comment "Links a jurisdiction to its parent (e.g., state to federal)."@en ;
    rdfs:domain cacontology-multi:Jurisdiction ;
    rdfs:range cacontology-multi:Jurisdiction .

cacontology-legal:partOfFramework a owl:ObjectProperty ;
    rdfs:label "part of framework"@en ;
    rdfs:comment "Regional framework of which legislation is part."@en ;
    rdfs:domain cacontology-legal:NationalLegislation ;
    rdfs:range cacontology-legal:RegionalFramework .

cacontology-legal:producesComplianceDocumentation a owl:ObjectProperty ;
    rdfs:label "produces compliance documentation"@en ;
    dcterms:source "Community & Intelligence Beyond Detection (Global Emancipation Network), 2026-02-10."@en ;
    rdfs:comment "Links a compliance process to compliance documentation artifacts produced (documentation trails, audit evidence)."@en ;
    rdfs:domain cacontology-legal:ComplianceProcess ;
    rdfs:range cacontology-legal:ComplianceDocumentationArtifact ;
    rdfs:seeAlso <https://www.linkedin.com/pulse/community-intelligence-beyond-detection-global-emancipation-network-xvemc/> .

cacontology-legal:providesAssistance a owl:ObjectProperty ;
    rdfs:label "provides assistance"@en ;
    rdfs:comment "Technical assistance provided for policy development."@en ;
    rdfs:domain cacontology-legal:TechnicalAssistance ;
    rdfs:range cacontology-legal:PolicyDevelopment .

cacontology-legal:providesTestimony a owl:ObjectProperty ;
    rdfs:label "provides testimony"@en ;
    rdfs:comment "Links an actor to legislation they testified about."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range cacontology-legal:LegislativeInstrument .

cacontology-legal:representsJurisdiction a owl:ObjectProperty ;
    rdfs:label "represents jurisdiction"@en ;
    rdfs:comment "Links an actor to the jurisdiction they represent."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range cacontology-multi:Jurisdiction .

cacontology-legal:standsInQualifiedCompliance a owl:ObjectProperty ;
    rdfs:label "stands in qualified compliance"@en ;
    rdfs:comment "Links entities to qualified compliance situations - gUFO qualified relation."@en ;
    rdfs:domain [ owl:unionOf ( cacontology-legal:NationalLegislation uco-location:Location ) ] ;
    rdfs:range gufo:ParticipationSituation .

cacontology-legal-shapes:AdvocacyProcessShape a sh:NodeShape ;
    rdfs:label "Advocacy Process Shape"@en ;
    rdfs:comment "Validates advocacy process classes as gUFO EventTypes."@en ;
    sh:property [ sh:hasValue gufo:EventType ;
            sh:message "Advocacy processes must be classified as gUFO EventType"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-legal:AdvocacyProcess .

cacontology-legal-shapes:AgeVerificationLawShape a sh:NodeShape ;
    rdfs:label "Age Verification Law Shape"@en ;
    sh:property [ sh:hasValue gufo:Kind ;
            sh:message "Must be classified as gUFO Kind"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-legal:AgeVerificationLaw .

cacontology-legal-shapes:AssessmentTemporalShape a sh:NodeShape ;
    rdfs:label "Assessment Temporal Shape"@en ;
    rdfs:comment "Validates temporal constraints for legal assessments and reviews."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Assessments should specify start time"@en ;
            sh:path uco-core:startTime ;
            sh:severity sh:Info ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Assessments should specify end time"@en ;
            sh:path uco-core:endTime ;
            sh:severity sh:Info ] ;
    sh:sparql [ sh:message "Assessment end time must be after start time"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://ontology.unifiedcyberontology.org/uco/core/"^^xsd:anyURI ;
                            sh:prefix "uco-core" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this uco-core:startTime ?start .
                $this uco-core:endTime ?end .
                FILTER (?end <= ?start)
            }
        """ ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-legal:GlobalLegalReview,
        cacontology-legal:LegislativeAssessment .

cacontology-legal-shapes:AuditProcessShape a sh:NodeShape ;
    rdfs:label "Audit Process Shape"@en ;
    sh:property [ sh:hasValue gufo:EventType ;
            sh:message "Audit process must be classified as gUFO EventType"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-legal:AuditProcess .

cacontology-legal-shapes:BillDraftingShape a sh:NodeShape ;
    rdfs:label "Bill Drafting Shape"@en ;
    sh:property [ sh:hasValue gufo:EventType ;
            sh:message "Bill drafting must be classified as gUFO EventType"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-legal:BillDrafting .

cacontology-legal-shapes:CSAMModelLawShape a sh:NodeShape ;
    rdfs:label "CSAM Model Law Shape"@en ;
    rdfs:comment "Enhanced validation shape for CSAM model legislation with gUFO quality aspects."@en ;
    sh:property [ sh:hasValue gufo:Kind ;
            sh:message "Must be classified as gUFO Kind"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ;
            sh:severity sh:Violation ],
        [ sh:datatype xsd:string ;
            sh:in ( "ineffective" "limited" "moderate" "effective" "highly_effective" ) ;
            sh:maxCount 1 ;
            sh:message "Legal effectiveness should be assessed"@en ;
            sh:path cacontology-legal:hasLegalEffectiveness ;
            sh:severity sh:Warning ],
        [ sh:datatype xsd:string ;
            sh:in ( "poor" "fair" "good" "excellent" "validated" ) ;
            sh:maxCount 1 ;
            sh:message "Data quality should be assessed"@en ;
            sh:path cacontology-legal:hasDataQuality ;
            sh:severity sh:Info ],
        [ rdfs:comment "Model law must have a descriptive name."@en ;
            sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path uco-core:name ],
        [ rdfs:comment "Model law must have detailed description."@en ;
            sh:datatype xsd:string ;
            sh:maxLength 2000 ;
            sh:minCount 1 ;
            sh:minLength 50 ;
            sh:path uco-core:description ],
        [ rdfs:comment "Legal system type for model law applicability."@en ;
            sh:datatype xsd:string ;
            sh:in ( "common_law" "civil_law" "religious_law" "mixed" "universal" ) ;
            sh:maxCount 1 ;
            sh:path cacontology-legal:legalSystemType ] ;
    sh:targetClass cacontology-legal:CSAMModelLaw .

cacontology-legal-shapes:ChildExploitationLawShape a sh:NodeShape ;
    rdfs:label "Child Exploitation Law Shape"@en ;
    sh:property [ sh:hasValue gufo:Kind ;
            sh:message "Must be classified as gUFO Kind"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-legal:ChildExploitationLaw .

cacontology-legal-shapes:CoalitionBuildingShape a sh:NodeShape ;
    rdfs:label "Coalition Building Shape"@en ;
    sh:property [ sh:hasValue gufo:EventType ;
            sh:message "Coalition building must be classified as gUFO EventType"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-legal:CoalitionBuilding .

cacontology-legal-shapes:CommitteeReviewShape a sh:NodeShape ;
    rdfs:label "Committee Review Shape"@en ;
    sh:property [ sh:hasValue gufo:EventType ;
            sh:message "Committee review must be classified as gUFO EventType"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-legal:CommitteeReview .

cacontology-legal-shapes:ComplianceDocumentationArtifactShape a sh:NodeShape ;
    rdfs:label "Compliance Documentation Artifact Shape"@en ;
    rdfs:comment "Validates compliance documentation artifacts and their verification status."@en ;
    sh:property [ sh:hasValue gufo:Kind ;
            sh:message "Compliance documentation artifacts must be classified as gUFO Kind"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ;
            sh:severity sh:Violation ],
        [ sh:datatype xsd:string ;
            sh:in ( "verified" "unverified" "contested" "unknown" ) ;
            sh:maxCount 1 ;
            sh:message "Verification status must be from allowed list when present."@en ;
            sh:minCount 0 ;
            sh:path cacontology-legal:verificationStatus ;
            sh:severity sh:Info ] ;
    sh:targetClass cacontology-legal:ComplianceDocumentationArtifact .

cacontology-legal-shapes:ComplianceIntelligenceFrameworkShape a sh:NodeShape ;
    rdfs:label "Compliance Intelligence Framework Shape"@en ;
    rdfs:comment "Validates compliance intelligence framework objects as gUFO Kind."@en ;
    sh:property [ sh:hasValue gufo:Kind ;
            sh:message "Compliance intelligence frameworks must be classified as gUFO Kind"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-legal:ComplianceIntelligenceFramework .

cacontology-legal-shapes:ComplianceProcessShape a sh:NodeShape ;
    rdfs:label "Compliance Process Shape"@en ;
    rdfs:comment "Validates compliance process classes as gUFO EventTypes."@en ;
    sh:property [ sh:hasValue gufo:EventType ;
            sh:message "Compliance processes must be classified as gUFO EventType"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-legal:ComplianceProcess .

cacontology-legal-shapes:ComprehensiveHarmonizationRule a sh:NodeShape ;
    rdfs:label "Comprehensive Harmonization Rule"@en ;
    rdfs:comment "Comprehensive harmonization should involve strong treaty frameworks."@en ;
    sh:sparql [ sh:message "Comprehensive harmonization should involve strong treaty frameworks"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/legal-harmonization#"^^xsd:anyURI ;
                            sh:prefix "cacontology-legal" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-legal:hasHarmonizationDegree ?degree .
                FILTER (?degree IN ("comprehensive", "complete"))
                OPTIONAL {
                    ?treaty cacontology-legal:facilitatesCooperation ?cooperation .
                    ?cooperation rdf:type cacontology-legal:InternationalLawEnforcement .
                    ?treaty cacontology-legal:hasTreatyStrength ?strength .
                    FILTER (?strength IN ("binding", "comprehensive"))
                }
                FILTER (!BOUND(?strength))
            }
        """ ;
            sh:severity sh:Warning ] ;
    sh:targetClass cacontology-legal:PolicyHarmonization .

cacontology-legal-shapes:CorrespondenceShape a sh:NodeShape ;
    rdfs:label "Correspondence Shape"@en ;
    rdfs:comment "Validates correspondence between actors."@en ;
    sh:property [ sh:class cacontology-legal:LegislativeInstrument ;
            sh:message "Correspondence should reference a legislative instrument"@en ;
            sh:minCount 1 ;
            sh:path cacontology-legal:correspondsAbout ;
            sh:severity sh:Info ] ;
    sh:targetClass cacontology-legal:Correspondence .

cacontology-legal-shapes:CriticalGapReformRule a sh:NodeShape ;
    rdfs:label "Critical Gap Reform Rule"@en ;
    rdfs:comment "Critical gaps should require urgent reform."@en ;
    sh:sparql [ sh:message "Critical gaps should require urgent reform"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/legal-harmonization#"^^xsd:anyURI ;
                            sh:prefix "cacontology-legal" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-legal:hasGapSeverity ?severity .
                FILTER (?severity IN ("critical", "systemic"))
                OPTIONAL {
                    $this cacontology-legal:requiresReform ?reform .
                    ?reform cacontology-legal:hasReformUrgency ?urgency .
                    FILTER (?urgency IN ("urgent", "critical"))
                }
                FILTER (!BOUND(?urgency))
            }
        """ ;
            sh:severity sh:Warning ] ;
    sh:targetClass cacontology-legal:LegalFrameworkGap .

cacontology-legal-shapes:DataProtectionForMinorsLawShape a sh:NodeShape ;
    rdfs:label "Data Protection for Minors Law Shape"@en ;
    sh:property [ sh:hasValue gufo:Kind ;
            sh:message "Must be classified as gUFO Kind"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-legal:DataProtectionForMinorsLaw .

cacontology-legal-shapes:FloorVoteShape a sh:NodeShape ;
    rdfs:label "Floor Vote Shape"@en ;
    sh:property [ sh:hasValue gufo:EventType ;
            sh:message "Floor vote must be classified as gUFO EventType"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-legal:FloorVote .

cacontology-legal-shapes:FullComplianceAlignmentRule a sh:NodeShape ;
    rdfs:label "Full Compliance Alignment Rule"@en ;
    rdfs:comment "Full legal alignment should have high compliance levels."@en ;
    sh:sparql [ sh:message "Full legal alignment should have high compliance levels"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/legal-harmonization#"^^xsd:anyURI ;
                            sh:prefix "cacontology-legal" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-legal:legalAlignmentLevel "full" .
                OPTIONAL {
                    $this cacontology-legal:hasComplianceLevel ?level .
                    FILTER (?level >= 0.8)
                }
                FILTER (!BOUND(?level))
            }
        """ ;
            sh:severity sh:Warning ] ;
    sh:targetClass cacontology-legal:LegalCompliance .

cacontology-legal-shapes:GlobalLegalReviewShape a sh:NodeShape ;
    rdfs:label "Global Legal Review Shape"@en ;
    rdfs:comment "Enhanced validation shape for global legal reviews with gUFO integration."@en ;
    sh:property [ sh:hasValue gufo:Kind ;
            sh:message "Must be classified as gUFO Kind"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ;
            sh:severity sh:Violation ],
        [ rdfs:comment "Number of countries analyzed (1-196)."@en ;
            sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 196 ;
            sh:minCount 1 ;
            sh:minInclusive 1 ;
            sh:path cacontology-legal:countriesAnalyzed ],
        [ rdfs:comment "Review name must include 'Global', 'Review', and year."@en ;
            sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:path uco-core:name ;
            sh:pattern "^Global.*Review.*[0-9]{4}$" ] ;
    sh:targetClass cacontology-legal:GlobalLegalReview .

cacontology-legal-shapes:HighEffectivenessLegislationRule a sh:NodeShape ;
    rdfs:label "High Effectiveness Legislation Rule"@en ;
    rdfs:comment "Highly effective legislation should have excellent implementation quality."@en ;
    sh:sparql [ sh:message "Highly effective legislation should have excellent implementation quality"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/legal-harmonization#"^^xsd:anyURI ;
                            sh:prefix "cacontology-legal" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-legal:hasLegalEffectiveness "highly_effective" .
                OPTIONAL {
                    $this cacontology-legal:hasImplementationQuality ?quality .
                    FILTER (?quality IN ("excellent", "exemplary"))
                }
                FILTER (!BOUND(?quality))
            }
        """ ;
            sh:severity sh:Warning ] ;
    sh:targetClass cacontology-legal:NationalLegislation .

cacontology-legal-shapes:InternationalCooperationFrameworkRule a sh:NodeShape ;
    rdfs:label "International Cooperation Framework Rule"@en ;
    rdfs:comment "International law enforcement must be supported by proper legal framework."@en ;
    sh:sparql [ sh:message "International law enforcement must be supported by treaty or extradition framework"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/legal-harmonization#"^^xsd:anyURI ;
                            sh:prefix "cacontology-legal" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-legal:InternationalLawEnforcement .
                FILTER NOT EXISTS {
                    { ?treaty cacontology-legal:facilitatesCooperation $this . }
                    UNION
                    { ?agreement cacontology-legal:enablesExtradition $this . }
                }
            }
        """ ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-legal:InternationalLawEnforcement .

cacontology-legal-shapes:InternationalCooperationParticipationShape a sh:NodeShape ;
    rdfs:label "International Cooperation Participation Shape"@en ;
    rdfs:comment "Validates participation constraints for international law enforcement cooperation."@en ;
    sh:property [ sh:class uco-identity:Organization ;
            sh:message "International cooperation should involve multiple organizations"@en ;
            sh:minCount 2 ;
            sh:path [ sh:inversePath cacontology-legal:participatesIn ] ;
            sh:severity sh:Warning ] ;
    sh:targetClass cacontology-legal:InternationalLawEnforcement .

cacontology-legal-shapes:InternationalLawEnforcementShape a sh:NodeShape ;
    rdfs:label "International Law Enforcement Shape"@en ;
    rdfs:comment "Enhanced shape for international law enforcement with cooperation intensity assessment."@en ;
    sh:property [ sh:hasValue gufo:EventType ;
            sh:message "Must be classified as gUFO EventType"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ;
            sh:severity sh:Violation ],
        [ sh:datatype xsd:string ;
            sh:in ( "minimal" "moderate" "substantial" "intensive" "comprehensive" ) ;
            sh:maxCount 1 ;
            sh:message "Cooperation intensity should be assessed"@en ;
            sh:path cacontology-legal:hasCooperationIntensity ;
            sh:severity sh:Warning ] ;
    sh:targetClass cacontology-legal:InternationalLawEnforcement .

cacontology-legal-shapes:JurisdictionWithGapsShape a sh:NodeShape ;
    rdfs:label "Jurisdiction With Gaps Shape"@en ;
    rdfs:comment "Validates jurisdictions that have identified legal gaps."@en ;
    sh:property [ sh:class cacontology-legal:LegalFrameworkGap ;
            sh:message "Jurisdiction should reference valid legal framework gaps"@en ;
            sh:minCount 1 ;
            sh:path cacontology-legal:hasLegalGap ;
            sh:severity sh:Info ] ;
    sh:targetSubjectsOf cacontology-legal:hasLegalGap .

cacontology-legal-shapes:JurisdictionWithStatutesShape a sh:NodeShape ;
    rdfs:label "Jurisdiction With Statutes Shape"@en ;
    rdfs:comment "Validates jurisdictions with legal harmonization properties."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "full" "partial" "none" ) ;
            sh:maxCount 1 ;
            sh:message "Harmonization level should be one of: full, partial, none"@en ;
            sh:path cacontology-legal:hasHarmonizationLevel ;
            sh:severity sh:Info ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Compliance score should be between 0.0 and 1.0"@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-legal:hasComplianceScore ;
            sh:severity sh:Info ],
        [ sh:datatype xsd:string ;
            sh:in ( "federal" "state" "territory" "local" "national" "regional" ) ;
            sh:maxCount 1 ;
            sh:message "Jurisdiction type should be one of: federal, state, territory, local, national, regional"@en ;
            sh:path cacontology-legal:jurisdictionType ;
            sh:severity sh:Info ] ;
    sh:targetClass cacontology-multi:Jurisdiction .

cacontology-legal-shapes:KnowingParadoxShape a sh:NodeShape ;
    rdfs:label "Knowing Paradox Shape"@en ;
    rdfs:comment "Validates knowing paradox as a gUFO Situation."@en ;
    sh:property [ sh:message "Knowing paradox should extend gUFO Situation."@en ;
            sh:path rdfs:subClassOf ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class gufo:Situation ] ;
            sh:severity sh:Info ] ;
    sh:targetClass cacontology-legal:KnowingParadox .

cacontology-legal-shapes:LegalComplianceShape a sh:NodeShape ;
    rdfs:label "Legal Compliance Shape"@en ;
    rdfs:comment "Enhanced shape for legal compliance situations with compliance level assessment."@en ;
    sh:property [ sh:hasValue gufo:SituationType ;
            sh:message "Must be classified as gUFO SituationType"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ;
            sh:severity sh:Violation ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Compliance level should be measured (0.0-1.0)"@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-legal:hasComplianceLevel ;
            sh:severity sh:Warning ],
        [ rdfs:comment "Legal alignment level must be specified."@en ;
            sh:datatype xsd:string ;
            sh:in ( "none" "partial" "substantial" "full" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:path cacontology-legal:legalAlignmentLevel ],
        [ rdfs:comment "Compliance must be measured by specific metrics."@en ;
            sh:class cacontology-legal:ComplianceMetrics ;
            sh:minCount 1 ;
            sh:path cacontology-legal:measuredBy ] ;
    sh:targetClass cacontology-legal:LegalCompliance .

cacontology-legal-shapes:LegalFrameworkCompositionShape a sh:NodeShape ;
    rdfs:label "Legal Framework Composition Shape"@en ;
    rdfs:comment "Validates compositional structure of legal frameworks following gUFO part-whole patterns."@en ;
    sh:property [ sh:class cacontology-legal:NationalLegislation ;
            sh:message "Regional framework must include legislation from at least three countries"@en ;
            sh:minCount 3 ;
            sh:path [ sh:inversePath cacontology-legal:isComponentOf ] ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-legal:RegionalFramework .

cacontology-legal-shapes:LegalFrameworkGapShape a sh:NodeShape ;
    rdfs:label "Legal Framework Gap Shape"@en ;
    rdfs:comment "Enhanced shape for legal framework gaps with gap severity assessment."@en ;
    sh:property [ sh:hasValue gufo:Kind ;
            sh:message "Must be classified as gUFO Kind"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ;
            sh:severity sh:Violation ],
        [ sh:datatype xsd:string ;
            sh:in ( "minor" "moderate" "major" "critical" "systemic" ) ;
            sh:maxCount 1 ;
            sh:message "Gap severity should be assessed"@en ;
            sh:path cacontology-legal:hasGapSeverity ;
            sh:severity sh:Warning ],
        [ rdfs:comment "Gap severity must be specified."@en ;
            sh:datatype xsd:string ;
            sh:in ( "minor" "moderate" "major" "critical" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:path cacontology-legal:policyGapSeverity ],
        [ rdfs:comment "Gap must have detailed description."@en ;
            sh:datatype xsd:string ;
            sh:maxLength 1000 ;
            sh:minCount 1 ;
            sh:minLength 20 ;
            sh:path uco-core:description ],
        [ rdfs:comment "Gap must require specific legal reform."@en ;
            sh:class cacontology-legal:LegalReform ;
            sh:minCount 1 ;
            sh:path cacontology-legal:requiresReform ] ;
    sh:targetClass cacontology-legal:LegalFrameworkGap .

cacontology-legal-shapes:LegalFrameworkTemporalShape a sh:NodeShape ;
    rdfs:label "Legal Framework Temporal Shape"@en ;
    rdfs:comment "Validates temporal aspects of legal framework creation and evolution."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Legal frameworks should have creation timestamp"@en ;
            sh:path uco-core:createdTime ;
            sh:severity sh:Info ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Legal frameworks may have modification timestamp"@en ;
            sh:path uco-core:modifiedTime ;
            sh:severity sh:Info ] ;
    sh:targetClass cacontology-legal:ExtraditionAgreement,
        cacontology-legal:NationalLegislation,
        cacontology-legal:TreatyFramework .

cacontology-legal-shapes:LegalHarmonizationDataQualityShape a sh:NodeShape ;
    rdfs:label "Legal Harmonization Data Quality Shape"@en ;
    rdfs:comment "Comprehensive gUFO quality validation for legal harmonization data."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "poor" "fair" "good" "excellent" "validated" ) ;
            sh:maxCount 1 ;
            sh:message "Data quality level should be assessed"@en ;
            sh:path cacontology-legal:hasDataQuality ;
            sh:severity sh:Warning ] ;
    sh:sparql [ sh:message "Excellent data quality should have high assessment reliability"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/legal-harmonization#"^^xsd:anyURI ;
                            sh:prefix "cacontology-legal" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-legal:hasDataQuality "excellent" .
                OPTIONAL {
                    $this cacontology-legal:hasAssessmentReliability ?reliability .
                    FILTER (?reliability >= 0.8)
                }
                FILTER (!BOUND(?reliability))
            }
        """ ;
            sh:severity sh:Warning ] ;
    sh:targetClass cacontology-legal:ComplianceMetrics,
        cacontology-legal:GlobalLegalReview,
        cacontology-legal:LegislativeAssessment .

cacontology-legal-shapes:LegalHarmonizationParticipationShape a sh:NodeShape ;
    rdfs:label "Legal Harmonization Participation Shape"@en ;
    rdfs:comment "Validates participation constraints for legal harmonization activities following gUFO participation patterns."@en ;
    sh:property [ sh:class uco-location:Location ;
            sh:message "Policy harmonization must involve at least two countries"@en ;
            sh:minCount 2 ;
            sh:path [ sh:inversePath cacontology-legal:participatesIn ] ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-legal:PolicyHarmonization .

cacontology-legal-shapes:LegalObjectTypeValidationShape a sh:NodeShape ;
    rdfs:label "Legal Object Type Validation Shape"@en ;
    rdfs:comment "Validates that legal objects are properly classified as gUFO Objects and Kinds."@en ;
    sh:property [ sh:hasValue gufo:Kind ;
            sh:maxCount 1 ;
            sh:message "Legal objects must be classified as gUFO Kind"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ;
            sh:severity sh:Violation ],
        [ sh:message "Legal objects must extend gUFO Object"@en ;
            sh:path rdfs:subClassOf ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class gufo:Object ] ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-legal:CSAMModelLaw,
        cacontology-legal:NationalLegislation,
        cacontology-legal:RegionalFramework,
        cacontology-legal:TreatyFramework .

cacontology-legal-shapes:LegalProcessTemporalShape a sh:NodeShape ;
    rdfs:label "Legal Process Temporal Shape"@en ;
    rdfs:comment "Validates temporal constraints for legal processes according to gUFO framework."@en ;
    sh:property [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Legal processes should specify start time"@en ;
            sh:path gufo:hasBeginPointInXSDDateTimeStamp ;
            sh:severity sh:Info ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Legal processes should specify end time"@en ;
            sh:path gufo:hasEndPointInXSDDateTimeStamp ;
            sh:severity sh:Info ] ;
    sh:sparql [ sh:message "Legal process end time must be after start time"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "http://purl.org/nemo/gufo#"^^xsd:anyURI ;
                            sh:prefix "gufo" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this gufo:hasBeginPointInXSDDateTimeStamp ?start .
                $this gufo:hasEndPointInXSDDateTimeStamp ?end .
                FILTER (?end <= ?start)
            }
        """ ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-legal:LegalReform,
        cacontology-legal:PolicyDevelopment,
        cacontology-legal:PolicyHarmonization .

cacontology-legal-shapes:LegalProcessTypeValidationShape a sh:NodeShape ;
    rdfs:label "Legal Process Type Validation Shape"@en ;
    rdfs:comment "Validates that legal processes are properly classified as gUFO Events and EventTypes."@en ;
    sh:property [ sh:hasValue gufo:EventType ;
            sh:maxCount 1 ;
            sh:message "Legal processes must be classified as gUFO EventType"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ;
            sh:severity sh:Violation ],
        [ sh:message "Legal processes must extend gUFO Event"@en ;
            sh:path rdfs:subClassOf ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class gufo:Event ] ;
            sh:severity sh:Violation ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Legal processes should have temporal boundaries"@en ;
            sh:path gufo:hasBeginPointInXSDDateTimeStamp ;
            sh:severity sh:Warning ] ;
    sh:targetClass cacontology-legal:InternationalLawEnforcement,
        cacontology-legal:LegalReform,
        cacontology-legal:PolicyDevelopment,
        cacontology-legal:PolicyHarmonization .

cacontology-legal-shapes:LegalReformShape a sh:NodeShape ;
    rdfs:label "Legal Reform Shape"@en ;
    rdfs:comment "Enhanced shape for legal reform processes with urgency assessment."@en ;
    sh:property [ sh:hasValue gufo:EventType ;
            sh:message "Must be classified as gUFO EventType"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ;
            sh:severity sh:Violation ],
        [ sh:datatype xsd:string ;
            sh:in ( "low" "moderate" "high" "urgent" "critical" ) ;
            sh:maxCount 1 ;
            sh:message "Reform urgency should be assessed"@en ;
            sh:path cacontology-legal:hasReformUrgency ;
            sh:severity sh:Warning ],
        [ rdfs:comment "Reform priority must be specified."@en ;
            sh:datatype xsd:string ;
            sh:in ( "low" "medium" "high" "urgent" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:path cacontology-legal:reformPriority ],
        [ rdfs:comment "Reform name must contain 'Reform'."@en ;
            sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:path uco-core:name ;
            sh:pattern ".*Reform.*" ] ;
    sh:targetClass cacontology-legal:LegalReform .

cacontology-legal-shapes:LegalSituationTypeValidationShape a sh:NodeShape ;
    rdfs:label "Legal Situation Type Validation Shape"@en ;
    rdfs:comment "Validates that legal situations are properly classified as gUFO Situations and SituationTypes."@en ;
    sh:property [ sh:hasValue gufo:SituationType ;
            sh:maxCount 1 ;
            sh:message "Legal situations must be classified as gUFO SituationType"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ;
            sh:severity sh:Violation ],
        [ sh:message "Legal situations must extend gUFO Situation"@en ;
            sh:path rdfs:subClassOf ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class gufo:Situation ] ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-legal:LegalCompliance,
        cacontology-legal:LegalSystemCompatibility .

cacontology-legal-shapes:LegislativeAssessmentShape a sh:NodeShape ;
    rdfs:label "Legislative Assessment Shape"@en ;
    rdfs:comment "Enhanced shape for legislative assessments with reliability assessment."@en ;
    sh:property [ sh:hasValue gufo:Kind ;
            sh:message "Must be classified as gUFO Kind"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ;
            sh:severity sh:Violation ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Assessment reliability should be measured"@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-legal:hasAssessmentReliability ;
            sh:severity sh:Info ],
        [ sh:datatype xsd:string ;
            sh:in ( "poor" "fair" "good" "excellent" "validated" ) ;
            sh:maxCount 1 ;
            sh:message "Data quality should be assessed"@en ;
            sh:path cacontology-legal:hasDataQuality ;
            sh:severity sh:Info ],
        [ rdfs:comment "Compliance score must be between 0.0 and 1.0."@en ;
            sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:minCount 1 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-legal:legislativeCompliance ],
        [ rdfs:comment "Assessment must have creation timestamp."@en ;
            sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:path uco-core:createdTime ] ;
    sh:targetClass cacontology-legal:LegislativeAssessment .

cacontology-legal-shapes:LegislativeInstrumentShape a sh:NodeShape ;
    rdfs:label "Legislative Instrument Shape"@en ;
    rdfs:comment "Validates legislative instruments (bills, resolutions)."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:message "Legislative instrument should have a name"@en ;
            sh:minCount 1 ;
            sh:path uco-core:name ;
            sh:severity sh:Warning ],
        [ sh:class cacontology-legal:LegislativeProcess ;
            sh:message "Legislative instrument should involve at least one process"@en ;
            sh:minCount 1 ;
            sh:path cacontology-legal:involvesProcess ;
            sh:severity sh:Info ] ;
    sh:targetClass cacontology-legal:LegislativeInstrument .

cacontology-legal-shapes:LegislativeProcessShape a sh:NodeShape ;
    rdfs:label "Legislative Process Shape"@en ;
    rdfs:comment "Validates legislative process classes as gUFO EventTypes."@en ;
    sh:property [ sh:hasValue gufo:EventType ;
            sh:message "Legislative processes must be classified as gUFO EventType"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ;
            sh:severity sh:Violation ],
        [ sh:datatype xsd:string ;
            sh:in ( "pending" "in_progress" "completed" "failed" ) ;
            sh:maxCount 1 ;
            sh:message "Process status should be one of: pending, in_progress, completed, failed"@en ;
            sh:path cacontology-legal:processStatus ;
            sh:severity sh:Warning ],
        [ sh:datatype xsd:date ;
            sh:maxCount 1 ;
            sh:message "Process should have a date"@en ;
            sh:path cacontology-legal:processDate ;
            sh:severity sh:Info ] ;
    sh:targetClass cacontology-legal:LegislativeProcess .

cacontology-legal-shapes:LegislativeRoleShape a sh:NodeShape ;
    rdfs:label "Legislative Role Shape"@en ;
    rdfs:comment "Validates legislative role classes and instances."@en ;
    sh:property [ sh:message "Legislative roles must extend gUFO Role"@en ;
            sh:path rdfs:subClassOf ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class gufo:Role ] ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-legal:LegislativeRole .

cacontology-legal-shapes:NationalLegislationShape a sh:NodeShape ;
    rdfs:label "National Legislation Shape"@en ;
    rdfs:comment "Enhanced shape for national legislation with implementation quality and effectiveness assessments."@en ;
    sh:property [ sh:hasValue gufo:Kind ;
            sh:message "Must be classified as gUFO Kind"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ;
            sh:severity sh:Violation ],
        [ sh:datatype xsd:string ;
            sh:in ( "poor" "fair" "good" "excellent" "exemplary" ) ;
            sh:maxCount 1 ;
            sh:message "Implementation quality should be assessed"@en ;
            sh:path cacontology-legal:hasImplementationQuality ;
            sh:severity sh:Warning ],
        [ sh:datatype xsd:string ;
            sh:in ( "ineffective" "limited" "moderate" "effective" "highly_effective" ) ;
            sh:maxCount 1 ;
            sh:message "Legal effectiveness should be assessed"@en ;
            sh:path cacontology-legal:hasLegalEffectiveness ;
            sh:severity sh:Warning ],
        [ sh:datatype xsd:string ;
            sh:in ( "weak" "moderate" "strong" "very_strong" "comprehensive" ) ;
            sh:maxCount 1 ;
            sh:message "Legal robustness should be assessed"@en ;
            sh:path cacontology-legal:hasLegalRobustness ;
            sh:severity sh:Info ],
        [ rdfs:comment "Implementation status must be specified."@en ;
            sh:datatype xsd:string ;
            sh:in ( "drafted" "enacted" "enforced" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:path cacontology-legal:implementationStatus ],
        [ rdfs:comment "Legal system type classification."@en ;
            sh:datatype xsd:string ;
            sh:in ( "common_law" "civil_law" "religious_law" "mixed" ) ;
            sh:maxCount 1 ;
            sh:path cacontology-legal:legalSystemType ],
        [ rdfs:comment "National legislation must apply to exactly one country."@en ;
            sh:class uco-location:Location ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:path cacontology-legal:appliesToCountry ] ;
    sh:targetClass cacontology-legal:NationalLegislation .

cacontology-legal-shapes:OnlineSafetyLawShape a sh:NodeShape ;
    rdfs:label "Online Safety Law Shape"@en ;
    sh:property [ sh:hasValue gufo:Kind ;
            sh:message "Must be classified as gUFO Kind"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-legal:OnlineSafetyLaw .

cacontology-legal-shapes:PersonWithRoleShape a sh:NodeShape ;
    rdfs:label "Person With Role Shape"@en ;
    rdfs:comment "Validates persons with legislative roles."@en ;
    sh:property [ sh:class gufo:Role ;
            sh:message "Person should have at least one legislative role"@en ;
            sh:minCount 1 ;
            sh:path cacontology-legal:hasRole ;
            sh:severity sh:Warning ] ;
    sh:targetSubjectsOf cacontology-legal:hasRole .

cacontology-legal-shapes:PlatformAccountabilityLawShape a sh:NodeShape ;
    rdfs:label "Platform Accountability Law Shape"@en ;
    sh:property [ sh:hasValue gufo:Kind ;
            sh:message "Must be classified as gUFO Kind"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-legal:PlatformAccountabilityLaw .

cacontology-legal-shapes:PolicyHarmonizationShape a sh:NodeShape ;
    rdfs:label "Policy Harmonization Shape"@en ;
    rdfs:comment "Enhanced shape for policy harmonization with harmonization degree assessment."@en ;
    sh:property [ sh:hasValue gufo:EventType ;
            sh:message "Must be classified as gUFO EventType"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ;
            sh:severity sh:Violation ],
        [ sh:datatype xsd:string ;
            sh:in ( "minimal" "partial" "substantial" "comprehensive" "complete" ) ;
            sh:maxCount 1 ;
            sh:message "Harmonization degree should be assessed"@en ;
            sh:path cacontology-legal:hasHarmonizationDegree ;
            sh:severity sh:Warning ] ;
    sh:targetClass cacontology-legal:PolicyHarmonization .

cacontology-legal-shapes:QualifiedComplianceParticipationShape a sh:NodeShape ;
    rdfs:label "Qualified Compliance Participation Shape"@en ;
    rdfs:comment "Validates qualified participation relationships in legal compliance according to gUFO patterns."@en ;
    sh:property [ sh:class cacontology-legal:NationalLegislation ;
            sh:maxCount 1 ;
            sh:message "Participation situation must concern exactly one legal framework"@en ;
            sh:minCount 1 ;
            sh:path cacontology-legal:concernsLegalFramework ;
            sh:severity sh:Violation ] ;
    sh:targetClass gufo:ParticipationSituation .

cacontology-legal-shapes:SafeHarborShape a sh:NodeShape ;
    rdfs:label "Safe Harbor Shape"@en ;
    rdfs:comment "Validates safe harbor objects and their good-faith criteria."@en ;
    sh:property [ sh:hasValue gufo:Kind ;
            sh:message "Safe harbors must be classified as gUFO Kind"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ;
            sh:severity sh:Violation ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:message "Safe harbor may specify good-faith criteria as a string."@en ;
            sh:minCount 0 ;
            sh:path cacontology-legal:goodFaithCriteria ;
            sh:severity sh:Info ],
        [ sh:class cacontology-legal:ComplianceIntelligenceFramework ;
            sh:message "Safe harbor may reference a supporting compliance intelligence framework."@en ;
            sh:minCount 0 ;
            sh:path cacontology-legal:supportedByFramework ;
            sh:severity sh:Info ] ;
    sh:targetClass cacontology-legal:SafeHarbor .

cacontology-legal-shapes:SextortionLawShape a sh:NodeShape ;
    rdfs:label "Sextortion Law Shape"@en ;
    sh:property [ sh:hasValue gufo:Kind ;
            sh:message "Must be classified as gUFO Kind"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-legal:SextortionLaw .

cacontology-legal-shapes:StatuteShape a sh:NodeShape ;
    rdfs:label "Statute Shape"@en ;
    rdfs:comment "Validates enacted statutes."@en ;
    sh:property [ sh:message "Statutes must extend gUFO Norm"@en ;
            sh:path rdfs:subClassOf ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:class gufo:Norm ] ;
            sh:severity sh:Violation ],
        [ sh:datatype xsd:string ;
            sh:message "Statute should have a name"@en ;
            sh:minCount 1 ;
            sh:path uco-core:name ;
            sh:severity sh:Warning ] ;
    sh:targetClass cacontology-legal:Statute .

cacontology-legal-shapes:TechnicalAssistanceParticipationShape a sh:NodeShape ;
    rdfs:label "Technical Assistance Participation Shape"@en ;
    rdfs:comment "Validates participation of organizations in technical assistance programs."@en ;
    sh:property [ sh:class uco-identity:Organization ;
            sh:message "Technical assistance must involve at least one organization"@en ;
            sh:minCount 1 ;
            sh:path [ sh:inversePath cacontology-legal:participatesIn ] ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-legal:TechnicalAssistance .

cacontology-legal-shapes:TestimonySubmissionShape a sh:NodeShape ;
    rdfs:label "Testimony Submission Shape"@en ;
    sh:property [ sh:hasValue gufo:EventType ;
            sh:message "Testimony submission must be classified as gUFO EventType"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-legal:TestimonySubmission .

cacontology-legal-shapes:TreatyFrameworkCompositionShape a sh:NodeShape ;
    rdfs:label "Treaty Framework Composition Shape"@en ;
    rdfs:comment "Validates compositional structure of treaty frameworks."@en ;
    sh:property [ sh:class cacontology-legal:NationalLegislation ;
            sh:message "Treaty framework should include implementing legislation from member countries"@en ;
            sh:minCount 2 ;
            sh:path [ sh:inversePath cacontology-legal:isComponentOf ] ;
            sh:severity sh:Warning ] ;
    sh:targetClass cacontology-legal:TreatyFramework .

cacontology-legal-shapes:TreatyFrameworkShape a sh:NodeShape ;
    rdfs:label "Treaty Framework Shape"@en ;
    rdfs:comment "Enhanced shape for international treaty frameworks with strength assessment."@en ;
    sh:property [ rdfs:comment "Treaty framework must have comprehensive name."@en ;
            sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 300 ;
            sh:minCount 1 ;
            sh:minLength 15 ;
            sh:path uco-core:name ],
        [ rdfs:comment "Treaty must facilitate international cooperation."@en ;
            sh:class cacontology-legal:InternationalLawEnforcement ;
            sh:minCount 1 ;
            sh:path cacontology-legal:facilitatesCooperation ],
        [ rdfs:comment "Multilateral treaty must apply to at least three countries."@en ;
            sh:class uco-location:Location ;
            sh:minCount 3 ;
            sh:path cacontology-legal:appliesToCountry ],
        [ sh:hasValue gufo:Kind ;
            sh:message "Must be classified as gUFO Kind"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ;
            sh:severity sh:Violation ],
        [ sh:datatype xsd:string ;
            sh:in ( "weak" "moderate" "strong" "binding" "comprehensive" ) ;
            sh:maxCount 1 ;
            sh:message "Treaty strength should be assessed"@en ;
            sh:path cacontology-legal:hasTreatyStrength ;
            sh:severity sh:Warning ] ;
    sh:targetClass cacontology-legal:TreatyFramework .

cacontology-multi:AutomatedEvidenceDistribution a owl:Class ;
    rdfs:label "Automated Evidence Distribution"@en ;
    rdfs:comment "Automated system for distributing evidence packages to appropriate jurisdictions based on user location and evidence strength."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-multi:CEOSCoordinatedOperation a owl:Class ;
    rdfs:label "CEOS Coordinated Operation"@en ;
    rdfs:comment "Operation coordinated by Child Exploitation and Obscenity Section (CEOS)."@en ;
    rdfs:subClassOf cacontology-multi:NationwideOperation .

cacontology-multi:CommunicationProtocolShape a sh:NodeShape ;
    rdfs:label "Communication Protocol Shape"@en ;
    rdfs:comment "Validation shape for communication protocol instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "formal_reporting" "informal_updates" "emergency_notification" "routine_briefing" "secure_messaging" "video_conference" ) ;
            sh:maxCount 1 ;
            sh:message "Communication protocol must specify protocol type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-multi:protocolType ],
        [ sh:datatype xsd:string ;
            sh:in ( "real_time" "daily" "weekly" "bi_weekly" "monthly" "as_needed" "emergency_only" ) ;
            sh:maxCount 1 ;
            sh:message "Communication protocol must specify frequency from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-multi:frequency ],
        [ sh:datatype xsd:string ;
            sh:in ( "open" "restricted" "confidential" "secret" "top_secret" "compartmented" ) ;
            sh:maxCount 1 ;
            sh:message "Communication protocol must specify security level from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-multi:securityLevel ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 50 ;
            sh:message "Communication protocol must have between 2 and 50 participants."@en ;
            sh:minCount 1 ;
            sh:minInclusive 2 ;
            sh:path cacontology-multi:participantCount ] ;
    sh:targetClass cacontology-multi:CommunicationProtocol .

cacontology-multi:ComplianceVisitCoordination a owl:Class ;
    rdfs:label "Compliance Visit Coordination"@en ;
    rdfs:comment "Coordination of multiple compliance visits across jurisdictions."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-multi:CoordinatedArrestWave a owl:Class ;
    rdfs:label "Coordinated Arrest Wave"@en ;
    rdfs:comment "Coordinated arrests conducted as part of larger operation."@en ;
    rdfs:subClassOf cacontology-multi:MultiJurisdictionalInvestigation .

cacontology-multi:CoordinatedCharging a owl:Class ;
    rdfs:label "Coordinated Charging"@en ;
    rdfs:comment "Coordinated charging decisions across multiple jurisdictions to ensure consistent prosecution approach."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-multi:CoordinatesWithShape a sh:PropertyShape ;
    sh:class cacontology-multi:JurisdictionCoordination ;
    sh:description "Links operation to coordination arrangements" ;
    sh:minCount 1 ;
    sh:name "coordinates with" ;
    sh:path cacontology-multi:coordinatesWith .

cacontology-multi:CoordinationConsistencyShape a sh:NodeShape ;
    rdfs:label "Coordination Consistency Shape"@en ;
    rdfs:comment "Enhanced coordination consistency validation with gUFO quality aspects."@en,
        "Validates coordination consistency in multi-jurisdictional operations."@en ;
    sh:sparql [ sh:message "Operations with many jurisdictions should have enhanced coordination."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-multi:jurisdictionCount ?count ;
                      cacontology-multi:coordinationLevel ?level .
                FILTER (?count > 10 && ?level IN ("minimal", "basic"))
            }
        """ ],
        [ sh:message "Operations with many jurisdictions should have enhanced coordination with high effectiveness (gUFO quality consistency)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-multi:jurisdictionCount ?count ;
                      cacontology-multi:coordinationLevel ?level ;
                      cacontology-multi:hasCoordinationEffectiveness ?effectiveness .
                FILTER (?count > 10 && ?level IN ("minimal", "basic"))
                FILTER (?effectiveness IN ("ineffective", "limited"))
            }
        """ ] ;
    sh:targetClass cacontology-multi:MultiJurisdictionalOperation .

cacontology-multi:CoordinationEffectivenessRule a sh:NodeShape ;
    rdfs:label "Coordination Effectiveness Rule"@en ;
    rdfs:comment "gUFO business rule: Effective coordination should correlate with high success rates."@en ;
    sh:sparql [ sh:message "Highly effective coordination should achieve success rates above 0.7 (gUFO business rule)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-multi:hasCoordinationEffectiveness "highly_effective" .
                $this cacontology-multi:hasSuccessRate ?rate .
                FILTER (?rate <= 0.7)
            }
        """ ] ;
    sh:targetClass cacontology-multi:MultiJurisdictionalInvestigation .

cacontology-multi:CoordinationPhaseTemporalShape a sh:NodeShape ;
    rdfs:label "Coordination Phase Temporal Shape"@en ;
    rdfs:comment "Validates gUFO temporal constraints for coordination phases."@en ;
    sh:property [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Coordination phase may have begin point timestamp."@en ;
            sh:path cacontology-multi:hasCoordinationPhaseBeginPoint ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Coordination phase may have end point timestamp."@en ;
            sh:path cacontology-multi:hasCoordinationPhaseEndPoint ] ;
    sh:sparql [ sh:message "Coordination phase end must be after begin when both are specified."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-multi:hasCoordinationPhaseBeginPoint ?start ;
                      cacontology-multi:hasCoordinationPhaseEndPoint ?end .
                FILTER (?end <= ?start)
            }
        """ ] ;
    sh:targetClass gufo:Phase .

cacontology-multi:CoordinationPhaseTypeValidationShape a sh:NodeShape ;
    rdfs:label "Coordination Phase Type Validation Shape"@en ;
    rdfs:comment "Validates gUFO Phase type consistency for coordination phases."@en ;
    sh:sparql [ sh:message "Coordination phases must be properly typed as gUFO Phase and extend appropriate investigation classes."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this rdf:type gufo:Phase .
                FILTER NOT EXISTS {
                    $this rdf:type ?phaseClass .
                    ?phaseClass rdfs:subClassOf cacontology-multi:MultiJurisdictionalInvestigation .
                }
            }
        """ ] ;
    sh:targetClass gufo:Phase .

cacontology-multi:CoordinationRoleShape a sh:NodeShape ;
    rdfs:label "Coordination Role Shape"@en ;
    rdfs:comment "Enhanced validation shape for coordination roles with gUFO quality aspects."@en ;
    sh:property [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Role effectiveness must be between 0.0 and 1.0 (gUFO quality aspect)."@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-multi:hasRoleEffectiveness ],
        [ sh:datatype xsd:string ;
            sh:in ( "minimal" "limited" "moderate" "high" "complete" ) ;
            sh:maxCount 1 ;
            sh:message "Authority level must be from allowed values (gUFO quality aspect)."@en ;
            sh:path cacontology-multi:hasAuthorityLevel ],
        [ sh:datatype xsd:string ;
            sh:in ( "poor" "slow" "adequate" "good" "excellent" ) ;
            sh:maxCount 1 ;
            sh:message "Responsiveness must be from allowed values (gUFO quality aspect)."@en ;
            sh:path cacontology-multi:hasResponsiveness ] ;
    sh:targetClass gufo:Role .

cacontology-multi:CoordinationRoleValidationShape a sh:NodeShape ;
    rdfs:label "Coordination Role Validation Shape"@en ;
    rdfs:comment "Validates gUFO Role type consistency for coordination roles."@en ;
    sh:sparql [ sh:message "Coordination roles must be properly typed as gUFO Role and extend UCO Role."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this rdf:type gufo:Role .
                FILTER NOT EXISTS {
                    $this rdfs:subClassOf uco-role:Role .
                }
            }
        """ ] ;
    sh:targetClass gufo:Role .

cacontology-multi:CoordinationStructureCompositionShape a sh:NodeShape ;
    rdfs:label "Coordination Structure Composition Shape"@en ;
    rdfs:comment "Validates gUFO part-whole relationships for coordination structures."@en ;
    sh:sparql [ sh:message "Complex coordination must include designated lead agency and coordination roles (gUFO part-whole constraint)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this rdf:type cacontology-multi:MultiJurisdictionalInvestigation .
                $this cacontology-multi:coordinationLevel ?level .
                FILTER (?level IN ("enhanced", "comprehensive", "full_integration"))
                FILTER NOT EXISTS { $this cacontology-multi:leadBy ?leadAgency }
            }
        """ ] ;
    sh:targetClass cacontology-multi:MultiJurisdictionalInvestigation .

cacontology-multi:CriticalInformationSharingRule a sh:NodeShape ;
    rdfs:label "Critical Information Sharing Rule"@en ;
    rdfs:comment "gUFO business rule: Critical intelligence requires high security and real-time sharing."@en ;
    sh:sparql [ sh:message "Critical intelligence sharing must have high security level and timely delivery (gUFO business rule)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-multi:hasIntelligenceValue "critical" .
                $this cacontology-multi:hasSecurityLevel ?security .
                $this cacontology-multi:hasTimeliness ?timeliness .
                FILTER (?security IN ("low", "moderate"))
                FILTER (?timeliness IN ("delayed", "slow"))
            }
        """ ] ;
    sh:targetClass cacontology-multi:InformationSharing .

cacontology-multi:CrossBorderOperationShape a sh:NodeShape ;
    rdfs:label "Cross Border Operation Shape"@en ;
    rdfs:comment "Validation shape for cross border operation instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "state_border" "national_border" "international_border" "tribal_boundary" "territorial_boundary" ) ;
            sh:maxCount 1 ;
            sh:message "Cross border operation must specify border type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-multi:borderType ],
        [ sh:datatype xsd:string ;
            sh:in ( "mutual_legal_assistance" "extradition_treaty" "law_enforcement_cooperation" "bilateral_agreement" "multilateral_treaty" ) ;
            sh:maxCount 1 ;
            sh:message "Treaty basis must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-multi:treatyBasis ],
        [ sh:datatype xsd:string ;
            sh:in ( "domestic_law" "international_law" "treaty_law" "bilateral_agreement" "memorandum_understanding" ) ;
            sh:maxCount 1 ;
            sh:message "Cross border operation must specify legal framework from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-multi:legalFramework ] ;
    sh:targetClass cacontology-multi:CrossBorderOperation .

cacontology-multi:DataQualityShape a sh:NodeShape ;
    rdfs:label "Data Quality Shape"@en ;
    rdfs:comment "Validates data quality for multi-jurisdictional operations."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Label should be between 5 and 200 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 5 ;
            sh:path rdfs:label ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 1000 ;
            sh:message "Comment should be between 10 and 1000 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 10 ;
            sh:path rdfs:comment ] ;
    sh:targetClass cacontology-multi:MultiJurisdictionalOperation .

cacontology-multi:ExtraditionRequest a owl:Class ;
    rdfs:label "Extradition Request"@en ;
    rdfs:comment "Legal request to transfer suspect between jurisdictions."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:ObservableObject .

cacontology-multi:FederalAgency a owl:Class ;
    rdfs:label "Federal Agency"@en ;
    rdfs:comment "Law enforcement agency with federal jurisdiction."@en ;
    rdfs:subClassOf cacontology-multi:LawEnforcementAgency .

cacontology-multi:FederalJurisdiction a owl:Class ;
    rdfs:label "Federal Jurisdiction"@en ;
    rdfs:comment "Legal authority under federal law and courts."@en ;
    rdfs:subClassOf cacontology-multi:Jurisdiction .

cacontology-multi:FederalStateCooperationShape a sh:NodeShape ;
    rdfs:label "Federal State Cooperation Shape"@en ;
    rdfs:comment "Validation shape for federal state cooperation instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "state_police" "attorney_general" "bureau_investigation" "icac_task_force" "local_police" "sheriff_office" ) ;
            sh:maxCount 1 ;
            sh:message "Federal state cooperation must specify state agency from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-multi:stateAgency ],
        [ sh:datatype xsd:string ;
            sh:in ( "consultation" "assistance" "joint_operation" "task_force" "full_partnership" "federal_takeover" ) ;
            sh:maxCount 1 ;
            sh:message "Federal state cooperation must specify cooperation level from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-multi:cooperationLevel ],
        [ sh:datatype xsd:string ;
            sh:in ( "fbi" "dhs" "ice" "dea" "atf" "usms" "postal_inspection" "secret_service" ) ;
            sh:maxCount 1 ;
            sh:message "Federal state cooperation must specify federal agency from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-multi:federalAgency ] ;
    sh:targetClass cacontology-multi:FederalStateCooperation .

cacontology-multi:HighComplexityCoordinationRule a sh:NodeShape ;
    rdfs:label "High Complexity Coordination Rule"@en ;
    rdfs:comment "gUFO business rule: Highly complex operations require enhanced coordination mechanisms."@en ;
    sh:sparql [ sh:message "Highly complex multi-jurisdictional operations must have enhanced or comprehensive coordination level (gUFO business rule)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-multi:hasComplexityLevel ?complexity .
                $this cacontology-multi:coordinationLevel ?coordination .
                FILTER (?complexity IN ("highly_complex", "extremely_complex"))
                FILTER (?coordination IN ("minimal", "basic", "standard"))
            }
        """ ] ;
    sh:targetClass cacontology-multi:MultiJurisdictionalInvestigation .

cacontology-multi:InformationSharingAgreement a owl:Class ;
    rdfs:label "Information Sharing Agreement"@en ;
    rdfs:comment "Agreement governing sharing of sensitive information between agencies."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:ObservableObject .

cacontology-multi:InformationSharingParticipationShape a sh:NodeShape ;
    rdfs:label "Information Sharing Participation Shape"@en ;
    rdfs:comment "Validates gUFO participation constraints for information sharing."@en ;
    sh:sparql [ sh:message "Information sharing must involve at least 2 organizations (gUFO participation constraint)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this rdf:type cacontology-multi:InformationSharing .
                {
                    SELECT $this (COUNT(DISTINCT ?org) AS ?orgCount)
                    WHERE {
                        { $this cacontology-multi:sharesInformationWith ?org } UNION
                        { ?org cacontology-multi:sharesInformationWith $this }
                    }
                    GROUP BY $this
                }
                FILTER (?orgCount < 1)
            }
        """ ] ;
    sh:targetClass cacontology-multi:InformationSharing .

cacontology-multi:InformationSharingShape a sh:NodeShape ;
    rdfs:label "Information Sharing Shape"@en ;
    rdfs:comment "Enhanced validation shape for information sharing instances with gUFO quality aspects."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "intelligence_sharing" "evidence_sharing" "case_information" "suspect_information" "victim_information" "operational_intelligence" ) ;
            sh:maxCount 1 ;
            sh:message "Information sharing must specify sharing type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-multi:sharingType ],
        [ sh:datatype xsd:string ;
            sh:in ( "unclassified" "law_enforcement_sensitive" "confidential" "secret" "top_secret" "compartmented" ) ;
            sh:maxCount 1 ;
            sh:message "Information sharing must specify classification level from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-multi:classificationLevel ],
        [ sh:datatype xsd:string ;
            sh:in ( "secure_database" "encrypted_email" "liaison_officer" "formal_request" "intelligence_bulletin" "joint_briefing" ) ;
            sh:maxCount 1 ;
            sh:message "Information sharing must specify sharing mechanism from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-multi:sharingMechanism ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Information sharing must specify if reciprocity is required."@en ;
            sh:minCount 1 ;
            sh:path cacontology-multi:reciprocityRequired ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Information sharing must specify sharing date."@en ;
            sh:minCount 1 ;
            sh:path cacontology-multi:sharingDate ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Sharing efficiency must be between 0.0 and 1.0 (gUFO quality aspect)."@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-multi:hasSharingEfficiency ],
        [ sh:datatype xsd:string ;
            sh:in ( "low" "moderate" "high" "very_high" "maximum" ) ;
            sh:maxCount 1 ;
            sh:message "Security level must be from allowed values (gUFO quality aspect)."@en ;
            sh:path cacontology-multi:hasSecurityLevel ],
        [ sh:datatype xsd:string ;
            sh:in ( "delayed" "slow" "timely" "fast" "real_time" ) ;
            sh:maxCount 1 ;
            sh:message "Timeliness must be from allowed values (gUFO quality aspect)."@en ;
            sh:path cacontology-multi:hasTimeliness ],
        [ sh:datatype xsd:string ;
            sh:in ( "minimal" "low" "moderate" "high" "critical" ) ;
            sh:maxCount 1 ;
            sh:message "Intelligence value must be from allowed values (gUFO quality aspect)."@en ;
            sh:path cacontology-multi:hasIntelligenceValue ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Actionability must be between 0.0 and 1.0 (gUFO quality aspect)."@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-multi:hasActionability ] ;
    sh:targetClass cacontology-multi:InformationSharing .

cacontology-multi:InformationSynthesisPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Information Synthesis Phase"@en ;
    rdfs:comment "Phase involving compilation and analysis of multi-jurisdictional evidence."@en ;
    rdfs:subClassOf cacontology-multi:MultiJurisdictionalInvestigation .

cacontology-multi:InitialCoordinationPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Initial Coordination Phase"@en ;
    rdfs:comment "Phase involving initial contact and coordination between jurisdictions."@en ;
    rdfs:subClassOf cacontology-multi:MultiJurisdictionalInvestigation .

cacontology-multi:IntelligenceSharingShape a sh:NodeShape ;
    rdfs:label "Intelligence Sharing Shape"@en ;
    rdfs:comment "Validation shape for intelligence sharing instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "tactical_intelligence" "strategic_intelligence" "operational_intelligence" "threat_intelligence" "criminal_intelligence" "technical_intelligence" ) ;
            sh:maxCount 1 ;
            sh:message "Intelligence sharing must specify intelligence type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-multi:intelligenceType ],
        [ sh:datatype xsd:string ;
            sh:in ( "reliable" "usually_reliable" "fairly_reliable" "not_usually_reliable" "unreliable" "unknown" ) ;
            sh:maxCount 1 ;
            sh:message "Intelligence sharing must specify source reliability from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-multi:sourceReliability ],
        [ sh:datatype xsd:string ;
            sh:in ( "confirmed" "probably_true" "possibly_true" "doubtfully_true" "improbable" "cannot_be_judged" ) ;
            sh:maxCount 1 ;
            sh:message "Intelligence sharing must specify information accuracy from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-multi:informationAccuracy ] ;
    sh:targetClass cacontology-multi:IntelligenceSharing .

cacontology-multi:InteragencyCooperationRule a sh:NodeShape ;
    rdfs:label "Interagency Cooperation Rule"@en ;
    rdfs:comment "gUFO business rule: Agencies with high cooperation willingness should have substantial resource capacity."@en ;
    sh:sparql [ sh:message "Agencies with high cooperation willingness should maintain substantial resource capacity (gUFO business rule)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-multi:hasCooperationWillingness ?willingness .
                $this cacontology-multi:hasResourceCapacity ?capacity .
                FILTER (?willingness > 0.8)
                FILTER (?capacity IN ("insufficient", "limited"))
            }
        """ ] ;
    sh:targetClass cacontology-multi:LawEnforcementAgency .

cacontology-multi:InteragencyCooperationSituation a owl:Class ;
    rdfs:label "Inter-agency Cooperation Situation"@en ;
    rdfs:comment "Situation involving successful coordination between agencies."@en ;
    rdfs:subClassOf gufo:Situation .

cacontology-multi:InternationalAgency a owl:Class ;
    rdfs:label "International Agency"@en ;
    rdfs:comment "Law enforcement agency from foreign jurisdiction."@en ;
    rdfs:subClassOf cacontology-multi:LawEnforcementAgency .

cacontology-multi:InternationalJurisdiction a owl:Class ;
    rdfs:label "International Jurisdiction"@en ;
    rdfs:comment "Legal authority in foreign countries."@en ;
    rdfs:subClassOf cacontology-multi:Jurisdiction .

cacontology-multi:InternationalLegalHarmonization a owl:Class ;
    rdfs:label "International Legal Harmonization"@en ;
    rdfs:comment "Harmonization of legal approaches across countries for consistent prosecution of global platform users."@en ;
    rdfs:subClassOf cacontology-multi:InternationalProsecutionFramework .

cacontology-multi:InterstateTraffickingNetwork a owl:Class ;
    rdfs:label "Interstate Trafficking Network"@en ;
    rdfs:comment "Criminal network operating across state boundaries for trafficking."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-multi:InvolvesJurisdictionShape a sh:PropertyShape ;
    sh:class uco-location:Location ;
    sh:description "Links operation to jurisdictions involved" ;
    sh:minCount 2 ;
    sh:name "involves jurisdiction" ;
    sh:path cacontology-multi:involvesJurisdiction .

cacontology-multi:JointExecutionPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Joint Execution Phase"@en ;
    rdfs:comment "Phase involving coordinated execution of multi-jurisdictional operations."@en ;
    rdfs:subClassOf cacontology-multi:MultiJurisdictionalInvestigation .

cacontology-multi:JointInvestigation a owl:Class ;
    rdfs:label "Joint Investigation"@en ;
    rdfs:comment "Investigation conducted jointly by multiple law enforcement agencies."@en ;
    rdfs:subClassOf cacontology-multi:MultiJurisdictionalInvestigation .

cacontology-multi:JurisdictionCoordinationShape a sh:NodeShape ;
    rdfs:label "Jurisdiction Coordination Shape"@en ;
    rdfs:comment "Validation shape for jurisdiction coordination instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "information_sharing" "resource_sharing" "joint_operations" "parallel_investigations" "unified_command" "liaison_coordination" ) ;
            sh:maxCount 1 ;
            sh:message "Jurisdiction coordination must specify coordination type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-multi:coordinationType ],
        [ sh:datatype xsd:string ;
            sh:in ( "formal_mou" "informal_agreement" "statutory_authority" "task_force_charter" "operational_protocol" "ad_hoc_arrangement" ) ;
            sh:maxCount 1 ;
            sh:message "Jurisdiction coordination must specify coordination agreement from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-multi:coordinationAgreement ],
        [ sh:datatype xsd:string ;
            sh:in ( "secure_channels" "encrypted_communication" "liaison_officers" "joint_command_center" "regular_briefings" "real_time_updates" ) ;
            sh:maxCount 1 ;
            sh:message "Jurisdiction coordination must specify communication protocol from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-multi:communicationProtocol ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Jurisdiction coordination must specify if data sharing is enabled."@en ;
            sh:minCount 1 ;
            sh:path cacontology-multi:dataSharing ] ;
    sh:targetClass cacontology-multi:JurisdictionCoordination .

cacontology-multi:JurisdictionalConflictSituation a owl:Class ;
    rdfs:label "Jurisdictional Conflict Situation"@en ;
    rdfs:comment "Situation involving disputes over jurisdictional authority."@en ;
    rdfs:subClassOf gufo:Situation .

cacontology-multi:JurisdictionalNegotiationPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Jurisdictional Negotiation Phase"@en ;
    rdfs:comment "Phase involving determination of lead agency and jurisdictional authority."@en ;
    rdfs:subClassOf cacontology-multi:MultiJurisdictionalInvestigation .

cacontology-multi:LargeScaleResourceSharingRule a sh:NodeShape ;
    rdfs:label "Large Scale Resource Sharing Rule"@en ;
    rdfs:comment "gUFO business rule: Large-scale resource sharing requires high availability and cost effectiveness."@en ;
    sh:sparql [ sh:message "High-value resource sharing must have good or better cost effectiveness (gUFO business rule)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-multi:resourceValue ?value .
                $this cacontology-multi:hasCostEffectiveness ?effectiveness .
                FILTER (?value > 500000)
                FILTER (?effectiveness IN ("poor", "fair"))
            }
        """ ] ;
    sh:targetClass cacontology-multi:ResourceSharing .

cacontology-multi:LawEnforcementAgencyShape a sh:NodeShape ;
    rdfs:label "Law Enforcement Agency Shape"@en ;
    rdfs:comment "Enhanced validation shape for law enforcement agency instances with gUFO quality aspects."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "limited" "basic" "standard" "advanced" "elite" ) ;
            sh:maxCount 1 ;
            sh:message "Capability level must be from allowed values (gUFO quality aspect)."@en ;
            sh:path cacontology-multi:hasCapabilityLevel ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Cooperation willingness must be between 0.0 and 1.0 (gUFO quality aspect)."@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-multi:hasCooperationWillingness ],
        [ sh:datatype xsd:string ;
            sh:in ( "insufficient" "limited" "adequate" "substantial" "extensive" ) ;
            sh:maxCount 1 ;
            sh:message "Resource capacity must be from allowed values (gUFO quality aspect)."@en ;
            sh:path cacontology-multi:hasResourceCapacity ] ;
    sh:targetClass cacontology-multi:LawEnforcementAgency .

cacontology-multi:LegalCoordinationShape a sh:NodeShape ;
    rdfs:label "Legal Coordination Shape"@en ;
    rdfs:comment "Validation shape for legal coordination instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "venue_determination" "charge_coordination" "plea_negotiation" "sentencing_coordination" "asset_forfeiture" "extradition" ) ;
            sh:maxCount 1 ;
            sh:message "Legal coordination must specify coordination purpose from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-multi:coordinationPurpose ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Legal coordination must specify if prosecutor is involved."@en ;
            sh:minCount 1 ;
            sh:path cacontology-multi:prosecutorInvolvement ],
        [ sh:datatype xsd:string ;
            sh:in ( "none" "venue_conflicts" "double_jeopardy" "statute_limitations" "jurisdictional_overlap" "sovereignty_issues" ) ;
            sh:maxCount 1 ;
            sh:message "Jurisdictional issues must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-multi:jurisdictionalIssues ],
        [ sh:datatype xsd:string ;
            sh:in ( "negotiation" "mediation" "arbitration" "court_determination" "administrative_ruling" "policy_guidance" ) ;
            sh:maxCount 1 ;
            sh:message "Resolution mechanism must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-multi:resolutionMechanism ] ;
    sh:targetClass cacontology-multi:LegalCoordination .

cacontology-multi:LiaisonOfficer a gufo:Role,
        owl:Class ;
    rdfs:label "Liaison Officer"@en ;
    rdfs:comment "Officer responsible for communication between agencies."@en ;
    rdfs:subClassOf uco-role:Role .

cacontology-multi:LocalAgency a owl:Class ;
    rdfs:label "Local Agency"@en ;
    rdfs:comment "Law enforcement agency with local jurisdiction (city, county, municipal)."@en ;
    rdfs:subClassOf cacontology-multi:LawEnforcementAgency .

cacontology-multi:LocalJurisdiction a owl:Class ;
    rdfs:label "Local Jurisdiction"@en ;
    rdfs:comment "Legal authority at local level (city, county, municipal)."@en ;
    rdfs:subClassOf cacontology-multi:Jurisdiction .

cacontology-multi:MassUserJurisdictionMapping a owl:Class ;
    rdfs:label "Mass User Jurisdiction Mapping"@en ;
    rdfs:comment "Mapping of massive user bases to appropriate jurisdictions for prosecution based on location and legal frameworks."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-multi:MultiAgencyOperationCompositionShape a sh:NodeShape ;
    rdfs:label "Multi-Agency Operation Composition Shape"@en ;
    rdfs:comment "Validates gUFO part-whole relationships for multi-agency operations."@en ;
    sh:sparql [ sh:message "Multi-agency operation must include agencies operating in different jurisdictions (gUFO part-whole constraint)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this rdf:type cacontology-multi:MultiJurisdictionalInvestigation .
                {
                    SELECT $this (COUNT(DISTINCT ?jurisdiction) AS ?jurisdictionCount)
                    WHERE {
                        $this cacontology-multi:involvesAgency ?agency .
                        ?agency cacontology-multi:operatesInJurisdiction ?jurisdiction .
                    }
                    GROUP BY $this
                }
                FILTER (?jurisdictionCount < 2)
            }
        """ ] ;
    sh:targetClass cacontology-multi:MultiJurisdictionalInvestigation .

cacontology-multi:MultiJurisdictionalCrossReferenceShape a sh:NodeShape ;
    rdfs:label "Multi-Jurisdictional Cross Reference Shape"@en ;
    rdfs:comment "Enhanced cross-reference validation with gUFO constraints for multi-jurisdictional operations."@en,
        "Validates cross-references between multi-jurisdictional operations and related entities."@en ;
    sh:sparql [ sh:message "Multi-jurisdictional operation must involve at least two jurisdictions."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-multi:MultiJurisdictionalOperation ;
                      cacontology-multi:jurisdictionCount ?count .
                FILTER (?count < 2)
            }
        """ ],
        [ sh:message "Multi-jurisdictional operation must involve at least two jurisdictions (enhanced gUFO validation)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-multi:MultiJurisdictionalOperation ;
                      cacontology-multi:jurisdictionCount ?count .
                FILTER (?count < 2)
            }
        """ ],
        [ sh:message "gUFO Event typing must be consistent with temporal properties."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this rdf:type*/rdfs:subClassOf* gufo:Event .
                FILTER NOT EXISTS {
                    { $this gufo:hasBeginPointInXSDDateTimeStamp ?start } UNION
                    { $this uco-core:startTime ?start }
                }
            }
        """ ] ;
    sh:targetClass cacontology-multi:MultiJurisdictionalOperation .

cacontology-multi:MultiJurisdictionalDataQualityShape a sh:NodeShape ;
    rdfs:label "Multi-Jurisdictional Data Quality Shape"@en ;
    rdfs:comment "Enhanced data quality validation for multi-jurisdictional operations with gUFO quality aspects."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "poor" "fair" "good" "excellent" "validated" ) ;
            sh:maxCount 1 ;
            sh:message "Data quality must be from allowed values (gUFO quality aspect)."@en ;
            sh:path cacontology-multi:hasDataQuality ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Data completeness must be between 0.0 and 1.0 (gUFO quality aspect)."@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-multi:hasDataCompleteness ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Data consistency must be between 0.0 and 1.0 (gUFO quality aspect)."@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-multi:hasDataConsistency ],
        [ sh:datatype xsd:string ;
            sh:in ( "none" "basic" "standard" "comprehensive" "certified" ) ;
            sh:maxCount 1 ;
            sh:message "Validation level must be from allowed values (gUFO quality aspect)."@en ;
            sh:path cacontology-multi:hasValidationLevel ] ;
    sh:sparql [ sh:message "High-quality data should have good completeness and consistency (gUFO data quality rule)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-multi:hasDataQuality ?quality .
                $this cacontology-multi:hasDataCompleteness ?completeness .
                $this cacontology-multi:hasDataConsistency ?consistency .
                FILTER (?quality IN ("excellent", "validated"))
                FILTER (?completeness < 0.8 || ?consistency < 0.8)
            }
        """ ],
        [ sh:message "Complex operations should have comprehensive validation (gUFO data quality rule)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-multi:hasComplexityLevel ?complexity .
                $this cacontology-multi:hasValidationLevel ?validation .
                FILTER (?complexity IN ("highly_complex", "extremely_complex"))
                FILTER (?validation IN ("none", "basic"))
            }
        """ ] ;
    sh:targetClass cacontology-multi:MultiJurisdictionalInvestigation .

cacontology-multi:MultiJurisdictionalEventTemporalShape a sh:NodeShape ;
    rdfs:label "Multi-Jurisdictional Event Temporal Shape"@en ;
    rdfs:comment "Validates gUFO temporal constraints for multi-jurisdictional events."@en ;
    sh:sparql [ sh:message "gUFO Events must have consistent temporal boundaries with end after start."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this gufo:hasBeginPointInXSDDateTimeStamp ?start ;
                      gufo:hasEndPointInXSDDateTimeStamp ?end .
                FILTER (?end <= ?start)
            }
        """ ] ;
    sh:targetClass cacontology-multi:MultiJurisdictionalInvestigation .

cacontology-multi:MultiJurisdictionalEventTypeValidationShape a sh:NodeShape ;
    rdfs:label "Multi-Jurisdictional Event Type Validation Shape"@en ;
    rdfs:comment "Validates gUFO Event type consistency for multi-jurisdictional investigations."@en ;
    sh:property [ sh:hasValue gufo:Event ;
            sh:message "Multi-jurisdictional investigation must be typed as gUFO Event."@en ;
            sh:minCount 1 ;
            sh:path rdf:type ],
        [ sh:hasValue gufo:Event ;
            sh:message "Multi-jurisdictional investigation class should extend gUFO Event."@en ;
            sh:minCount 0 ;
            sh:path rdfs:subClassOf ] ;
    sh:targetClass cacontology-multi:MultiJurisdictionalInvestigation .

cacontology-multi:MultiJurisdictionalOperationShape a sh:NodeShape ;
    rdfs:label "Multi-Jurisdictional Operation Shape"@en ;
    rdfs:comment "Enhanced validation shape for multi-jurisdictional operation instances with gUFO quality aspects."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "joint_investigation" "task_force_operation" "cross_border_coordination" "federal_state_cooperation" "international_cooperation" "multi_agency_response" ) ;
            sh:maxCount 1 ;
            sh:message "Multi-jurisdictional operation must specify operation type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-multi:operationType ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 50 ;
            sh:message "Multi-jurisdictional operation must involve between 2 and 50 jurisdictions."@en ;
            sh:minCount 1 ;
            sh:minInclusive 2 ;
            sh:path cacontology-multi:jurisdictionCount ],
        [ sh:datatype xsd:string ;
            sh:in ( "federal" "state" "local" "international" "task_force" "joint_command" ) ;
            sh:maxCount 1 ;
            sh:message "Multi-jurisdictional operation must specify lead agency type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-multi:leadAgency ],
        [ sh:datatype xsd:string ;
            sh:in ( "minimal" "basic" "standard" "enhanced" "comprehensive" "full_integration" ) ;
            sh:maxCount 1 ;
            sh:message "Multi-jurisdictional operation must specify coordination level from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-multi:coordinationLevel ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 1095.0 ;
            sh:message "Operation duration must be between 1 and 1095 days (3 years)."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1.0 ;
            sh:path cacontology-multi:operationDuration ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Multi-jurisdictional operation may have a start time."@en ;
            sh:minCount 0 ;
            sh:path uco-core:startTime ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Multi-jurisdictional operation may have an end time."@en ;
            sh:minCount 0 ;
            sh:path uco-core:endTime ],
        [ sh:datatype xsd:string ;
            sh:in ( "ineffective" "limited" "moderate" "effective" "highly_effective" ) ;
            sh:maxCount 1 ;
            sh:message "Coordination effectiveness must be from allowed values (gUFO quality aspect)."@en ;
            sh:path cacontology-multi:hasCoordinationEffectiveness ],
        [ sh:datatype xsd:string ;
            sh:in ( "simple" "moderate" "complex" "highly_complex" "extremely_complex" ) ;
            sh:maxCount 1 ;
            sh:message "Complexity level must be from allowed values (gUFO quality aspect)."@en ;
            sh:path cacontology-multi:hasComplexityLevel ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Success rate must be between 0.0 and 1.0 (gUFO quality aspect)."@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-multi:hasSuccessRate ],
        [ sh:datatype xsd:string ;
            sh:in ( "minimal" "low" "moderate" "high" "intensive" ) ;
            sh:maxCount 1 ;
            sh:message "Coordination intensity must be from allowed values (gUFO quality aspect)."@en ;
            sh:path cacontology-multi:hasCoordinationIntensity ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Unification level must be between 0.0 and 1.0 (gUFO quality aspect)."@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-multi:hasUnificationLevel ] ;
    sh:targetClass cacontology-multi:MultiJurisdictionalOperation .

cacontology-multi:MultiJurisdictionalParticipationShape a sh:NodeShape ;
    rdfs:label "Multi-Jurisdictional Participation Shape"@en ;
    rdfs:comment "Validates gUFO participation constraints for multi-jurisdictional investigations."@en ;
    sh:sparql [ sh:message "Multi-jurisdictional investigation must have at least 2 participating agencies (gUFO participation constraint)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this rdf:type cacontology-multi:MultiJurisdictionalInvestigation .
                {
                    SELECT $this (COUNT(DISTINCT ?agency) AS ?agencyCount)
                    WHERE {
                        $this cacontology-multi:involvesAgency ?agency .
                    }
                    GROUP BY $this
                }
                FILTER (?agencyCount < 2)
            }
        """ ] ;
    sh:targetClass cacontology-multi:MultiJurisdictionalInvestigation .

cacontology-multi:MultiJurisdictionalSituation a owl:Class ;
    rdfs:label "Multi-Jurisdictional Situation"@en ;
    rdfs:comment "Complex situation requiring coordination across multiple jurisdictions."@en ;
    rdfs:subClassOf gufo:Situation .

cacontology-multi:MutualAidRequest a owl:Class ;
    rdfs:label "Mutual Aid Request"@en ;
    rdfs:comment "Formal request for assistance from another jurisdiction."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:ObservableObject .

cacontology-multi:NationwideChildRescueCoordination a owl:Class ;
    rdfs:label "Nationwide Child Rescue Coordination"@en ;
    rdfs:comment "Coordination of child rescue operations across entire country."@en ;
    rdfs:subClassOf cacontology-multi:MassChildRescueOperation .

cacontology-multi:OperationSafeOnlineSummerType a owl:Class ;
    rdfs:label "Operation Safe Online Summer Type"@en ;
    rdfs:comment "Type of national operation coordinated across 61+ ICAC Task Forces."@en ;
    rdfs:subClassOf cacontology-multi:NationalCoordinatedOperation .

cacontology-multi:OrganizationObjectTypeValidationShape a sh:NodeShape ;
    rdfs:label "Organization Object Type Validation Shape"@en ;
    rdfs:comment "Validates gUFO Object type consistency for law enforcement organizations."@en ;
    sh:property [ sh:hasValue gufo:Object ;
            sh:message "Law enforcement agency should extend gUFO Object."@en ;
            sh:minCount 0 ;
            sh:path rdfs:subClassOf ] ;
    sh:targetClass cacontology-multi:LawEnforcementAgency .

cacontology-multi:ParticipatingAgency a gufo:Role,
        owl:Class ;
    rdfs:label "Participating Agency"@en ;
    rdfs:comment "Agency providing support or resources to multi-jurisdictional investigation."@en ;
    rdfs:subClassOf uco-role:Role .

cacontology-multi:PersonnelSharingShape a sh:NodeShape ;
    rdfs:label "Personnel Sharing Shape"@en ;
    rdfs:comment "Validation shape for personnel sharing instances."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 100 ;
            sh:message "Personnel sharing must specify personnel count between 1 and 100."@en ;
            sh:minCount 1 ;
            sh:minInclusive 1 ;
            sh:path cacontology-multi:personnelCount ],
        [ sh:datatype xsd:string ;
            sh:in ( "investigators" "analysts" "technical_specialists" "supervisors" "support_staff" "subject_matter_experts" ) ;
            sh:maxCount 1 ;
            sh:message "Personnel sharing must specify personnel type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-multi:personnelType ],
        [ sh:datatype xsd:string ;
            sh:in ( "none_required" "public_trust" "confidential" "secret" "top_secret" "sci_access" ) ;
            sh:maxCount 1 ;
            sh:message "Security clearance must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-multi:securityClearance ] ;
    sh:targetClass cacontology-multi:PersonnelSharing .

cacontology-multi:PriorityProsecutionTrack a owl:Class ;
    rdfs:label "Priority Prosecution Track"@en ;
    rdfs:comment "High-priority prosecution track for most serious offenders identified in mass user analysis."@en ;
    rdfs:subClassOf cacontology-multi:UserTriageProsecution .

cacontology-multi:ProjectSafeChildhoodOperation a owl:Class ;
    rdfs:label "Project Safe Childhood Operation"@en ;
    rdfs:comment "Operation conducted under Project Safe Childhood initiative framework."@en ;
    rdfs:subClassOf cacontology-multi:NationwideOperation .

cacontology-multi:ProsecutionCapacityAnalysis a owl:Class ;
    rdfs:label "Prosecution Capacity Analysis"@en ;
    rdfs:comment "Analysis of prosecution capacity across jurisdictions to optimize case distribution for massive operations."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-multi:QualifiedCoordinationParticipationShape a sh:NodeShape ;
    rdfs:label "Qualified Coordination Participation Shape"@en ;
    rdfs:comment "Validates gUFO qualified participation situations in multi-jurisdictional coordination."@en ;
    sh:sparql [ sh:message "Qualified coordination participation must involve appropriate roles and events (gUFO qualified relation)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this rdf:type gufo:ParticipationSituation .
                $this gufo:standsInQualifiedParticipation ?role .
                $this cacontology-multi:concernsCoordinationEvent ?event .
                FILTER NOT EXISTS {
                    ?role rdf:type* cacontology-multi:CoordinatingAgent .
                    ?event rdf:type* cacontology-multi:MultiJurisdictionalInvestigation .
                }
            }
        """ ] ;
    sh:targetClass gufo:ParticipationSituation .

cacontology-multi:RegistrationComplianceViolation a owl:Class ;
    rdfs:label "Registration Compliance Violation"@en ;
    rdfs:comment "Violation of sex offender registration requirements."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-multi:RequiresLegalCoordinationShape a sh:PropertyShape ;
    sh:class cacontology-multi:LegalCoordination ;
    sh:description "Links operation to legal coordination needs" ;
    sh:minCount 0 ;
    sh:name "requires legal coordination" ;
    sh:path cacontology-multi:requiresLegalCoordination .

cacontology-multi:ResourceSharingShape a sh:NodeShape ;
    rdfs:label "Resource Sharing Shape"@en ;
    rdfs:comment "Enhanced validation shape for resource sharing instances with gUFO quality aspects."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "personnel" "equipment" "facilities" "expertise" "funding" "technology" "vehicles" "aircraft" ) ;
            sh:maxCount 1 ;
            sh:message "Resource sharing must specify resource type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-multi:resourceType ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 365.0 ;
            sh:message "Resource sharing duration must be between 1 and 365 days."@en ;
            sh:minCount 1 ;
            sh:minInclusive 1.0 ;
            sh:path cacontology-multi:sharingDuration ],
        [ sh:datatype xsd:string ;
            sh:in ( "no_cost" "shared_cost" "reimbursable" "grant_funded" "federal_funded" "requesting_agency_pays" ) ;
            sh:maxCount 1 ;
            sh:message "Resource sharing must specify cost sharing arrangement from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-multi:costSharing ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 10000000.0 ;
            sh:message "Resource value must be between $0 and $10,000,000."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-multi:resourceValue ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Resource utilization must be between 0.0 and 1.0 (gUFO quality aspect)."@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-multi:hasResourceUtilization ],
        [ sh:datatype xsd:string ;
            sh:in ( "poor" "fair" "good" "excellent" "optimal" ) ;
            sh:maxCount 1 ;
            sh:message "Cost effectiveness must be from allowed values (gUFO quality aspect)."@en ;
            sh:path cacontology-multi:hasCostEffectiveness ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Availability must be between 0.0 and 1.0 (gUFO quality aspect)."@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-multi:hasAvailability ] ;
    sh:targetClass cacontology-multi:ResourceSharing .

cacontology-multi:ResourceSharingValidationShape a sh:NodeShape ;
    rdfs:label "Resource Sharing Validation Shape"@en ;
    rdfs:comment "Enhanced resource sharing validation with gUFO quality constraints."@en,
        "Validates resource sharing arrangements."@en ;
    sh:sparql [ sh:message "High-value resource sharing should have cost sharing arrangement."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-multi:resourceValue ?value ;
                      cacontology-multi:costSharing "no_cost" .
                FILTER (?value > 100000)
            }
        """ ],
        [ sh:message "High-value resource sharing should have excellent cost effectiveness and high utilization (gUFO quality validation)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-multi:resourceValue ?value ;
                      cacontology-multi:hasCostEffectiveness ?effectiveness ;
                      cacontology-multi:hasResourceUtilization ?utilization .
                FILTER (?value > 100000)
                FILTER (?effectiveness IN ("poor", "fair") || ?utilization < 0.6)
            }
        """ ] ;
    sh:targetClass cacontology-multi:ResourceSharing .

cacontology-multi:RoleTemporalShape a sh:NodeShape ;
    rdfs:label "Role Temporal Shape"@en ;
    rdfs:comment "Validates gUFO temporal constraints for coordination roles."@en ;
    sh:property [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Coordination role may have begin point timestamp."@en ;
            sh:path cacontology-multi:hasRoleBeginPoint ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Coordination role may have end point timestamp."@en ;
            sh:path cacontology-multi:hasRoleEndPoint ] ;
    sh:sparql [ sh:message "Role end must be after begin when both are specified."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-multi:hasRoleBeginPoint ?start ;
                      cacontology-multi:hasRoleEndPoint ?end .
                FILTER (?end <= ?start)
            }
        """ ] ;
    sh:targetClass gufo:Role .

cacontology-multi:SchoolPresentationDisclosureWorkflow a owl:Class ;
    rdfs:label "School Presentation Disclosure Workflow"@en ;
    rdfs:comment "Workflow from school safety presentation to victim disclosure to rapid arrest."@en ;
    rdfs:subClassOf cacontology-multi:RapidResponseCoordination .

cacontology-multi:SharesInformationShape a sh:PropertyShape ;
    sh:class cacontology-multi:InformationSharing ;
    sh:description "Links operation to information sharing activities" ;
    sh:minCount 0 ;
    sh:name "shares information" ;
    sh:path cacontology-multi:sharesInformation .

cacontology-multi:SharesResourcesShape a sh:PropertyShape ;
    sh:class cacontology-multi:ResourceSharing ;
    sh:description "Links operation to resource sharing arrangements" ;
    sh:minCount 0 ;
    sh:name "shares resources" ;
    sh:path cacontology-multi:sharesResources .

cacontology-multi:SharingDateValidationShape a sh:NodeShape ;
    rdfs:label "Sharing Date Validation Shape"@en ;
    rdfs:comment "Validates information sharing date consistency."@en ;
    sh:sparql [ sh:message "Information sharing date should not be in the future."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-multi:sharingDate ?date .
                FILTER (?date > NOW())
            }
        """ ] ;
    sh:targetClass cacontology-multi:InformationSharing .

cacontology-multi:SimultaneousChildRescue a owl:Class ;
    rdfs:label "Simultaneous Child Rescue"@en ;
    rdfs:comment "Rescue of multiple children across different locations simultaneously."@en ;
    rdfs:subClassOf cacontology-multi:MassChildRescueOperation .

cacontology-multi:SituationTypeValidationShape a sh:NodeShape ;
    rdfs:label "Situation Type Validation Shape"@en ;
    rdfs:comment "Validates gUFO Situation type consistency for coordination situations."@en ;
    sh:property [ sh:hasValue gufo:Situation ;
            sh:message "Multi-jurisdictional situation should extend gUFO Situation."@en ;
            sh:minCount 0 ;
            sh:path rdfs:subClassOf ] ;
    sh:targetClass gufo:Situation .

cacontology-multi:StateAgency a owl:Class ;
    rdfs:label "State Agency"@en ;
    rdfs:comment "Law enforcement agency with state-level jurisdiction."@en ;
    rdfs:subClassOf cacontology-multi:LawEnforcementAgency .

cacontology-multi:StateJurisdiction a owl:Class ;
    rdfs:label "State Jurisdiction"@en ;
    rdfs:comment "Legal authority under state law and courts."@en ;
    rdfs:subClassOf cacontology-multi:Jurisdiction .

cacontology-multi:StatewideSweep a owl:Class ;
    rdfs:label "Statewide Sweep"@en ;
    rdfs:comment "Statewide operation conducting compliance checks across all jurisdictions."@en ;
    rdfs:subClassOf cacontology-multi:ComplianceMonitoringOperation .

cacontology-multi:TaskForceCompositionShape a sh:NodeShape ;
    rdfs:label "Task Force Composition Shape"@en ;
    rdfs:comment "Validates gUFO part-whole relationships for task force composition."@en ;
    sh:sparql [ sh:message "Task force composition must include agencies from at least 2 different jurisdictional levels (gUFO part-whole constraint)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this rdf:type cacontology-multi:TaskForce .
                {
                    SELECT $this (COUNT(DISTINCT ?level) AS ?levelCount)
                    WHERE {
                        $this cacontology-multi:includesAgency ?agency .
                        ?agency rdf:type ?agencyType .
                        ?agencyType rdfs:subClassOf* cacontology-multi:LawEnforcementAgency .
                        BIND(
                            IF(?agencyType = cacontology-multi:FederalAgency, "federal",
                            IF(?agencyType = cacontology-multi:StateAgency, "state",
                            IF(?agencyType = cacontology-multi:LocalAgency, "local", "other"))) AS ?level
                        )
                    }
                    GROUP BY $this
                }
                FILTER (?levelCount < 2)
            }
        """ ] ;
    sh:targetClass cacontology-multi:TaskForce .

cacontology-multi:TaskForceLeader a gufo:Role,
        owl:Class ;
    rdfs:label "Task Force Leader"@en ;
    rdfs:comment "Officer responsible for leading multi-agency task force operations."@en ;
    rdfs:subClassOf uco-role:Role .

cacontology-multi:TaskForceOperation a owl:Class ;
    rdfs:label "Task Force Operation"@en ;
    rdfs:comment "Coordinated operation conducted by multi-agency task force."@en ;
    rdfs:subClassOf cacontology-multi:MultiJurisdictionalInvestigation .

cacontology-multi:TaskForceParticipationShape a sh:NodeShape ;
    rdfs:label "Task Force Participation Shape"@en ;
    rdfs:comment "Validates gUFO participation constraints for task forces."@en ;
    sh:sparql [ sh:message "Task force must have at least 3 member agencies (gUFO participation constraint)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this rdf:type cacontology-multi:TaskForce .
                $this cacontology-multi:memberAgencyCount ?count .
                FILTER (?count < 3)
            }
        """ ] ;
    sh:targetClass cacontology-multi:TaskForce .

cacontology-multi:TaskForceReadinessRule a sh:NodeShape ;
    rdfs:label "Task Force Readiness Rule"@en ;
    rdfs:comment "gUFO business rule: Task forces with advanced expertise should have high operational readiness."@en ;
    sh:sparql [ sh:message "Task forces with expert-level expertise must have ready or deployed operational status (gUFO business rule)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-multi:hasExpertiseLevel ?expertise .
                $this cacontology-multi:hasOperationalReadiness ?readiness .
                FILTER (?expertise IN ("expert", "specialized"))
                FILTER (?readiness IN ("not_ready", "preparing"))
            }
        """ ] ;
    sh:targetClass cacontology-multi:TaskForce .

cacontology-multi:TaskForceShape a sh:NodeShape ;
    rdfs:label "Task Force Shape"@en ;
    rdfs:comment "Enhanced validation shape for task force instances with gUFO quality aspects."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "not_ready" "preparing" "ready" "fully_ready" "deployed" ) ;
            sh:maxCount 1 ;
            sh:message "Operational readiness must be from allowed values (gUFO quality aspect)."@en ;
            sh:path cacontology-multi:hasOperationalReadiness ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Cohesion level must be between 0.0 and 1.0 (gUFO quality aspect)."@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-multi:hasCohesionLevel ],
        [ sh:datatype xsd:string ;
            sh:in ( "basic" "intermediate" "advanced" "expert" "specialized" ) ;
            sh:maxCount 1 ;
            sh:message "Expertise level must be from allowed values (gUFO quality aspect)."@en ;
            sh:path cacontology-multi:hasExpertiseLevel ] ;
    sh:targetClass cacontology-multi:TaskForce .

cacontology-multi:TemporalValidationShape a sh:NodeShape ;
    rdfs:label "Temporal Validation Shape"@en ;
    rdfs:comment "Validates temporal consistency in multi-jurisdictional operations."@en ;
    sh:sparql [ sh:message "Start time must be before end time when both are specified."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this uco-core:startTime ?start ;
                      uco-core:endTime ?end .
                FILTER (?start >= ?end)
            }
        """ ] ;
    sh:targetClass cacontology-multi:MultiJurisdictionalOperation .

cacontology-multi:TraffickingCoordinationCenter a owl:Class ;
    rdfs:label "Trafficking Coordination Center"@en ;
    rdfs:comment "Center coordinating multi-state trafficking investigations."@en ;
    rdfs:subClassOf uco-identity:Organization .

cacontology-multi:TraffickingInvestigationTask a owl:Class ;
    rdfs:label "Trafficking Investigation Task"@en ;
    rdfs:comment "Specific investigation task in multi-state trafficking case."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-multi:UsesCommunicationProtocolShape a sh:PropertyShape ;
    sh:class cacontology-multi:CommunicationProtocol ;
    sh:description "Links operation to communication protocols" ;
    sh:minCount 1 ;
    sh:name "uses communication protocol" ;
    sh:path cacontology-multi:usesCommunicationProtocol .

cacontology-multi:agencyCount a owl:DatatypeProperty ;
    rdfs:label "agency count"@en ;
    rdfs:comment "Number of agencies participating in the investigation."@en ;
    rdfs:domain cacontology-multi:MultiJurisdictionalInvestigation ;
    rdfs:range xsd:integer .

cacontology-multi:agencyLevelsMixed a owl:DatatypeProperty ;
    rdfs:label "agency levels mixed"@en ;
    rdfs:comment "Whether operation includes federal, state, and local agencies (true/false)."@en ;
    rdfs:domain cacontology-multi:MassProsecutionCoordination ;
    rdfs:range xsd:boolean .

cacontology-multi:agencyParticipantCount a owl:DatatypeProperty ;
    rdfs:label "agency participant count"@en ;
    rdfs:comment "Number of agencies participating in operation (e.g., 31 agencies in Operation Hive Strike)."@en ;
    rdfs:domain cacontology-multi:MassProsecutionCoordination ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-multi:agentParticipantCount a owl:DatatypeProperty ;
    rdfs:label "agent participant count"@en ;
    rdfs:comment "Number of individual agents deployed in operation (e.g., 80+ agents in Operation Hive Strike)."@en ;
    rdfs:domain cacontology-multi:DistributedProsecutionTeam ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-multi:arrestsNationwide a owl:DatatypeProperty ;
    rdfs:label "arrests nationwide"@en ;
    rdfs:comment "Total number of arrests made across all participating jurisdictions."@en ;
    rdfs:domain cacontology-multi:NationwideOperation ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-multi:authorizedBy a owl:ObjectProperty ;
    rdfs:label "authorized by"@en ;
    rdfs:comment "Legal authorization enabling multi-jurisdictional operation."@en ;
    rdfs:domain cacontology-multi:MultiJurisdictionalInvestigation ;
    rdfs:range cacontology-multi:JurisdictionalWarrant .

cacontology-multi:casesSubmittedForProsecution a owl:DatatypeProperty ;
    rdfs:label "cases submitted for prosecution"@en ;
    rdfs:comment "Number of cases submitted for prosecution."@en ;
    rdfs:domain cacontology-multi:LargeScaleOperation ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-multi:chargeTypesDiversity a owl:DatatypeProperty ;
    rdfs:label "charge types diversity"@en ;
    rdfs:comment "Number of different charge types resulting from operation."@en ;
    rdfs:domain cacontology-multi:MassProsecutionCoordination ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-multi:childrenRescued a owl:DatatypeProperty ;
    rdfs:label "children rescued"@en ;
    rdfs:comment "Number of children rescued from ongoing abuse."@en ;
    rdfs:domain cacontology-multi:ChildRescueCoordination ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-multi:childrenRescuedCount a owl:DatatypeProperty ;
    rdfs:label "children rescued count"@en ;
    rdfs:comment "Total number of children rescued during operation."@en ;
    rdfs:domain cacontology-multi:MassChildRescueOperation ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-multi:communicationBarriers a owl:DatatypeProperty ;
    rdfs:label "communication barriers"@en ;
    rdfs:comment "Barriers to effective inter-agency communication."@en ;
    rdfs:domain cacontology-multi:MultiJurisdictionalInvestigation ;
    rdfs:range xsd:string .

cacontology-multi:communityOutreachEffectiveness a owl:DatatypeProperty ;
    rdfs:label "community outreach effectiveness"@en ;
    rdfs:comment "Effectiveness rating of community outreach in generating disclosures (0.0-1.0)."@en ;
    rdfs:domain cacontology-multi:CommunityOutreachTriggeredInvestigation ;
    rdfs:range xsd:decimal .

cacontology-multi:complianceViolationsFound a owl:DatatypeProperty ;
    rdfs:label "compliance violations found"@en ;
    rdfs:comment "Number of registration compliance violations discovered."@en ;
    rdfs:domain cacontology-multi:ComplianceMonitoringOperation ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-multi:complianceVisitsCount a owl:DatatypeProperty ;
    rdfs:label "compliance visits count"@en ;
    rdfs:comment "Number of compliance visits conducted during operation."@en ;
    rdfs:domain cacontology-multi:ComplianceMonitoringOperation ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-multi:coordinatedBy a owl:ObjectProperty ;
    rdfs:label "coordinated by"@en ;
    rdfs:comment "Links investigation to coordinating agent or officer."@en ;
    rdfs:domain cacontology-multi:MultiJurisdictionalInvestigation ;
    rdfs:range cacontology-multi:CoordinatingAgent .

cacontology-multi:coordinatesAgencies a owl:ObjectProperty ;
    rdfs:label "coordinates agencies"@en ;
    rdfs:comment "Links coordination mechanism to participating agencies."@en ;
    rdfs:domain cacontology-multi:MassProsecutionCoordination ;
    rdfs:range uco-identity:Organization .

cacontology-multi:coordinatesComplianceChecks a owl:ObjectProperty ;
    rdfs:label "coordinates compliance checks"@en ;
    rdfs:comment "Operation coordinates individual compliance checks."@en ;
    rdfs:domain cacontology-multi:ComplianceMonitoringOperation ;
    rdfs:range cacontology-multi:SexOffenderComplianceCheck .

cacontology-multi:coordinatesNationwide a owl:ObjectProperty ;
    rdfs:label "coordinates nationwide"@en ;
    rdfs:comment "Links agency to nationwide coordination role."@en ;
    rdfs:domain uco-identity:Organization ;
    rdfs:range cacontology-multi:NationwideOperation .

cacontology-multi:coordinationCenterLocation a owl:DatatypeProperty ;
    rdfs:label "coordination center location"@en ;
    rdfs:comment "Location of operation coordination center."@en ;
    rdfs:domain cacontology-multi:NationalCoordinatedOperation ;
    rdfs:range xsd:string .

cacontology-multi:coordinationChallenges a owl:DatatypeProperty ;
    rdfs:label "coordination challenges"@en ;
    rdfs:comment "Challenges encountered in multi-jurisdictional coordination."@en ;
    rdfs:domain cacontology-multi:MultiJurisdictionalInvestigation ;
    rdfs:range xsd:string .

cacontology-multi:coordinationComplexity a owl:DatatypeProperty ;
    rdfs:label "coordination complexity"@en ;
    rdfs:comment "Complexity level of interstate coordination (simple, moderate, complex, highly_complex)."@en ;
    rdfs:domain cacontology-multi:InterstateCoordination ;
    rdfs:range xsd:string .

cacontology-multi:coordinationMechanism a owl:DatatypeProperty ;
    rdfs:label "coordination mechanism"@en ;
    rdfs:comment "Method used for inter-agency coordination (task_force, liaison, joint_operation, mou)."@en ;
    rdfs:domain cacontology-multi:MultiJurisdictionalInvestigation ;
    rdfs:range xsd:string .

cacontology-multi:coordinationPhaseDuration a owl:DatatypeProperty ;
    rdfs:label "coordination phase duration"@en ;
    rdfs:comment "Duration of coordination phase."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:duration .

cacontology-multi:costSharingArrangement a owl:DatatypeProperty ;
    rdfs:label "cost sharing arrangement"@en ;
    rdfs:comment "How costs are shared between agencies."@en ;
    rdfs:domain cacontology-multi:ResourceSharing ;
    rdfs:range xsd:string .

cacontology-multi:countiesInvolved a owl:DatatypeProperty ;
    rdfs:label "counties involved"@en ;
    rdfs:comment "Number of counties involved in statewide operation (e.g., 5 counties in Operation Hive Strike)."@en ;
    rdfs:domain cacontology-multi:MassProsecutionCoordination ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-multi:coversState a owl:ObjectProperty ;
    rdfs:label "covers state"@en ;
    rdfs:comment "Links statewide operation to state jurisdiction covered."@en ;
    rdfs:domain cacontology-multi:MassProsecutionCoordination ;
    rdfs:range uco-location:Location .

cacontology-multi:crossStateCommunication a owl:DatatypeProperty ;
    rdfs:label "cross state communication"@en ;
    rdfs:comment "Communication methods used for cross-state coordination."@en ;
    rdfs:domain cacontology-multi:InterstateCoordination ;
    rdfs:range xsd:string .

cacontology-multi:crossesBorders a owl:DatatypeProperty ;
    rdfs:label "crosses borders"@en ;
    rdfs:comment "Whether investigation crosses state or national borders."@en ;
    rdfs:domain cacontology-multi:MultiJurisdictionalInvestigation ;
    rdfs:range xsd:boolean .

cacontology-multi:crossingDocumentation a owl:DatatypeProperty ;
    rdfs:label "crossing documentation"@en ;
    rdfs:comment "Type of documentation evidencing state line crossing (gps, toll_records, surveillance, witness)."@en ;
    rdfs:domain cacontology-multi:StateLineCrossing ;
    rdfs:range xsd:string .

cacontology-multi:deploysAgents a owl:ObjectProperty ;
    rdfs:label "deploys agents"@en ;
    rdfs:comment "Links agent deployment coordination to individual agents or agent groups."@en ;
    rdfs:domain cacontology-multi:DistributedProsecutionTeam ;
    rdfs:range uco-role:Role .

cacontology-multi:destinationState a owl:ObjectProperty ;
    rdfs:label "destination state"@en ;
    rdfs:comment "State where transportation terminated."@en ;
    rdfs:domain cacontology-multi:StateLineCrossing ;
    rdfs:range uco-location:Location .

cacontology-multi:diplomaticChannels a owl:DatatypeProperty ;
    rdfs:label "diplomatic channels"@en ;
    rdfs:comment "Whether diplomatic channels were required for cooperation."@en ;
    rdfs:domain cacontology-multi:CrossBorderOperation ;
    rdfs:range xsd:boolean .

cacontology-multi:disclosureToArrestHours a owl:DatatypeProperty ;
    rdfs:label "disclosure to arrest hours"@en ;
    rdfs:comment "Time in hours from victim disclosure to suspect arrest."@en ;
    rdfs:domain cacontology-multi:RapidResponseCoordination ;
    rdfs:range xsd:decimal .

cacontology-multi:enablesRapidResponse a owl:ObjectProperty ;
    rdfs:label "enables rapid response"@en ;
    rdfs:comment "Links coordination mechanism to rapid response capability."@en ;
    rdfs:domain cacontology-multi:RapidResponseCoordination ;
    rdfs:range uco-action:Action .

cacontology-multi:facilitatedByCoordination a owl:ObjectProperty ;
    rdfs:label "facilitated by coordination"@en ;
    rdfs:comment "Links interstate investigation to coordination mechanism used."@en ;
    rdfs:domain cacontology-multi:InterstateTransportationOffense ;
    rdfs:range cacontology-multi:InterstateCoordination .

cacontology-multi:facilitatesChildRescue a owl:ObjectProperty ;
    rdfs:label "facilitates child rescue"@en ;
    rdfs:comment "Operation facilitates child rescue coordination."@en ;
    rdfs:domain cacontology-multi:LargeScaleOperation ;
    rdfs:range cacontology-multi:ChildRescueCoordination .

cacontology-multi:fbiFieldOfficesInvolved a owl:DatatypeProperty ;
    rdfs:label "FBI field offices involved"@en ;
    rdfs:comment "Number of FBI field offices participating in operation."@en ;
    rdfs:domain cacontology-multi:AllFBIFieldOfficesOperation ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-multi:governedByAgreement a owl:ObjectProperty ;
    rdfs:label "governed by agreement"@en ;
    rdfs:comment "Interagency agreement governing the cooperation."@en ;
    rdfs:domain cacontology-multi:MultiJurisdictionalInvestigation ;
    rdfs:range cacontology-multi:InteragencyAgreement .

cacontology-multi:grandJuryAcceptances a owl:DatatypeProperty ;
    rdfs:label "grand jury acceptances"@en ;
    rdfs:comment "Number of cases accepted for grand jury indictment."@en ;
    rdfs:domain cacontology-multi:LargeScaleOperation ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-multi:handoffType a owl:DatatypeProperty ;
    rdfs:label "handoff type"@en ;
    rdfs:comment "Type of jurisdictional handoff (state_to_federal, federal_to_state, state_to_state)."@en ;
    rdfs:domain cacontology-multi:JurisdictionalHandoff ;
    rdfs:range xsd:string .

cacontology-multi:handsOnArrestsCount a owl:DatatypeProperty ;
    rdfs:label "hands-on arrests count"@en ;
    rdfs:comment "Number of arrests for hands-on offenses."@en ;
    rdfs:domain cacontology-multi:HandsOnOffenseInvestigation ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-multi:hostedBy a owl:ObjectProperty ;
    rdfs:label "hosted by"@en ;
    rdfs:comment "Links operation to hosting task force or agency."@en ;
    rdfs:domain cacontology-multi:TaskForceHostedOperation ;
    rdfs:range uco-identity:Organization .

cacontology-multi:identifiesVictims a owl:ObjectProperty ;
    rdfs:label "identifies victims"@en ;
    rdfs:comment "Campaign includes victim identification tasks."@en ;
    rdfs:domain cacontology-multi:ProactiveInvestigationCampaign ;
    rdfs:range cacontology-multi:VictimIdentificationTask .

cacontology-multi:informationSharingLevel a owl:DatatypeProperty ;
    rdfs:label "information sharing level"@en ;
    rdfs:comment "Level of information sharing between agencies (full, limited, restricted)."@en ;
    rdfs:domain cacontology-multi:MultiJurisdictionalInvestigation ;
    rdfs:range xsd:string .

cacontology-multi:investigationScope a owl:DatatypeProperty ;
    rdfs:label "investigation scope"@en ;
    rdfs:comment "Geographic or jurisdictional scope of investigation (local, state, national, international)."@en ;
    rdfs:domain cacontology-multi:MultiJurisdictionalInvestigation ;
    rdfs:range xsd:string .

cacontology-multi:investigationsInitiated a owl:DatatypeProperty ;
    rdfs:label "investigations initiated"@en ;
    rdfs:comment "Number of new investigations initiated during campaign."@en ;
    rdfs:domain cacontology-multi:ProactiveInvestigationCampaign ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-multi:involvesAgency a owl:ObjectProperty ;
    rdfs:label "involves agency"@en ;
    rdfs:comment "Links investigation to participating law enforcement agency."@en ;
    rdfs:domain cacontology-multi:MultiJurisdictionalInvestigation ;
    rdfs:range cacontology-multi:LawEnforcementAgency .

cacontology-multi:involvesFBIFieldOffice a owl:ObjectProperty ;
    rdfs:label "involves FBI field office"@en ;
    rdfs:comment "Links operation to participating FBI field office."@en ;
    rdfs:domain cacontology-multi:AllFBIFieldOfficesOperation ;
    rdfs:range uco-identity:Organization .

cacontology-multi:involvesStateLineCrossing a owl:ObjectProperty ;
    rdfs:label "involves state line crossing"@en ;
    rdfs:comment "Links transportation offense to state line crossing events."@en ;
    rdfs:domain cacontology-multi:InterstateTransportationOffense ;
    rdfs:range cacontology-multi:StateLineCrossing .

cacontology-multi:involvesTraffickingInvestigation a owl:ObjectProperty ;
    rdfs:label "involves trafficking investigation"@en ;
    rdfs:comment "Operation involves multi-state trafficking investigation."@en ;
    rdfs:domain cacontology-multi:LargeScaleOperation ;
    rdfs:range cacontology-multi:MultiStateTraffickingInvestigation .

cacontology-multi:jurisdictionTriggerType a owl:DatatypeProperty ;
    rdfs:label "jurisdiction trigger type"@en ;
    rdfs:comment "Type of federal jurisdiction trigger (interstate_transport, wire_communication, federal_property)."@en ;
    rdfs:domain cacontology-multi:FederalJurisdictionTrigger ;
    rdfs:range xsd:string .

cacontology-multi:jurisdictionalConflicts a owl:DatatypeProperty ;
    rdfs:label "jurisdictional conflicts"@en ;
    rdfs:comment "Conflicts between jurisdictional authorities or procedures."@en ;
    rdfs:domain cacontology-multi:MultiJurisdictionalInvestigation ;
    rdfs:range xsd:string .

cacontology-multi:languageBarriers a owl:DatatypeProperty ;
    rdfs:label "language barriers"@en ;
    rdfs:comment "Language barriers encountered in international cooperation."@en ;
    rdfs:domain cacontology-multi:CrossBorderOperation ;
    rdfs:range xsd:string .

cacontology-multi:leadBy a owl:ObjectProperty ;
    rdfs:label "lead by"@en ;
    rdfs:comment "Identifies the lead agency for the investigation."@en ;
    rdfs:domain cacontology-multi:MultiJurisdictionalInvestigation ;
    rdfs:range cacontology-multi:LeadAgency .

cacontology-multi:legalComplexity a owl:DatatypeProperty ;
    rdfs:label "legal complexity"@en ;
    rdfs:comment "Assessment of legal complexity (low, medium, high, extreme)."@en ;
    rdfs:domain cacontology-multi:MultiJurisdictionalInvestigation ;
    rdfs:range xsd:string .

cacontology-multi:meetingFrequency a owl:DatatypeProperty ;
    rdfs:label "meeting frequency"@en ;
    rdfs:comment "How often coordination meetings are held (daily, weekly, monthly, as_needed)."@en ;
    rdfs:domain cacontology-multi:MultiJurisdictionalInvestigation ;
    rdfs:range xsd:string .

cacontology-multi:memberAgencyCount a owl:DatatypeProperty ;
    rdfs:label "member agency count"@en ;
    rdfs:comment "Number of agencies participating in task force."@en ;
    rdfs:domain cacontology-multi:TaskForce ;
    rdfs:range xsd:integer .

cacontology-multi:newVictimsIdentified a owl:DatatypeProperty ;
    rdfs:label "new victims identified"@en ;
    rdfs:comment "Number of new child victims identified."@en ;
    rdfs:domain cacontology-multi:VictimIdentificationTask ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-multi:operatesInJurisdiction a owl:ObjectProperty ;
    rdfs:label "operates in jurisdiction"@en ;
    rdfs:comment "Links agency to the jurisdiction where it has authority."@en ;
    rdfs:domain cacontology-multi:LawEnforcementAgency ;
    rdfs:range cacontology-multi:Jurisdiction .

cacontology-multi:operationDurationDays a owl:DatatypeProperty ;
    rdfs:label "operation duration days"@en ;
    rdfs:comment "Duration of operation in days (e.g., 4 days for Operation Hive Strike)."@en ;
    rdfs:domain cacontology-multi:MassProsecutionCoordination ;
    rdfs:range xsd:decimal .

cacontology-multi:operationName a owl:DatatypeProperty ;
    rdfs:label "operation name"@en ;
    rdfs:comment "Official name of the multi-jurisdictional operation."@en ;
    rdfs:domain cacontology-multi:NamedMultiJurisdictionalOperation ;
    rdfs:range xsd:string .

cacontology-multi:operationPhase a owl:DatatypeProperty ;
    rdfs:label "operation phase"@en ;
    rdfs:comment "Current phase of the operation (planning, execution, follow-up)."@en ;
    rdfs:domain cacontology-multi:NamedMultiJurisdictionalOperation ;
    rdfs:range xsd:string .

cacontology-multi:operationSuccessRating a owl:DatatypeProperty ;
    rdfs:label "operation success rating"@en ;
    rdfs:comment "Success rating of operation (most_successful, highly_successful, successful, limited)."@en ;
    rdfs:domain cacontology-multi:LargeScaleOperation ;
    rdfs:range xsd:string .

cacontology-multi:originatingState a owl:ObjectProperty ;
    rdfs:label "originating state"@en ;
    rdfs:comment "State where transportation originated."@en ;
    rdfs:domain cacontology-multi:StateLineCrossing ;
    rdfs:range uco-location:Location .

cacontology-multi:personnelAssigned a owl:DatatypeProperty ;
    rdfs:label "personnel assigned"@en ;
    rdfs:comment "Number of personnel assigned to task force."@en ;
    rdfs:domain cacontology-multi:TaskForce ;
    rdfs:range xsd:integer .

cacontology-multi:primaryJurisdiction a owl:ObjectProperty ;
    rdfs:label "primary jurisdiction"@en ;
    rdfs:comment "Primary legal jurisdiction for the investigation."@en ;
    rdfs:domain cacontology-multi:MultiJurisdictionalInvestigation ;
    rdfs:range cacontology-multi:Jurisdiction .

cacontology-multi:prosecutionAvoidanceBehavior a owl:DatatypeProperty ;
    rdfs:label "prosecution avoidance behavior"@en ;
    rdfs:comment "Behavior indicating attempt to avoid prosecution through flight."@en ;
    rdfs:domain cacontology-multi:InterstateFlightFromProsecution ;
    rdfs:range xsd:string .

cacontology-multi:providesAssistanceTo a owl:ObjectProperty ;
    rdfs:label "provides assistance to"@en ;
    rdfs:comment "Links agency providing assistance to requesting agency."@en ;
    rdfs:domain cacontology-multi:LawEnforcementAgency ;
    rdfs:range cacontology-multi:LawEnforcementAgency .

cacontology-multi:requestsAssistanceFrom a owl:ObjectProperty ;
    rdfs:label "requests assistance from"@en ;
    rdfs:comment "Links agency requesting assistance to providing agency."@en ;
    rdfs:domain cacontology-multi:LawEnforcementAgency ;
    rdfs:range cacontology-multi:LawEnforcementAgency .

cacontology-multi:requiresHandoff a owl:ObjectProperty ;
    rdfs:label "requires handoff"@en ;
    rdfs:comment "Links interstate offense to required jurisdictional handoff."@en ;
    rdfs:domain cacontology-multi:InterstateTransportationOffense ;
    rdfs:range cacontology-multi:JurisdictionalHandoff .

cacontology-multi:rescuesChildren a owl:ObjectProperty ;
    rdfs:label "rescues children"@en ;
    rdfs:comment "Links operation to child rescue activities."@en ;
    rdfs:domain cacontology-multi:MassChildRescueOperation ;
    rdfs:range uco-identity:Person .

cacontology-multi:searchWarrantsExecuted a owl:DatatypeProperty ;
    rdfs:label "search warrants executed"@en ;
    rdfs:comment "Number of search warrants executed during operation."@en ;
    rdfs:domain cacontology-multi:LargeScaleOperation,
        cacontology-multi:MassProsecutionCoordination ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-multi:sharesInformationWith a owl:ObjectProperty ;
    rdfs:label "shares information with"@en ;
    rdfs:comment "Links agency to another agency with which it shares information."@en ;
    rdfs:domain cacontology-multi:LawEnforcementAgency ;
    rdfs:range cacontology-multi:LawEnforcementAgency .

cacontology-multi:sharesResourcesWith a owl:ObjectProperty ;
    rdfs:label "shares resources with"@en ;
    rdfs:comment "Links agency to another agency with which it shares resources."@en ;
    rdfs:domain cacontology-multi:LawEnforcementAgency ;
    rdfs:range cacontology-multi:LawEnforcementAgency .

cacontology-multi:spansCounties a owl:ObjectProperty ;
    rdfs:label "spans counties"@en ;
    rdfs:comment "Links multi-county operation to specific counties involved."@en ;
    rdfs:domain cacontology-multi:MassProsecutionCoordination ;
    rdfs:range uco-location:Location .

cacontology-multi:specializedUnitsDeployed a owl:DatatypeProperty ;
    rdfs:label "specialized units deployed"@en ;
    rdfs:comment "Number of specialized units deployed in operation."@en ;
    rdfs:domain cacontology-multi:NamedMultiJurisdictionalOperation ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-multi:statesCrossed a owl:DatatypeProperty ;
    rdfs:label "states crossed"@en ;
    rdfs:comment "Number of state boundaries crossed during transportation."@en ;
    rdfs:domain cacontology-multi:StateLineCrossing ;
    rdfs:range xsd:integer .

cacontology-multi:statesInvolved a owl:DatatypeProperty ;
    rdfs:label "states involved"@en ;
    rdfs:comment "Number of states involved in trafficking investigation."@en ;
    rdfs:domain cacontology-multi:MultiStateTraffickingInvestigation ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-multi:statewideCoverage a owl:DatatypeProperty ;
    rdfs:label "statewide coverage"@en ;
    rdfs:comment "Whether operation covers entire state (true) or limited geographic area (false)."@en ;
    rdfs:domain cacontology-multi:MassProsecutionCoordination ;
    rdfs:range xsd:boolean .

cacontology-multi:successMetrics a owl:DatatypeProperty ;
    rdfs:label "success metrics"@en ;
    rdfs:comment "Metrics used to measure success of multi-jurisdictional cooperation."@en ;
    rdfs:domain cacontology-multi:MultiJurisdictionalInvestigation ;
    rdfs:range xsd:string .

cacontology-multi:targetStrategy a owl:DatatypeProperty ;
    rdfs:label "target strategy"@en ;
    rdfs:comment "Strategy for targeting multiple offender types (simultaneous, sequential, integrated)."@en ;
    rdfs:domain cacontology-multi:MassProsecutionCoordination ;
    rdfs:range xsd:string .

cacontology-multi:targetTypeCount a owl:DatatypeProperty ;
    rdfs:label "target type count"@en ;
    rdfs:comment "Number of different offender types targeted simultaneously (e.g., 2 for predators and distributors)."@en ;
    rdfs:domain cacontology-multi:MassProsecutionCoordination ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-multi:targetsOffenderType a owl:ObjectProperty ;
    rdfs:label "targets offender type"@en ;
    rdfs:comment "Links multi-jurisdictional operation to specific offender types targeted."@en ;
    rdfs:domain cacontology-multi:MassProsecutionCoordination ;
    rdfs:range uco-role:Role .

cacontology-multi:taskForceDuration a owl:DatatypeProperty ;
    rdfs:label "task force duration"@en ;
    rdfs:comment "Expected duration of task force operation (in months)."@en ;
    rdfs:domain cacontology-multi:TaskForce ;
    rdfs:range xsd:integer .

cacontology-multi:taskForceType a owl:DatatypeProperty ;
    rdfs:label "task force type"@en ;
    rdfs:comment "Type of task force (permanent, temporary, ad_hoc, specialized)."@en ;
    rdfs:domain cacontology-multi:TaskForce ;
    rdfs:range xsd:string .

cacontology-multi:taskForcesInvolved a owl:DatatypeProperty ;
    rdfs:label "task forces involved"@en ;
    rdfs:comment "Number of ICAC task forces participating in operation."@en ;
    rdfs:domain cacontology-multi:NationalCoordinatedOperation ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-multi:timeZoneChallenges a owl:DatatypeProperty ;
    rdfs:label "time zone challenges"@en ;
    rdfs:comment "Challenges posed by different time zones in coordination."@en ;
    rdfs:domain cacontology-multi:CrossBorderOperation ;
    rdfs:range xsd:string .

cacontology-multi:totalArrests a owl:DatatypeProperty ;
    rdfs:label "total arrests"@en ;
    rdfs:comment "Total number of arrests made during operation."@en ;
    rdfs:domain cacontology-multi:MassProsecutionCoordination,
        cacontology-multi:OperationMetricsTracking ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-multi:traffickingCasesIdentified a owl:DatatypeProperty ;
    rdfs:label "trafficking cases identified"@en ;
    rdfs:comment "Number of trafficking cases identified."@en ;
    rdfs:domain cacontology-multi:MultiStateTraffickingInvestigation ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-multi:transportationIntent a owl:DatatypeProperty ;
    rdfs:label "transportation intent"@en ;
    rdfs:comment "Intent for transportation (sexual_activity, sexual_conduct, avoiding_prosecution)."@en ;
    rdfs:domain cacontology-multi:TransportationForIllegalPurpose ;
    rdfs:range xsd:string .

cacontology-multi:transportationMethod a owl:DatatypeProperty ;
    rdfs:label "transportation method"@en ;
    rdfs:comment "Method of transportation (vehicle, bus, train, plane, other)."@en ;
    rdfs:domain cacontology-multi:InterstateVictimTransport ;
    rdfs:range xsd:string .

cacontology-multi:triggeredByOutreach a owl:ObjectProperty ;
    rdfs:label "triggered by outreach"@en ;
    rdfs:comment "Links investigation to community outreach that triggered it."@en ;
    rdfs:domain cacontology-multi:CommunityOutreachTriggeredInvestigation ;
    rdfs:range uco-action:Action .

cacontology-multi:triggersJurisdiction a owl:ObjectProperty ;
    rdfs:label "triggers jurisdiction"@en ;
    rdfs:comment "Links transportation offense to federal jurisdiction trigger."@en ;
    rdfs:domain cacontology-multi:InterstateTransportationOffense ;
    rdfs:range cacontology-multi:FederalJurisdictionTrigger .

cacontology-multi:uncoversCrossStateEvidence a owl:ObjectProperty ;
    rdfs:label "uncovers cross-state evidence"@en ;
    rdfs:comment "Investigation uncovers evidence across multiple states."@en ;
    rdfs:domain cacontology-multi:MultiStateTraffickingInvestigation ;
    rdfs:range cacontology-multi:CrossStateEvidence .

cacontology-multi:usAttorneyOfficesInvolved a owl:DatatypeProperty ;
    rdfs:label "US Attorney offices involved"@en ;
    rdfs:comment "Number of US Attorney's Offices participating in operation."@en ;
    rdfs:domain cacontology-multi:USAttorneyOfficeParticipation ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-multi:usersForProsecutionMillions a owl:DatatypeProperty ;
    rdfs:label "users for prosecution millions"@en ;
    rdfs:comment "Number of users targeted for prosecution in millions."@en ;
    rdfs:domain cacontology-multi:MassProsecutionCoordination ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-multi:utilizesCoordination a owl:ObjectProperty ;
    rdfs:label "utilizes coordination"@en ;
    rdfs:comment "Links named operation to coordination mechanisms used."@en ;
    rdfs:domain cacontology-multi:MassProsecutionCoordination ;
    rdfs:range cacontology-multi:MassProsecutionCoordination .

cacontology-partnerships:AICooperation a owl:Class ;
    rdfs:label "AI Cooperation"@en ;
    rdfs:comment "Cooperation in developing AI-based solutions for detection, analysis, and prevention of child exploitation. Modeled as gUFO Event."@en ;
    rdfs:subClassOf cacontology-partnerships:TechnologyCooperation .

cacontology-partnerships:AcademicPartner a gufo:Role,
        owl:Class ;
    rdfs:label "Academic Partner"@en ;
    rdfs:comment "Academic institution participating in partnership with research and training capabilities. Modeled as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf cacontology-partnerships:PartnerRole .

cacontology-partnerships:AcademicPartnership a owl:Class ;
    rdfs:label "Academic Partnership"@en ;
    rdfs:comment "Partnership with academic institutions for research, training, and technology development in child protection. Modeled as gUFO Organization."@en ;
    rdfs:subClassOf cacontology-partnerships:PublicPrivatePartnership .

cacontology-partnerships:ActiveCooperationPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Active Cooperation Phase"@en ;
    rdfs:comment "Phase of active cooperation with joint operations and information sharing. Modeled as anti-rigid gUFO Phase."@en ;
    rdfs:subClassOf cacontology-partnerships:PublicPrivatePartnership .

cacontology-partnerships:CivilSocietyEngagement a owl:Class ;
    rdfs:label "Civil Society Engagement"@en ;
    rdfs:comment "Framework for engaging civil society, volunteers, and public participation in child protection initiatives. Modeled as gUFO Organization."@en ;
    rdfs:subClassOf cacontology-partnerships:PublicPrivatePartnership .

cacontology-partnerships:CollaborativeInvestigationSituation a owl:Class ;
    rdfs:label "Collaborative Investigation Situation"@en ;
    rdfs:comment "Complex situation involving multiple partners working together on investigations. Modeled as gUFO Situation."@en ;
    rdfs:subClassOf gufo:Situation .

cacontology-partnerships:EvaluationPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Evaluation Phase"@en ;
    rdfs:comment "Phase of partnership evaluation and effectiveness assessment. Modeled as anti-rigid gUFO Phase."@en ;
    rdfs:subClassOf cacontology-partnerships:PublicPrivatePartnership .

cacontology-partnerships:InformationSharingSituation a owl:Class ;
    rdfs:label "Information Sharing Situation"@en ;
    rdfs:comment "Situation involving active information sharing between partnership entities. Modeled as gUFO Situation."@en ;
    rdfs:subClassOf gufo:Situation .

cacontology-partnerships:NGOCoordination a owl:Class ;
    rdfs:label "NGO Coordination"@en ;
    rdfs:comment "Coordination framework with non-governmental organizations specializing in child protection and victim advocacy. Modeled as gUFO Organization."@en ;
    rdfs:subClassOf cacontology-partnerships:PublicPrivatePartnership .

cacontology-partnerships:OSINTInvestigation a owl:Class ;
    rdfs:label "OSINT Investigation"@en ;
    rdfs:comment "Open source intelligence investigation conducted by skilled volunteers and researchers. Modeled as gUFO Event."@en ;
    rdfs:subClassOf cacontology-partnerships:CommunityAnalysis .

cacontology-partnerships:PartnershipFormationPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Partnership Formation Phase"@en ;
    rdfs:comment "Phase of partnership formation including agreement negotiation and framework establishment. Modeled as anti-rigid gUFO Phase."@en ;
    rdfs:subClassOf cacontology-partnerships:PublicPrivatePartnership .

cacontology-partnerships:PublicTip a owl:Class ;
    rdfs:label "Public Tip"@en ;
    rdfs:comment "Information provided by members of the public in response to crowdsourcing requests. Modeled as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:ObservableObject .

cacontology-partnerships:RenewalPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Renewal Phase"@en ;
    rdfs:comment "Phase of partnership renewal or renegotiation. Modeled as anti-rigid gUFO Phase."@en ;
    rdfs:subClassOf cacontology-partnerships:PublicPrivatePartnership .

cacontology-partnerships:TaskForceCoordination a owl:Class ;
    rdfs:label "Task Force Coordination"@en ;
    rdfs:comment "Coordination through multi-partner task forces with representatives from different organizations. Modeled as gUFO Event."@en ;
    rdfs:subClassOf cacontology-partnerships:CoordinationMechanism .

cacontology-partnerships:contributesToAnalysis a owl:ObjectProperty ;
    rdfs:label "contributes to analysis"@en ;
    rdfs:comment "Links civil society partners to community analysis they perform."@en ;
    rdfs:domain cacontology-partnerships:CivilSocietyPartner ;
    rdfs:range cacontology-partnerships:CommunityAnalysis .

cacontology-partnerships:cooperatesOn a owl:ObjectProperty ;
    rdfs:label "cooperates on"@en ;
    rdfs:comment "Links partners to technology cooperation initiatives."@en ;
    rdfs:domain uco-identity:Organization ;
    rdfs:range cacontology-partnerships:TechnologyCooperation .

cacontology-partnerships:cooperationDuration a owl:DatatypeProperty ;
    rdfs:label "cooperation duration"@en ;
    rdfs:comment "Duration of cooperation event."@en ;
    rdfs:domain cacontology-partnerships:TechnologyCooperation ;
    rdfs:range xsd:duration .

cacontology-partnerships:enablesSharing a owl:ObjectProperty ;
    rdfs:label "enables sharing"@en ;
    rdfs:comment "Links technical integration to types of information sharing enabled."@en ;
    rdfs:domain cacontology-partnerships:TechnicalIntegration ;
    rdfs:range cacontology-partnerships:InformationSharingFramework .

cacontology-partnerships:generatesRequests a owl:ObjectProperty ;
    rdfs:label "generates requests"@en ;
    rdfs:comment "Links investigation to identification requests generated."@en ;
    rdfs:domain uco-action:Action ;
    rdfs:range cacontology-partnerships:ObjectIdentificationRequest .

cacontology-partnerships:hasCooperationBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has cooperation begin point"@en ;
    rdfs:comment "Temporal begin point for cooperation event."@en ;
    rdfs:domain cacontology-partnerships:TechnologyCooperation ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-partnerships:hasCooperationEndPoint a owl:DatatypeProperty ;
    rdfs:label "has cooperation end point"@en ;
    rdfs:comment "Temporal end point for cooperation event."@en ;
    rdfs:domain cacontology-partnerships:TechnologyCooperation ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-partnerships:participatesInOperation a owl:ObjectProperty ;
    rdfs:label "participates in operation"@en ;
    rdfs:comment "Links partners to joint operations they participate in."@en ;
    rdfs:domain uco-identity:Organization ;
    rdfs:range cacontology-partnerships:JointOperation .

cacontology-partnerships:phaseDuration a owl:DatatypeProperty ;
    rdfs:label "phase duration"@en ;
    rdfs:comment "Duration of partnership phase."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:duration .

cacontology-partnerships:providesMonitoring a owl:ObjectProperty ;
    rdfs:label "provides monitoring"@en ;
    rdfs:comment "Links technology partners to platform monitoring they provide."@en ;
    rdfs:domain cacontology-partnerships:TechnologyPartner ;
    rdfs:range cacontology-partnerships:PlatformMonitoring .

cacontology-partnerships:respondsToEmergency a owl:ObjectProperty ;
    rdfs:label "responds to emergency"@en ;
    rdfs:comment "Links partners to emergency coordination they participate in."@en ;
    rdfs:domain uco-identity:Organization ;
    rdfs:range cacontology-partnerships:EmergencyCoordination .

cacontology-partnerships:roleDuration a owl:DatatypeProperty ;
    rdfs:label "role duration"@en ;
    rdfs:comment "Duration of partner role."@en ;
    rdfs:domain gufo:Role ;
    rdfs:range xsd:duration .

cacontology-partnerships:sharesIntelligence a owl:ObjectProperty ;
    rdfs:label "shares intelligence"@en ;
    rdfs:comment "Links partners to intelligence sharing arrangements."@en ;
    rdfs:domain uco-identity:Organization ;
    rdfs:range cacontology-partnerships:IntelligenceSharing .

cacontology-partnerships-shapes:CommunityAnalysisShape a sh:NodeShape ;
    rdfs:label "Community Analysis Shape"@en ;
    rdfs:comment "Validation shape for community analysis instances."@en ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 10000.0 ;
            sh:message "Volunteer hours must be between 1.0 and 10,000.0."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1.0 ;
            sh:path cacontology-partnerships:volunteerHours ] ;
    sh:targetClass cacontology-partnerships:CommunityAnalysis .

cacontology-partnerships-shapes:ContentDetectionCooperationShape a sh:NodeShape ;
    rdfs:label "Content Detection Cooperation Shape"@en ;
    rdfs:comment "Validation shape for content detection cooperation instances."@en ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Detection accuracy must be between 0.5 and 1.0."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.5 ;
            sh:path cacontology-partnerships:detectionAccuracy ] ;
    sh:targetClass cacontology-partnerships:ContentDetectionCooperation .

cacontology-partnerships-shapes:CooperationEventTemporalShape a sh:NodeShape ;
    rdfs:label "Cooperation Event Temporal Shape"@en ;
    rdfs:comment "Validates gUFO temporal constraints for cooperation events."@en ;
    sh:sparql [ sh:message "gUFO Events must have consistent temporal boundaries with end after start."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this gufo:hasBeginPointInXSDDateTimeStamp ?start ;
                      gufo:hasEndPointInXSDDateTimeStamp ?end .
                FILTER (?end <= ?start)
            }
        """ ] ;
    sh:targetClass cacontology-partnerships:TechnologyCooperation .

cacontology-partnerships-shapes:CooperationEventTypeValidationShape a sh:NodeShape ;
    rdfs:label "Cooperation Event Type Validation Shape"@en ;
    rdfs:comment "Validates gUFO Event type consistency for cooperation events."@en ;
    sh:property [ sh:hasValue gufo:Event ;
            sh:message "Technology cooperation must be typed as gUFO Event."@en ;
            sh:minCount 1 ;
            sh:path rdf:type ] ;
    sh:sparql [ sh:message "Cooperation events must be properly typed as gUFO Event and extend UCO Action."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this rdf:type gufo:Event .
                FILTER NOT EXISTS {
                    $this rdf:type ?eventClass .
                    ?eventClass rdfs:subClassOf* uco-action:Action .
                }
            }
        """ ] ;
    sh:targetClass cacontology-partnerships:TechnologyCooperation .

cacontology-partnerships-shapes:CoordinatedByShape a sh:PropertyShape ;
    sh:class uco-identity:Organization ;
    sh:description "Links partnership activities to coordinating organization" ;
    sh:minCount 1 ;
    sh:name "coordinated by" ;
    sh:path cacontology-partnerships:coordinatedBy .

cacontology-partnerships-shapes:CoordinatedThroughShape a sh:PropertyShape ;
    sh:class cacontology-partnerships:CoordinationMechanism ;
    sh:description "Links partnership activities to coordination mechanisms used" ;
    sh:minCount 1 ;
    sh:name "coordinated through" ;
    sh:path cacontology-partnerships:coordinatedThrough .

cacontology-partnerships-shapes:CoordinationMechanismShape a sh:NodeShape ;
    rdfs:label "Coordination Mechanism Shape"@en ;
    rdfs:comment "Validation shape for coordination mechanism instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Coordination mechanism label should be between 5 and 200 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 5 ;
            sh:path rdfs:label ] ;
    sh:targetClass cacontology-partnerships:CoordinationMechanism .

cacontology-partnerships-shapes:CrowdsourcingEffectivenessRule a sh:NodeShape ;
    rdfs:label "Crowdsourcing Effectiveness Rule"@en ;
    rdfs:comment "Advanced gUFO business rule: High engagement effectiveness requires high participation and response quality."@en ;
    sh:sparql [ sh:message "High engagement effectiveness requires high participation level and excellent response quality (gUFO business rule)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-partnerships:hasEngagementEffectiveness ?effectiveness .
                FILTER (?effectiveness >= 0.8)
                {
                    FILTER NOT EXISTS {
                        $this cacontology-partnerships:hasParticipationLevel ?participation .
                        FILTER (?participation IN ("high", "massive"))
                    }
                } UNION {
                    FILTER NOT EXISTS {
                        $this cacontology-partnerships:hasResponseQuality ?quality .
                        FILTER (?quality IN ("excellent", "exceptional"))
                    }
                }
            }
        """ ] ;
    sh:targetClass cacontology-partnerships:CrowdsourcingInvestigation .

cacontology-partnerships-shapes:CrowdsourcingEffectivenessShape a sh:NodeShape ;
    rdfs:label "Crowdsourcing Effectiveness Shape"@en ;
    rdfs:comment "Validates crowdsourcing effectiveness metrics."@en ;
    sh:sparql [ sh:message "Object identification requests with high success rates should have received public tips."@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/partnerships#"^^xsd:anyURI ;
                            sh:prefix "cacontology-partnerships" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-partnerships:identificationSuccessRate ?rate .
                FILTER (?rate > 0.5)
                FILTER NOT EXISTS {
                    ?investigation cacontology-partnerships:generatesRequests $this ;
                                   cacontology-partnerships:publicTipsReceived ?tips .
                    FILTER (?tips > 0)
                }
            }
        """ ] ;
    sh:targetClass cacontology-partnerships:ObjectIdentificationRequest .

cacontology-partnerships-shapes:CrowdsourcingInvestigationShape a sh:NodeShape ;
    rdfs:label "Crowdsourcing Investigation Shape"@en ;
    rdfs:comment "Enhanced validation shape for crowdsourcing investigation instances with gUFO quality aspects."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 100000 ;
            sh:message "Public tips received must be between 0 and 100,000."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0 ;
            sh:path cacontology-partnerships:publicTipsReceived ],
        [ sh:datatype xsd:string ;
            sh:in ( "website" "social_media" "forums" "mobile_app" "specialized_platform" ) ;
            sh:maxCount 1 ;
            sh:message "Crowdsourcing platform must be from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-partnerships:crowdsourcingPlatform ],
        [ sh:datatype xsd:string ;
            sh:in ( "minimal" "low" "moderate" "high" "massive" ) ;
            sh:maxCount 1 ;
            sh:message "Participation level must be from allowed values (gUFO quality aspect)."@en ;
            sh:path cacontology-partnerships:hasParticipationLevel ],
        [ sh:datatype xsd:string ;
            sh:in ( "poor" "fair" "good" "excellent" "exceptional" ) ;
            sh:maxCount 1 ;
            sh:message "Response quality must be from allowed values (gUFO quality aspect)."@en ;
            sh:path cacontology-partnerships:hasResponseQuality ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Engagement effectiveness must be between 0.0 and 1.0 (gUFO quality aspect)."@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-partnerships:hasEngagementEffectiveness ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 100000 ;
            sh:message "Public tips received must be between 0 and 100,000."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0 ;
            sh:path cacontology-partnerships:publicTipsReceived ],
        [ sh:datatype xsd:string ;
            sh:in ( "website" "social_media" "forums" "mobile_app" "specialized_platform" ) ;
            sh:maxCount 1 ;
            sh:message "Crowdsourcing platform must be from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-partnerships:crowdsourcingPlatform ],
        [ sh:datatype xsd:string ;
            sh:in ( "minimal" "low" "moderate" "high" "massive" ) ;
            sh:maxCount 1 ;
            sh:message "Participation level must be from allowed values (gUFO quality aspect)."@en ;
            sh:path cacontology-partnerships:hasParticipationLevel ],
        [ sh:datatype xsd:string ;
            sh:in ( "poor" "fair" "good" "excellent" "exceptional" ) ;
            sh:maxCount 1 ;
            sh:message "Response quality must be from allowed values (gUFO quality aspect)."@en ;
            sh:path cacontology-partnerships:hasResponseQuality ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Engagement effectiveness must be between 0.0 and 1.0 (gUFO quality aspect)."@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-partnerships:hasEngagementEffectiveness ] ;
    sh:targetClass cacontology-partnerships:CrowdsourcingInvestigation .

cacontology-partnerships-shapes:DataQualityShape a sh:NodeShape ;
    rdfs:label "Data Quality Shape"@en ;
    rdfs:comment "Validates data quality for partnership instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Partnership label should be between 5 and 200 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 5 ;
            sh:path rdfs:label ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 1000 ;
            sh:message "Partnership comment should be between 10 and 1000 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 10 ;
            sh:path rdfs:comment ] ;
    sh:targetClass cacontology-partnerships:PublicPrivatePartnership .

cacontology-partnerships-shapes:DataSharingAgreementShape a sh:NodeShape ;
    rdfs:label "Data Sharing Agreement Shape"@en ;
    rdfs:comment "Validation shape for data sharing agreement instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "metadata_only" "hash_values" "intelligence_products" "full_data" ) ;
            sh:maxCount 1 ;
            sh:message "Data sharing level must be from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-partnerships:dataSharingLevel ] ;
    sh:targetClass cacontology-partnerships:DataSharingAgreement .

cacontology-partnerships-shapes:EmergencyCoordinationShape a sh:NodeShape ;
    rdfs:label "Emergency Coordination Shape"@en ;
    rdfs:comment "Validation shape for emergency coordination instances."@en ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 72.0 ;
            sh:message "Emergency response time must be between 0.25 and 72.0 hours."@en ;
            sh:minCount 1 ;
            sh:minInclusive 0.25 ;
            sh:path cacontology-partnerships:responseTime ] ;
    sh:targetClass cacontology-partnerships:EmergencyCoordination .

cacontology-partnerships-shapes:GeolocationRequestShape a sh:NodeShape ;
    rdfs:label "Geolocation Request Shape"@en ;
    rdfs:comment "Validation shape for geolocation request instances."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 500 ;
            sh:message "Locations to identify must be between 1 and 500."@en ;
            sh:minCount 1 ;
            sh:minInclusive 1 ;
            sh:path cacontology-partnerships:objectsToIdentify ] ;
    sh:targetClass cacontology-partnerships:GeolocationRequest .

cacontology-partnerships-shapes:GovernedByShape a sh:PropertyShape ;
    sh:class cacontology-partnerships:InformationSharingFramework ;
    sh:description "Links partnership to information sharing frameworks governing it" ;
    sh:minCount 0 ;
    sh:name "governed by" ;
    sh:path cacontology-partnerships:governedBy .

cacontology-partnerships-shapes:HasRoleShape a sh:PropertyShape ;
    sh:class cacontology-partnerships:PartnerRole ;
    sh:description "Links partner organization to their role in the partnership" ;
    sh:minCount 1 ;
    sh:name "has role" ;
    sh:path cacontology-partnerships:hasRole .

cacontology-partnerships-shapes:HashSharingProtocolShape a sh:NodeShape ;
    rdfs:label "Hash Sharing Protocol Shape"@en ;
    rdfs:comment "Validation shape for hash sharing protocol instances."@en ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 1000.0 ;
            sh:message "Hash database size must be between 0.1 and 1,000.0 million entries."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.1 ;
            sh:path cacontology-partnerships:hashDatabaseSize ] ;
    sh:targetClass cacontology-partnerships:HashSharingProtocol .

cacontology-partnerships-shapes:HighEffectivenessPartnershipRule a sh:NodeShape ;
    rdfs:label "High Effectiveness Partnership Rule"@en ;
    rdfs:comment "Advanced gUFO business rule: Highly effective partnerships should have high trust and coordination levels."@en ;
    sh:sparql [ sh:message "Highly effective partnerships must have high trust levels and enhanced coordination (gUFO business rule)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-partnerships:hasPartnershipEffectiveness "highly_effective" .
                {
                    FILTER NOT EXISTS {
                        $this cacontology-partnerships:hasTrustLevel ?trust .
                        FILTER (?trust >= 0.7)
                    }
                } UNION {
                    FILTER NOT EXISTS {
                        $this cacontology-partnerships:hasCoordinationLevel ?coord .
                        FILTER (?coord IN ("enhanced", "comprehensive"))
                    }
                }
            }
        """ ] ;
    sh:targetClass cacontology-partnerships:PublicPrivatePartnership .

cacontology-partnerships-shapes:IncludesPartnerShape a sh:PropertyShape ;
    sh:class uco-identity:Organization ;
    sh:description "Links partnership to participating organizations" ;
    sh:minCount 2 ;
    sh:name "includes partner" ;
    sh:path cacontology-partnerships:includesPartner .

cacontology-partnerships-shapes:InformationSharingCompositionShape a sh:NodeShape ;
    rdfs:label "Information Sharing Composition Shape"@en ;
    rdfs:comment "Validates gUFO part-whole relationships for information sharing composition."@en ;
    sh:sparql [ sh:message "Information sharing framework must be composed of technical and legal components (gUFO part-whole constraint)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this rdf:type cacontology-partnerships:InformationSharingFramework .
                FILTER NOT EXISTS {
                    ?agreement rdf:type cacontology-partnerships:DataSharingAgreement .
                    ?agreement rdfs:subClassOf* $this .
                } &&
                FILTER NOT EXISTS {
                    ?technical rdf:type cacontology-partnerships:TechnicalIntegration .
                    ?technical rdfs:subClassOf* $this .
                }
            }
        """ ] ;
    sh:targetClass cacontology-partnerships:InformationSharingFramework .

cacontology-partnerships-shapes:InformationSharingFrameworkShape a sh:NodeShape ;
    rdfs:label "Information Sharing Framework Shape"@en ;
    rdfs:comment "Enhanced validation shape for information sharing framework instances with gUFO quality aspects."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "poor" "fair" "good" "excellent" "verified" ) ;
            sh:maxCount 1 ;
            sh:message "Data quality must be from allowed values (gUFO quality aspect)."@en ;
            sh:path cacontology-partnerships:hasDataQuality ],
        [ sh:datatype xsd:string ;
            sh:in ( "real_time" "daily" "weekly" "monthly" "on_demand" ) ;
            sh:maxCount 1 ;
            sh:message "Sharing frequency must be from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-partnerships:sharingFrequency ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Sharing efficiency must be between 0.0 and 1.0 (gUFO quality aspect)."@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-partnerships:hasSharingEfficiency ],
        [ sh:datatype xsd:string ;
            sh:in ( "basic" "standard" "enhanced" "high" "maximum" ) ;
            sh:maxCount 1 ;
            sh:message "Security level must be from allowed values (gUFO quality aspect)."@en ;
            sh:path cacontology-partnerships:hasSecurityLevel ],
        [ sh:datatype xsd:string ;
            sh:in ( "poor" "fair" "good" "excellent" "verified" ) ;
            sh:maxCount 1 ;
            sh:message "Data quality must be from allowed values (gUFO quality aspect)."@en ;
            sh:path cacontology-partnerships:hasDataQuality ],
        [ sh:datatype xsd:string ;
            sh:in ( "real_time" "daily" "weekly" "monthly" "on_demand" ) ;
            sh:maxCount 1 ;
            sh:message "Sharing frequency must be from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-partnerships:sharingFrequency ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Sharing efficiency must be between 0.0 and 1.0 (gUFO quality aspect)."@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-partnerships:hasSharingEfficiency ],
        [ sh:datatype xsd:string ;
            sh:in ( "basic" "standard" "enhanced" "high" "maximum" ) ;
            sh:maxCount 1 ;
            sh:message "Security level must be from allowed values (gUFO quality aspect)."@en ;
            sh:path cacontology-partnerships:hasSecurityLevel ] ;
    sh:targetClass cacontology-partnerships:InformationSharingFramework .

cacontology-partnerships-shapes:InformationSharingSecurityRule a sh:NodeShape ;
    rdfs:label "Information Sharing Security Rule"@en ;
    rdfs:comment "Advanced gUFO business rule: High data quality requires enhanced security levels."@en ;
    sh:sparql [ sh:message "Excellent or verified data quality requires enhanced or high security levels (gUFO business rule)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-partnerships:hasDataQuality ?quality .
                FILTER (?quality IN ("excellent", "verified"))
                FILTER NOT EXISTS {
                    $this cacontology-partnerships:hasSecurityLevel ?security .
                    FILTER (?security IN ("enhanced", "high", "maximum"))
                }
            }
        """ ] ;
    sh:targetClass cacontology-partnerships:InformationSharingFramework .

cacontology-partnerships-shapes:JointOperationShape a sh:NodeShape ;
    rdfs:label "Joint Operation Shape"@en ;
    rdfs:comment "Validation shape for joint operation instances."@en ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Operation success rate must be between 0.0 and 1.0."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-partnerships:operationSuccess ] ;
    sh:targetClass cacontology-partnerships:JointOperation .

cacontology-partnerships-shapes:LawEnforcementPartnerShape a sh:NodeShape ;
    rdfs:label "Law Enforcement Partner Shape"@en ;
    rdfs:comment "Validation shape for law enforcement partner instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 100 ;
            sh:message "Law enforcement partner label should be between 3 and 100 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 3 ;
            sh:path rdfs:label ] ;
    sh:targetClass cacontology-partnerships:LawEnforcementPartner .

cacontology-partnerships-shapes:MultiStakeholderComplexityRule a sh:NodeShape ;
    rdfs:label "Multi-Stakeholder Complexity Rule"@en ;
    rdfs:comment "Advanced gUFO business rule: Multi-stakeholder initiatives with many partners need comprehensive coordination."@en ;
    sh:sparql [ sh:message "Multi-stakeholder initiatives with 5+ partners need comprehensive coordination level (gUFO business rule)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this rdf:type cacontology-partnerships:MultiStakeholderInitiative .
                {
                    SELECT $this (COUNT(DISTINCT ?partner) AS ?partnerCount)
                    WHERE {
                        $this cacontology-partnerships:includesPartner ?partner .
                    }
                    GROUP BY $this
                }
                FILTER (?partnerCount >= 5)
                FILTER NOT EXISTS {
                    $this cacontology-partnerships:hasCoordinationLevel "comprehensive" .
                }
            }
        """ ] ;
    sh:targetClass cacontology-partnerships:MultiStakeholderInitiative .

cacontology-partnerships-shapes:MultiStakeholderInitiativeShape a sh:NodeShape ;
    rdfs:label "Multi Stakeholder Initiative Shape"@en ;
    rdfs:comment "Validation shape for multi-stakeholder initiative instances."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 50 ;
            sh:message "Multi-stakeholder initiative must have between 3 and 50 partners."@en ;
            sh:minCount 1 ;
            sh:minInclusive 3 ;
            sh:path cacontology-partnerships:partnerCount ] ;
    sh:targetClass cacontology-partnerships:MultiStakeholderInitiative .

cacontology-partnerships-shapes:MultiStakeholderParticipationShape a sh:NodeShape ;
    rdfs:label "Multi-Stakeholder Participation Shape"@en ;
    rdfs:comment "Validates gUFO participation constraints for multi-stakeholder initiatives."@en ;
    sh:sparql [ sh:message "Multi-stakeholder initiative must include at least 3 different types of partners (gUFO participation constraint)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this rdf:type cacontology-partnerships:MultiStakeholderInitiative .
                {
                    SELECT $this (COUNT(DISTINCT ?roleType) AS ?roleTypeCount)
                    WHERE {
                        $this cacontology-partnerships:includesPartner ?partner .
                        ?partner cacontology-partnerships:hasRole ?role .
                        ?role rdf:type ?roleType .
                        ?roleType rdfs:subClassOf* cacontology-partnerships:PartnerRole .
                    }
                    GROUP BY $this
                }
                FILTER (?roleTypeCount < 3)
            }
        """ ] ;
    sh:targetClass cacontology-partnerships:MultiStakeholderInitiative .

cacontology-partnerships-shapes:NGOPartnerShape a sh:NodeShape ;
    rdfs:label "NGO Partner Shape"@en ;
    rdfs:comment "Validation shape for NGO partner instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 100 ;
            sh:message "NGO partner label should be between 3 and 100 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 3 ;
            sh:path rdfs:label ] ;
    sh:targetClass cacontology-partnerships:NGOPartner .

cacontology-partnerships-shapes:NationalInitiativeDataQualityShape a sh:NodeShape ;
    rdfs:label "National Initiative Data Quality Shape"@en ;
    rdfs:comment "Validates data quality for national initiative program instances."@en ;
    sh:sparql [ sh:message "National initiative programs should have realistic case processing numbers relative to their duration."@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/partnerships#"^^xsd:anyURI ;
                            sh:prefix "cacontology-partnerships" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-partnerships:casesProcessed ?cases ;
                      cacontology-partnerships:launchedDate ?launched .
                BIND (NOW() AS ?now)
                BIND ((?now - ?launched) / (365.25 * 24 * 60 * 60) AS ?yearsActive)
                BIND (?cases / ?yearsActive AS ?casesPerYear)
                FILTER (?casesPerYear > 5000)
            }
        """ ] ;
    sh:targetClass cacontology-partnerships:NationalInitiativeProgram .

cacontology-partnerships-shapes:NationalInitiativeProgramShape a sh:NodeShape ;
    rdfs:label "National Initiative Program Shape"@en ;
    rdfs:comment "Validation shape for national initiative program instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 100 ;
            sh:message "Initiative name must be between 3 and 100 characters."@en ;
            sh:minCount 1 ;
            sh:minLength 3 ;
            sh:path cacontology-partnerships:initiativeName ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "National initiative must have a launch date."@en ;
            sh:minCount 1 ;
            sh:path cacontology-partnerships:launchedDate ],
        [ sh:datatype xsd:string ;
            sh:in ( "federal" "state_coordination" "local_support" "multi_jurisdictional" ) ;
            sh:maxCount 1 ;
            sh:message "Program scope must be from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-partnerships:programScope ],
        [ sh:datatype xsd:string ;
            sh:in ( "DOJ" "DHS" "FBI" "ICE" "USAO" "ATF" ) ;
            sh:maxCount 1 ;
            sh:message "Lead agency must be from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-partnerships:leadAgency ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 10000 ;
            sh:message "Cases processed must be between 0 and 10,000."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0 ;
            sh:path cacontology-partnerships:casesProcessed ] ;
    sh:targetClass cacontology-partnerships:NationalInitiativeProgram .

cacontology-partnerships-shapes:ObjectIdentificationRequestShape a sh:NodeShape ;
    rdfs:label "Object Identification Request Shape"@en ;
    rdfs:comment "Validation shape for object identification request instances."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 1000 ;
            sh:message "Objects to identify must be between 1 and 1,000."@en ;
            sh:minCount 1 ;
            sh:minInclusive 1 ;
            sh:path cacontology-partnerships:objectsToIdentify ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Identification success rate must be between 0.0 and 1.0."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-partnerships:identificationSuccessRate ] ;
    sh:targetClass cacontology-partnerships:ObjectIdentificationRequest .

cacontology-partnerships-shapes:ParticipatesInDevelopmentShape a sh:PropertyShape ;
    sh:class cacontology-partnerships:ToolDevelopment ;
    sh:description "Links technology partners to development projects they participate in" ;
    sh:minCount 0 ;
    sh:name "participates in development" ;
    sh:path cacontology-partnerships:participatesInDevelopment .

cacontology-partnerships-shapes:PartnerRoleCapabilityCommitmentRule a sh:NodeShape ;
    rdfs:label "Partner Role Capability Commitment Rule"@en ;
    rdfs:comment "Advanced gUFO business rule: High role effectiveness requires advanced capabilities and high commitment."@en ;
    sh:sparql [ sh:message "High role effectiveness requires advanced capabilities and high commitment levels (gUFO business rule)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-partnerships:hasRoleEffectiveness ?effectiveness .
                FILTER (?effectiveness >= 0.8)
                {
                    FILTER NOT EXISTS {
                        $this cacontology-partnerships:hasCapabilityLevel ?capability .
                        FILTER (?capability IN ("advanced", "expert"))
                    }
                } UNION {
                    FILTER NOT EXISTS {
                        $this cacontology-partnerships:hasCommitmentLevel ?commitment .
                        FILTER (?commitment >= 0.7)
                    }
                }
            }
        """ ] ;
    sh:targetClass cacontology-partnerships:PartnerRole .

cacontology-partnerships-shapes:PartnerRoleShape a sh:NodeShape ;
    rdfs:label "Partner Role Shape"@en ;
    rdfs:comment "Enhanced validation shape for partner role instances with gUFO quality aspects."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 100 ;
            sh:message "Partner role label should be between 3 and 100 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 3 ;
            sh:path rdfs:label ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Role effectiveness must be between 0.0 and 1.0 (gUFO quality aspect)."@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-partnerships:hasRoleEffectiveness ],
        [ sh:datatype xsd:string ;
            sh:in ( "limited" "basic" "standard" "advanced" "expert" ) ;
            sh:maxCount 1 ;
            sh:message "Capability level must be from allowed values (gUFO quality aspect)."@en ;
            sh:path cacontology-partnerships:hasCapabilityLevel ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Commitment level must be between 0.0 and 1.0 (gUFO quality aspect)."@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-partnerships:hasCommitmentLevel ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 100 ;
            sh:message "Partner role label should be between 3 and 100 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 3 ;
            sh:path rdfs:label ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Role effectiveness must be between 0.0 and 1.0 (gUFO quality aspect)."@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-partnerships:hasRoleEffectiveness ],
        [ sh:datatype xsd:string ;
            sh:in ( "limited" "basic" "standard" "advanced" "expert" ) ;
            sh:maxCount 1 ;
            sh:message "Capability level must be from allowed values (gUFO quality aspect)."@en ;
            sh:path cacontology-partnerships:hasCapabilityLevel ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Commitment level must be between 0.0 and 1.0 (gUFO quality aspect)."@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-partnerships:hasCommitmentLevel ] ;
    sh:targetClass cacontology-partnerships:PartnerRole .

cacontology-partnerships-shapes:PartnerRoleTemporalShape a sh:NodeShape ;
    rdfs:label "Partner Role Temporal Shape"@en ;
    rdfs:comment "Validates gUFO temporal constraints for partner roles."@en ;
    sh:property [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Partner role may have begin point timestamp."@en ;
            sh:path cacontology-partnerships:hasRoleBeginPoint ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Partner role may have end point timestamp."@en ;
            sh:path cacontology-partnerships:hasRoleEndPoint ] ;
    sh:sparql [ sh:message "Role end must be after begin when both are specified."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-partnerships:hasRoleBeginPoint ?start ;
                      cacontology-partnerships:hasRoleEndPoint ?end .
                FILTER (?end <= ?start)
            }
        """ ] ;
    sh:targetClass gufo:Role .

cacontology-partnerships-shapes:PartnerRoleTypeValidationShape a sh:NodeShape ;
    rdfs:label "Partner Role Type Validation Shape"@en ;
    rdfs:comment "Validates gUFO Role type consistency for partner roles."@en ;
    sh:sparql [ sh:message "Partner roles must be properly typed as gUFO Role and extend UCO Role."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this rdf:type gufo:Role .
                FILTER NOT EXISTS {
                    $this rdfs:subClassOf* uco-role:Role .
                }
            }
        """ ] ;
    sh:targetClass gufo:Role .

cacontology-partnerships-shapes:PartnershipCompositionShape a sh:NodeShape ;
    rdfs:label "Partnership Composition Shape"@en ;
    rdfs:comment "Validates gUFO part-whole relationships for partnership composition."@en ;
    sh:sparql [ sh:message "Partnership composition must include complementary organizational capabilities (gUFO part-whole constraint)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this rdf:type cacontology-partnerships:PublicPrivatePartnership .
                $this cacontology-partnerships:includesPartner ?publicOrg .
                ?publicOrg cacontology-partnerships:hasRole ?publicRole .
                ?publicRole rdf:type cacontology-partnerships:LawEnforcementPartner .
                FILTER NOT EXISTS {
                    $this cacontology-partnerships:includesPartner ?privateOrg .
                    ?privateOrg cacontology-partnerships:hasRole ?privateRole .
                    ?privateRole rdf:type ?privateRoleType .
                    ?privateRoleType rdfs:subClassOf* cacontology-partnerships:PartnerRole .
                    FILTER (?privateRoleType != cacontology-partnerships:LawEnforcementPartner)
                }
            }
        """ ] ;
    sh:targetClass cacontology-partnerships:PublicPrivatePartnership .

cacontology-partnerships-shapes:PartnershipConsistencyShape a sh:NodeShape ;
    rdfs:label "Partnership Consistency Shape"@en ;
    rdfs:comment "Validates consistency between partnership characteristics and participating organizations."@en ;
    sh:sparql [ sh:message "Partnership must include at least the minimum number of partners specified in partnerCount."@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/partnerships#"^^xsd:anyURI ;
                            sh:prefix "cacontology-partnerships" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-partnerships:partnerCount ?count .
                {
                    SELECT $this (COUNT(?partner) AS ?actualCount)
                    WHERE {
                        $this cacontology-partnerships:includesPartner ?partner .
                    }
                    GROUP BY $this
                }
                FILTER (?actualCount < ?count)
            }
        """ ] ;
    sh:targetClass cacontology-partnerships:PublicPrivatePartnership .

cacontology-partnerships-shapes:PartnershipDataQualityShape a sh:NodeShape ;
    rdfs:label "Partnership Data Quality Shape"@en ;
    rdfs:comment "Enhanced data quality validation for partnerships with gUFO quality consistency rules."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Partnership label should be between 5 and 200 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 5 ;
            sh:path rdfs:label ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 1000 ;
            sh:message "Partnership comment should be between 10 and 1000 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 10 ;
            sh:path rdfs:comment ] ;
    sh:sparql [ sh:message "Partnership effectiveness and success rate should be consistent (gUFO quality consistency)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-partnerships:hasPartnershipEffectiveness ?effectiveness ;
                      cacontology-partnerships:hasSuccessRate ?rate .
                {
                    FILTER (?effectiveness = "highly_effective" && ?rate < 0.7)
                } UNION {
                    FILTER (?effectiveness = "effective" && (?rate < 0.5 || ?rate > 0.8))
                } UNION {
                    FILTER (?effectiveness = "moderate" && (?rate < 0.3 || ?rate > 0.6))
                } UNION {
                    FILTER (?effectiveness = "limited" && ?rate > 0.4)
                } UNION {
                    FILTER (?effectiveness = "ineffective" && ?rate > 0.2)
                }
            }
        """ ],
        [ sh:message "Trust level and collaboration intensity should be correlated (gUFO quality consistency)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-partnerships:hasTrustLevel ?trust ;
                      cacontology-partnerships:hasCollaborationIntensity ?intensity .
                {
                    FILTER (?trust >= 0.8 && ?intensity NOT IN ("intensive", "fully_integrated"))
                } UNION {
                    FILTER (?trust <= 0.3 && ?intensity NOT IN ("low", "moderate"))
                }
            }
        """ ] ;
    sh:targetClass cacontology-partnerships:PublicPrivatePartnership .

cacontology-partnerships-shapes:PartnershipObjectTypeValidationShape a sh:NodeShape ;
    rdfs:label "Partnership Object Type Validation Shape"@en ;
    rdfs:comment "Validates gUFO Object type consistency for partnership objects."@en ;
    sh:property [ sh:hasValue gufo:Object ;
            sh:message "Information sharing framework should extend gUFO Object."@en ;
            sh:minCount 0 ;
            sh:path rdfs:subClassOf ] ;
    sh:targetClass cacontology-partnerships:InformationSharingFramework .

cacontology-partnerships-shapes:PartnershipOrganizationTypeValidationShape a sh:NodeShape ;
    rdfs:label "Partnership Organization Type Validation Shape"@en ;
    rdfs:comment "Validates gUFO Organization type consistency for partnerships."@en ;
    sh:property [ sh:hasValue gufo:Organization ;
            sh:message "Partnership must be typed as gUFO Organization."@en ;
            sh:minCount 1 ;
            sh:path rdf:type ],
        [ sh:hasValue gufo:Organization ;
            sh:message "Partnership class should extend gUFO Organization."@en ;
            sh:minCount 0 ;
            sh:path rdfs:subClassOf ] ;
    sh:targetClass cacontology-partnerships:PublicPrivatePartnership .

cacontology-partnerships-shapes:PartnershipParticipationShape a sh:NodeShape ;
    rdfs:label "Partnership Participation Shape"@en ;
    rdfs:comment "Validates gUFO participation constraints for partnerships."@en ;
    sh:sparql [ sh:message "Partnership must have at least 2 participating organizations (gUFO participation constraint)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this rdf:type cacontology-partnerships:PublicPrivatePartnership .
                {
                    SELECT $this (COUNT(DISTINCT ?partner) AS ?partnerCount)
                    WHERE {
                        $this cacontology-partnerships:includesPartner ?partner .
                    }
                    GROUP BY $this
                }
                FILTER (?partnerCount < 2)
            }
        """ ] ;
    sh:targetClass cacontology-partnerships:PublicPrivatePartnership .

cacontology-partnerships-shapes:PartnershipPhaseTemporalShape a sh:NodeShape ;
    rdfs:label "Partnership Phase Temporal Shape"@en ;
    rdfs:comment "Validates gUFO temporal constraints for partnership phases."@en ;
    sh:property [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Partnership phase may have begin point timestamp."@en ;
            sh:path cacontology-partnerships:hasPhaseBeginPoint ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Partnership phase may have end point timestamp."@en ;
            sh:path cacontology-partnerships:hasPhaseEndPoint ] ;
    sh:sparql [ sh:message "Phase end must be after begin when both are specified."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-partnerships:hasPhaseBeginPoint ?start ;
                      cacontology-partnerships:hasPhaseEndPoint ?end .
                FILTER (?end <= ?start)
            }
        """ ] ;
    sh:targetClass gufo:Phase .

cacontology-partnerships-shapes:PartnershipPhaseTypeValidationShape a sh:NodeShape ;
    rdfs:label "Partnership Phase Type Validation Shape"@en ;
    rdfs:comment "Validates gUFO Phase type consistency for partnership phases."@en ;
    sh:sparql [ sh:message "Partnership phases must be properly typed as gUFO Phase and extend partnership classes."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this rdf:type gufo:Phase .
                FILTER NOT EXISTS {
                    $this rdf:type ?phaseClass .
                    ?phaseClass rdfs:subClassOf* cacontology-partnerships:PublicPrivatePartnership .
                }
            }
        """ ] ;
    sh:targetClass gufo:Phase .

cacontology-partnerships-shapes:PartnershipSituationTypeValidationShape a sh:NodeShape ;
    rdfs:label "Partnership Situation Type Validation Shape"@en ;
    rdfs:comment "Validates gUFO Situation type consistency for partnership situations."@en ;
    sh:property [ sh:hasValue gufo:Situation ;
            sh:message "Partnership situation should extend gUFO Situation."@en ;
            sh:minCount 0 ;
            sh:path rdfs:subClassOf ] ;
    sh:targetClass gufo:Situation .

cacontology-partnerships-shapes:PartnershipTemporalShape a sh:NodeShape ;
    rdfs:label "Partnership Temporal Shape"@en ;
    rdfs:comment "Validates gUFO temporal constraints for partnerships."@en ;
    sh:property [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Partnership may have end point timestamp."@en ;
            sh:path cacontology-partnerships:hasPartnershipEndPoint ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Partnership may have begin point timestamp."@en ;
            sh:path cacontology-partnerships:hasPartnershipBeginPoint ] ;
    sh:sparql [ sh:message "Partnership end must be after begin when both are specified (gUFO temporal constraint)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-partnerships:hasPartnershipBeginPoint ?start ;
                      cacontology-partnerships:hasPartnershipEndPoint ?end .
                FILTER (?end <= ?start)
            }
        """ ] ;
    sh:targetClass cacontology-partnerships:PublicPrivatePartnership .

cacontology-partnerships-shapes:PlatformMonitoringShape a sh:NodeShape ;
    rdfs:label "Platform Monitoring Shape"@en ;
    rdfs:comment "Validation shape for platform monitoring instances."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 1000 ;
            sh:message "Platforms covered must be between 1 and 1,000."@en ;
            sh:minCount 1 ;
            sh:minInclusive 1 ;
            sh:path cacontology-partnerships:platformsCovered ] ;
    sh:targetClass cacontology-partnerships:PlatformMonitoring .

cacontology-partnerships-shapes:ProjectSafeChildhoodCaseShape a sh:NodeShape ;
    rdfs:label "Project Safe Childhood Case Shape"@en ;
    rdfs:comment "Validation shape for Project Safe Childhood case instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Case label should be between 5 and 200 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 5 ;
            sh:path rdfs:label ] ;
    sh:targetClass cacontology-partnerships:ProjectSafeChildhoodCase .

cacontology-partnerships-shapes:PublicPrivatePartnershipShape a sh:NodeShape ;
    rdfs:label "Public Private Partnership Shape"@en ;
    rdfs:comment "Enhanced validation shape for public-private partnership instances with gUFO quality aspects."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 100 ;
            sh:message "Partnership must have between 2 and 100 partners."@en ;
            sh:minCount 1 ;
            sh:minInclusive 2 ;
            sh:path cacontology-partnerships:partnerCount ],
        [ sh:datatype xsd:string ;
            sh:in ( "local" "national" "regional" "global" ) ;
            sh:maxCount 1 ;
            sh:message "Partnership scope must be from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-partnerships:partnershipScope ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 120.0 ;
            sh:message "Partnership duration must be between 1 and 120 months."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1.0 ;
            sh:path cacontology-partnerships:partnershipDuration ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Partnership must specify if formal agreement exists."@en ;
            sh:minCount 1 ;
            sh:path cacontology-partnerships:formalAgreement ],
        [ sh:datatype xsd:string ;
            sh:in ( "ineffective" "limited" "moderate" "effective" "highly_effective" ) ;
            sh:maxCount 1 ;
            sh:message "Partnership effectiveness must be from allowed values (gUFO quality aspect)."@en ;
            sh:path cacontology-partnerships:hasPartnershipEffectiveness ],
        [ sh:datatype xsd:string ;
            sh:in ( "minimal" "basic" "standard" "enhanced" "comprehensive" ) ;
            sh:maxCount 1 ;
            sh:message "Coordination level must be from allowed values (gUFO quality aspect)."@en ;
            sh:path cacontology-partnerships:hasCoordinationLevel ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 100 ;
            sh:message "Partnership must have between 2 and 100 partners."@en ;
            sh:minCount 1 ;
            sh:minInclusive 2 ;
            sh:path cacontology-partnerships:partnerCount ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Trust level must be between 0.0 and 1.0 (gUFO quality aspect)."@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-partnerships:hasTrustLevel ],
        [ sh:datatype xsd:string ;
            sh:in ( "low" "moderate" "high" "intensive" "fully_integrated" ) ;
            sh:maxCount 1 ;
            sh:message "Collaboration intensity must be from allowed values (gUFO quality aspect)."@en ;
            sh:path cacontology-partnerships:hasCollaborationIntensity ],
        [ sh:datatype xsd:string ;
            sh:in ( "local" "national" "regional" "global" ) ;
            sh:maxCount 1 ;
            sh:message "Partnership scope must be from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-partnerships:partnershipScope ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Success rate must be between 0.0 and 1.0 (gUFO quality aspect)."@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-partnerships:hasSuccessRate ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 120.0 ;
            sh:message "Partnership duration must be between 1 and 120 months."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1.0 ;
            sh:path cacontology-partnerships:partnershipDuration ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Partnership must specify if formal agreement exists."@en ;
            sh:minCount 1 ;
            sh:path cacontology-partnerships:formalAgreement ],
        [ sh:datatype xsd:string ;
            sh:in ( "ineffective" "limited" "moderate" "effective" "highly_effective" ) ;
            sh:maxCount 1 ;
            sh:message "Partnership effectiveness must be from allowed values (gUFO quality aspect)."@en ;
            sh:path cacontology-partnerships:hasPartnershipEffectiveness ],
        [ sh:datatype xsd:string ;
            sh:in ( "minimal" "basic" "standard" "enhanced" "comprehensive" ) ;
            sh:maxCount 1 ;
            sh:message "Coordination level must be from allowed values (gUFO quality aspect)."@en ;
            sh:path cacontology-partnerships:hasCoordinationLevel ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Trust level must be between 0.0 and 1.0 (gUFO quality aspect)."@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-partnerships:hasTrustLevel ],
        [ sh:datatype xsd:string ;
            sh:in ( "low" "moderate" "high" "intensive" "fully_integrated" ) ;
            sh:maxCount 1 ;
            sh:message "Collaboration intensity must be from allowed values (gUFO quality aspect)."@en ;
            sh:path cacontology-partnerships:hasCollaborationIntensity ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Success rate must be between 0.0 and 1.0 (gUFO quality aspect)."@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-partnerships:hasSuccessRate ] ;
    sh:targetClass cacontology-partnerships:PublicPrivatePartnership .

cacontology-partnerships-shapes:QualifiedPartnershipParticipationShape a sh:NodeShape ;
    rdfs:label "Qualified Partnership Participation Shape"@en ;
    rdfs:comment "Validates gUFO qualified participation situations in partnerships."@en ;
    sh:sparql [ sh:message "Qualified participation must involve appropriate partnership roles and organizations (gUFO qualified relation)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this rdf:type gufo:ParticipationSituation .
                $this gufo:participatesIn ?partnership .
                ?partnership rdf:type cacontology-partnerships:PublicPrivatePartnership .
                FILTER NOT EXISTS {
                    ?org cacontology-partnerships:hasRole ?role .
                    ?role rdf:type ?roleType .
                    ?roleType rdfs:subClassOf* cacontology-partnerships:PartnerRole .
                }
            }
        """ ] ;
    sh:targetClass gufo:ParticipationSituation .

cacontology-partnerships-shapes:RegularMeetingShape a sh:NodeShape ;
    rdfs:label "Regular Meeting Shape"@en ;
    rdfs:comment "Validation shape for regular meeting instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "weekly" "monthly" "quarterly" "annual" "ad_hoc" ) ;
            sh:maxCount 1 ;
            sh:message "Meeting frequency must be from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-partnerships:meetingFrequency ] ;
    sh:targetClass cacontology-partnerships:RegularMeeting .

cacontology-partnerships-shapes:SolicitsHelpShape a sh:PropertyShape ;
    sh:class cacontology-partnerships:CrowdsourcingInvestigation ;
    sh:description "Links organization to crowdsourcing investigations they conduct" ;
    sh:minCount 0 ;
    sh:name "solicits help" ;
    sh:path cacontology-partnerships:solicitsHelp .

cacontology-partnerships-shapes:TechCooperationParticipationShape a sh:NodeShape ;
    rdfs:label "Tech Cooperation Participation Shape"@en ;
    rdfs:comment "Validates gUFO participation constraints for technology cooperation."@en ;
    sh:sparql [ sh:message "Tech cooperation must include at least one technology partner and one law enforcement partner (gUFO participation constraint)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this rdf:type cacontology-partnerships:TechIndustryCooperation .
                FILTER NOT EXISTS {
                    $this cacontology-partnerships:includesPartner ?techOrg .
                    ?techOrg cacontology-partnerships:hasRole ?techRole .
                    ?techRole rdf:type cacontology-partnerships:TechnologyPartner .
                } ||
                FILTER NOT EXISTS {
                    $this cacontology-partnerships:includesPartner ?leOrg .
                    ?leOrg cacontology-partnerships:hasRole ?leRole .
                    ?leRole rdf:type cacontology-partnerships:LawEnforcementPartner .
                }
            }
        """ ] ;
    sh:targetClass cacontology-partnerships:TechIndustryCooperation .

cacontology-partnerships-shapes:TechCooperationValidityShape a sh:NodeShape ;
    rdfs:label "Tech Cooperation Validity Shape"@en ;
    rdfs:comment "Validates that tech industry cooperation includes at least one technology partner."@en ;
    sh:sparql [ sh:message "Tech industry cooperation must include at least one technology partner."@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/partnerships#"^^xsd:anyURI ;
                            sh:prefix "cacontology-partnerships" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-partnerships:TechIndustryCooperation .
                FILTER NOT EXISTS {
                    $this cacontology-partnerships:includesPartner ?org .
                    ?org cacontology-partnerships:hasRole cacontology-partnerships:TechnologyPartner .
                }
            }
        """ ] ;
    sh:targetClass cacontology-partnerships:TechIndustryCooperation .

cacontology-partnerships-shapes:TechIndustryCooperationShape a sh:NodeShape ;
    rdfs:label "Tech Industry Cooperation Shape"@en ;
    rdfs:comment "Validation shape for tech industry cooperation instances."@en ;
    sh:property [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Tech industry cooperation must specify if formal agreement exists."@en ;
            sh:minCount 1 ;
            sh:path cacontology-partnerships:formalAgreement ] ;
    sh:targetClass cacontology-partnerships:TechIndustryCooperation .

cacontology-partnerships-shapes:TechnicalIntegrationShape a sh:NodeShape ;
    rdfs:label "Technical Integration Shape"@en ;
    rdfs:comment "Validation shape for technical integration instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "manual" "semi_automated" "fully_automated" ) ;
            sh:maxCount 1 ;
            sh:message "Automation level must be from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-partnerships:automationLevel ] ;
    sh:targetClass cacontology-partnerships:TechnicalIntegration .

cacontology-partnerships-shapes:TechnologyCooperationCompositionShape a sh:NodeShape ;
    rdfs:label "Technology Cooperation Composition Shape"@en ;
    rdfs:comment "Validates gUFO part-whole relationships for technology cooperation composition."@en ;
    sh:sparql [ sh:message "Technology cooperation must include both technical and operational components (gUFO part-whole constraint)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this rdf:type cacontology-partnerships:TechnologyCooperation .
                FILTER NOT EXISTS {
                    { ?partnership cacontology-partnerships:coordinatedThrough $this } UNION
                    { ?framework cacontology-partnerships:enablesSharing $this }
                }
            }
        """ ] ;
    sh:targetClass cacontology-partnerships:TechnologyCooperation .

cacontology-partnerships-shapes:TechnologyCooperationShape a sh:NodeShape ;
    rdfs:label "Technology Cooperation Shape"@en ;
    rdfs:comment "Enhanced validation shape for technology cooperation instances with gUFO quality aspects."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "experimental" "pilot" "production" "mature" ) ;
            sh:maxCount 1 ;
            sh:message "Technology maturity must be from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-partnerships:technologyMaturity ],
        [ sh:datatype xsd:string ;
            sh:in ( "incremental" "moderate" "significant" "breakthrough" "revolutionary" ) ;
            sh:maxCount 1 ;
            sh:message "Innovation level must be from allowed values (gUFO quality aspect)."@en ;
            sh:path cacontology-partnerships:hasInnovationLevel ],
        [ sh:datatype xsd:string ;
            sh:in ( "slow" "moderate" "fast" "rapid" "immediate" ) ;
            sh:maxCount 1 ;
            sh:message "Implementation speed must be from allowed values (gUFO quality aspect)."@en ;
            sh:path cacontology-partnerships:hasImplementationSpeed ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Technical reliability must be between 0.0 and 1.0 (gUFO quality aspect)."@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-partnerships:hasTechnicalReliability ],
        [ sh:datatype xsd:string ;
            sh:in ( "experimental" "pilot" "production" "mature" ) ;
            sh:maxCount 1 ;
            sh:message "Technology maturity must be from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-partnerships:technologyMaturity ],
        [ sh:datatype xsd:string ;
            sh:in ( "incremental" "moderate" "significant" "breakthrough" "revolutionary" ) ;
            sh:maxCount 1 ;
            sh:message "Innovation level must be from allowed values (gUFO quality aspect)."@en ;
            sh:path cacontology-partnerships:hasInnovationLevel ],
        [ sh:datatype xsd:string ;
            sh:in ( "slow" "moderate" "fast" "rapid" "immediate" ) ;
            sh:maxCount 1 ;
            sh:message "Implementation speed must be from allowed values (gUFO quality aspect)."@en ;
            sh:path cacontology-partnerships:hasImplementationSpeed ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Technical reliability must be between 0.0 and 1.0 (gUFO quality aspect)."@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-partnerships:hasTechnicalReliability ] ;
    sh:targetClass cacontology-partnerships:TechnologyCooperation .

cacontology-partnerships-shapes:TechnologyMaturityImplementationRule a sh:NodeShape ;
    rdfs:label "Technology Maturity Implementation Rule"@en ;
    rdfs:comment "Advanced gUFO business rule: Mature technology should have fast implementation and high reliability."@en ;
    sh:sparql [ sh:message "Mature technology cooperation must have fast implementation speed and high reliability (gUFO business rule)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-partnerships:technologyMaturity "mature" .
                {
                    FILTER NOT EXISTS {
                        $this cacontology-partnerships:hasImplementationSpeed ?speed .
                        FILTER (?speed IN ("fast", "rapid", "immediate"))
                    }
                } UNION {
                    FILTER NOT EXISTS {
                        $this cacontology-partnerships:hasTechnicalReliability ?reliability .
                        FILTER (?reliability >= 0.8)
                    }
                }
            }
        """ ] ;
    sh:targetClass cacontology-partnerships:TechnologyCooperation .

cacontology-partnerships-shapes:TechnologyPartnerShape a sh:NodeShape ;
    rdfs:label "Technology Partner Shape"@en ;
    rdfs:comment "Validation shape for technology partner instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 100 ;
            sh:message "Technology partner label should be between 3 and 100 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 3 ;
            sh:path rdfs:label ] ;
    sh:targetClass cacontology-partnerships:TechnologyPartner .

cacontology-partnerships-shapes:ToolDevelopmentShape a sh:NodeShape ;
    rdfs:label "Tool Development Shape"@en ;
    rdfs:comment "Validation shape for tool development instances."@en ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 100000000.0 ;
            sh:message "Development investment must be between $10,000 and $100,000,000."@en ;
            sh:minCount 0 ;
            sh:minInclusive 10000.0 ;
            sh:path cacontology-partnerships:developmentInvestment ] ;
    sh:targetClass cacontology-partnerships:ToolDevelopment .

cacontology-physical:CellphoneSearch a owl:Class ;
    rdfs:label "Cellphone Search"@en ;
    rdfs:comment "Search of cellphone or mobile device for evidence. Typically requires consent or warrant (gUFO Event)."@en ;
    rdfs:subClassOf cacontology-physical:PhysicalSearch .

cacontology-physical:ChainOfCustodyBreachSituation a owl:Class ;
    rdfs:label "Chain of Custody Breach Situation"@en ;
    rdfs:comment "Situation where the chain of custody for evidence has been breached (gUFO Situation)."@en ;
    rdfs:subClassOf gufo:Situation .

cacontology-physical:CommunicationDevice a owl:Class ;
    rdfs:label "Communication Device"@en ;
    rdfs:comment "Devices used to communicate with victims or distribute illegal content (gUFO FunctionalComplex)."@en ;
    rdfs:subClassOf cacontology-physical:ComputerEquipment .

cacontology-physical:DashcamFootage a owl:Class ;
    rdfs:label "Dashcam Footage"@en ;
    rdfs:comment "Dashboard camera footage from police vehicles. Digital observable."@en ;
    rdfs:subClassOf cacontology-physical:BodycamFootage .

cacontology-physical:DeviceConsentSearch a owl:Class ;
    rdfs:label "Device Consent Search"@en ;
    rdfs:comment "Consent authorization specific to electronic device search (cellphone, computer, etc.)."@en ;
    rdfs:subClassOf cacontology-physical:ConsentToSearchAuthorization .

cacontology-physical:DocumentaryEvidence a owl:Class ;
    rdfs:label "Documentary Evidence"@en ;
    rdfs:comment "Physical documents, printed materials, or written items relevant to the investigation (gUFO Object)."@en ;
    rdfs:subClassOf cacontology-physical:PhysicalEvidence .

cacontology-physical:EvidenceAnalysisPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Evidence Analysis Phase"@en ;
    rdfs:comment "Phase during which physical evidence is undergoing forensic analysis (gUFO Phase - anti-rigid)."@en ;
    rdfs:subClassOf cacontology-physical:PhysicalEvidence .

cacontology-physical:EvidenceCollectionPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Evidence Collection Phase"@en ;
    rdfs:comment "Phase during which physical evidence is being collected (gUFO Phase - anti-rigid)."@en ;
    rdfs:subClassOf cacontology-physical:PhysicalEvidence .

cacontology-physical:EvidenceContaminationSituation a owl:Class ;
    rdfs:label "Evidence Contamination Situation"@en ;
    rdfs:comment "Situation where physical evidence has been contaminated or compromised (gUFO Situation)."@en ;
    rdfs:subClassOf gufo:Situation .

cacontology-physical:EvidenceDispositionPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Evidence Disposition Phase"@en ;
    rdfs:comment "Phase during which evidence disposition is determined and executed (gUFO Phase - anti-rigid)."@en ;
    rdfs:subClassOf cacontology-physical:PhysicalEvidence .

cacontology-physical:EvidenceRecoverySituation a owl:Class ;
    rdfs:label "Evidence Recovery Situation"@en ;
    rdfs:comment "Situation involving the recovery of previously lost or missing evidence (gUFO Situation)."@en ;
    rdfs:subClassOf gufo:Situation .

cacontology-physical:EvidenceSeizure a owl:Class ;
    rdfs:label "Evidence Seizure"@en ;
    rdfs:comment "Legal seizure of physical items as evidence. Extends investigation:InvestigativeAction (gUFO Event)."@en ;
    rdfs:subClassOf gufo:Event,
        case-investigation:InvestigativeAction .

cacontology-physical:EvidenceStoragePhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Evidence Storage Phase"@en ;
    rdfs:comment "Phase during which physical evidence is in secure storage (gUFO Phase - anti-rigid)."@en ;
    rdfs:subClassOf cacontology-physical:PhysicalEvidence .

cacontology-physical:GloveCompartmentSearch a owl:Class ;
    rdfs:label "Glove Compartment Search"@en ;
    rdfs:comment "Search of vehicle glove compartment as specific evidence location (gUFO Event)."@en ;
    rdfs:subClassOf cacontology-physical:VehicleSearch .

cacontology-physical:IntoxicatingSubstance a owl:Class ;
    rdfs:label "Intoxicating Substance"@en ;
    rdfs:comment "Alcohol, drugs, or other intoxicating substances intended to impair victim judgment. Extends AbuseFacilitationItem."@en ;
    rdfs:subClassOf cacontology-physical:AbuseFacilitationItem .

cacontology-physical:OnlinePurchase a owl:Class ;
    rdfs:label "Online Purchase"@en ;
    rdfs:comment "Purchase of items through online platforms for criminal purposes (gUFO Event)."@en ;
    rdfs:subClassOf cacontology-physical:CriminalProcurement .

cacontology-physical:PhysicalPurchase a owl:Class ;
    rdfs:label "Physical Purchase"@en ;
    rdfs:comment "In-person purchase of items for criminal purposes (gUFO Event)."@en ;
    rdfs:subClassOf cacontology-physical:CriminalProcurement .

cacontology-physical:RecordingEquipment a owl:Class ;
    rdfs:label "Recording Equipment"@en ;
    rdfs:comment "Devices used to create audio or video recordings of criminal activity (gUFO FunctionalComplex)."@en ;
    rdfs:subClassOf gufo:FunctionalComplex,
        cacontology-physical:AbuseFacilitationItem .

cacontology-physical:ResidenceSearch a owl:Class ;
    rdfs:label "Residence Search"@en ;
    rdfs:comment "Search of residential premises including homes and apartments (gUFO Event)."@en ;
    rdfs:subClassOf cacontology-physical:PhysicalSearch .

cacontology-physical:RestraintItem a owl:Class ;
    rdfs:label "Restraint Item"@en ;
    rdfs:comment "Items intended for restraining or controlling victims (gUFO Object)."@en ;
    rdfs:subClassOf cacontology-physical:AbuseFacilitationItem .

cacontology-physical:SearchOfficerRole a gufo:Role,
        owl:Class ;
    rdfs:label "Search Officer Role"@en ;
    rdfs:comment "Role of law enforcement officer conducting physical searches (gUFO Role - anti-rigid)."@en ;
    rdfs:subClassOf uco-identity:Person .

cacontology-physical:SurveillanceRecording a owl:Class ;
    rdfs:label "Surveillance Recording"@en ;
    rdfs:comment "Recording from surveillance or security cameras. Digital observable."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:ObservableObject .

cacontology-physical:VehicleConsentSearch a owl:Class ;
    rdfs:label "Vehicle Consent Search"@en ;
    rdfs:comment "Consent authorization specific to vehicle search."@en ;
    rdfs:subClassOf cacontology-physical:ConsentToSearchAuthorization .

cacontology-physical:WorkplaceSearch a owl:Class ;
    rdfs:label "Workplace Search"@en ;
    rdfs:comment "Search of workplace or commercial premises (gUFO Event)."@en ;
    rdfs:subClassOf cacontology-physical:PhysicalSearch .

cacontology-physical:agreedToBring a owl:DatatypeProperty ;
    rdfs:label "agreed to bring"@en ;
    rdfs:comment "Whether suspect agreed to bring this item during undercover communication."@en ;
    rdfs:domain cacontology-physical:AbuseFacilitationItem ;
    rdfs:range xsd:boolean .

cacontology-physical:arrivedAtLocation a owl:ObjectProperty ;
    rdfs:label "arrived at location"@en ;
    rdfs:comment "Links vehicle to the location it arrived at for meeting."@en ;
    rdfs:domain cacontology-physical:SuspectVehicle ;
    rdfs:range uco-location:Location .

cacontology-physical:associatedWithSubject a owl:ObjectProperty ;
    rdfs:label "associated with subject"@en ;
    rdfs:comment "Links evidence to the person associated with its ownership or use."@en ;
    rdfs:domain cacontology-physical:PhysicalEvidence ;
    rdfs:range uco-identity:Person .

cacontology-physical:chainOfCustody a owl:DatatypeProperty ;
    rdfs:label "chain of custody"@en ;
    rdfs:comment "Documentation of evidence handling from seizure to court."@en ;
    rdfs:domain cacontology-physical:PhysicalEvidence ;
    rdfs:range xsd:string .

cacontology-physical:collectedDuring a owl:ObjectProperty ;
    rdfs:label "collected during"@en ;
    rdfs:comment "Links evidence to the collection action."@en ;
    rdfs:domain cacontology-physical:PhysicalEvidence ;
    rdfs:range cacontology-physical:EvidenceCollectionAction .

cacontology-physical:condomBrand a owl:DatatypeProperty ;
    rdfs:label "condom brand"@en ;
    rdfs:comment "Brand of the condoms (e.g., 'Durex')."@en ;
    rdfs:domain cacontology-physical:Condoms ;
    rdfs:range xsd:string .

cacontology-physical:condomQuantity a owl:DatatypeProperty ;
    rdfs:label "condom quantity"@en ;
    rdfs:comment "Number of condoms found."@en ;
    rdfs:domain cacontology-physical:Condoms ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-physical:consentGiven a owl:DatatypeProperty ;
    rdfs:label "consent given"@en ;
    rdfs:comment "Whether consent was given for the search."@en ;
    rdfs:domain cacontology-physical:ConsentToSearchAuthorization ;
    rdfs:range xsd:boolean .

cacontology-physical:consentScope a owl:DatatypeProperty ;
    rdfs:label "consent scope"@en ;
    rdfs:comment "Scope of consent given (vehicle_only, device_only, full_search)."@en ;
    rdfs:domain cacontology-physical:ConsentToSearchAuthorization ;
    rdfs:range xsd:string .

cacontology-physical:consentType a owl:DatatypeProperty ;
    rdfs:label "consent type"@en ;
    rdfs:comment "Type of consent obtained (verbal, written, implied)."@en ;
    rdfs:domain cacontology-physical:ConsentToSearchAuthorization ;
    rdfs:range xsd:string .

cacontology-physical:consentWithdrawn a owl:DatatypeProperty ;
    rdfs:label "consent withdrawn"@en ;
    rdfs:comment "Whether consent was subsequently withdrawn."@en ;
    rdfs:domain cacontology-physical:ConsentToSearchAuthorization ;
    rdfs:range xsd:boolean .

cacontology-physical:containsItem a owl:ObjectProperty ;
    rdfs:label "contains item"@en ;
    rdfs:comment "Indicates that one evidence item was found inside another (gUFO part-whole relationship)."@en ;
    rdfs:domain cacontology-physical:PhysicalEvidence ;
    rdfs:range cacontology-physical:PhysicalEvidence ;
    rdfs:subPropertyOf gufo:isObjectProperPartOf .

cacontology-physical:criminalPurpose a owl:DatatypeProperty ;
    rdfs:label "criminal purpose"@en ;
    rdfs:comment "Intended criminal use of the item."@en ;
    rdfs:domain cacontology-physical:AbuseFacilitationItem ;
    rdfs:range xsd:string .

cacontology-physical:deviceBrand a owl:DatatypeProperty ;
    rdfs:label "device brand"@en ;
    rdfs:comment "Manufacturer or brand of the computer equipment."@en ;
    rdfs:domain cacontology-physical:ComputerEquipment ;
    rdfs:range xsd:string .

cacontology-physical:deviceModel a owl:DatatypeProperty ;
    rdfs:label "device model"@en ;
    rdfs:comment "Model number or name of the device."@en ;
    rdfs:domain cacontology-physical:ComputerEquipment ;
    rdfs:range xsd:string .

cacontology-physical:digitalContentFound a owl:DatatypeProperty ;
    rdfs:label "digital content found"@en ;
    rdfs:comment "Whether illegal digital content was found on the device."@en ;
    rdfs:domain cacontology-physical:ComputerEquipment ;
    rdfs:range xsd:boolean .

cacontology-physical:encryptionStatus a owl:DatatypeProperty ;
    rdfs:label "encryption status"@en ;
    rdfs:comment "Whether the device or storage media is encrypted (encrypted, unencrypted, partially_encrypted)."@en ;
    rdfs:domain cacontology-physical:ComputerEquipment ;
    rdfs:range xsd:string .

cacontology-physical:evidenceFoundInVehicle a owl:ObjectProperty ;
    rdfs:label "evidence found in vehicle"@en ;
    rdfs:comment "Links physical evidence to the vehicle it was found in."@en ;
    rdfs:domain cacontology-physical:PhysicalEvidence ;
    rdfs:range cacontology-physical:SuspectVehicle .

cacontology-physical:evidenceTag a owl:DatatypeProperty ;
    rdfs:label "evidence tag"@en ;
    rdfs:comment "Unique identifier assigned to evidence item during collection."@en ;
    rdfs:domain cacontology-physical:PhysicalEvidence ;
    rdfs:range xsd:string .

cacontology-physical:evidenceType a owl:DatatypeProperty ;
    rdfs:label "evidence type"@en ;
    rdfs:comment "Category of physical evidence (digital_device, document, contraband, personal_item)."@en ;
    rdfs:domain cacontology-physical:PhysicalEvidence ;
    rdfs:range xsd:string .

cacontology-physical:evidentiarySignificance a owl:DatatypeProperty ;
    rdfs:label "evidentiary significance"@en ;
    rdfs:comment "Assessment of evidence importance (critical, high, medium, low)."@en ;
    rdfs:domain cacontology-physical:PhysicalEvidence ;
    rdfs:range xsd:string .

cacontology-physical:forensicAnalysisRequired a owl:DatatypeProperty ;
    rdfs:label "forensic analysis required"@en ;
    rdfs:comment "Whether the item requires specialized forensic analysis."@en ;
    rdfs:domain cacontology-physical:PhysicalEvidence ;
    rdfs:range xsd:boolean .

cacontology-physical:foundInLocation a owl:DatatypeProperty ;
    rdfs:label "found in location"@en ;
    rdfs:comment "Specific location where evidence was found (e.g., 'glove compartment')."@en ;
    rdfs:domain cacontology-physical:AbuseFacilitationItem ;
    rdfs:range xsd:string .

cacontology-physical:functionalStatus a owl:DatatypeProperty ;
    rdfs:label "functional status"@en ;
    rdfs:comment "Whether the device is functional (working, non_functional, partially_functional)."@en ;
    rdfs:domain cacontology-physical:ComputerEquipment ;
    rdfs:range xsd:string .

cacontology-physical:hasAcquisitionRisk a owl:DatatypeProperty ;
    rdfs:label "has acquisition risk"@en ;
    rdfs:comment "Risk assessment of criminal acquisition patterns (gUFO quality aspect)."@en ;
    rdfs:domain cacontology-physical:CriminalProcurement ;
    rdfs:range xsd:string .

cacontology-physical:hasAnalysisAccuracy a owl:DatatypeProperty ;
    rdfs:label "has analysis accuracy"@en ;
    rdfs:comment "Accuracy level of forensic analysis (gUFO quality aspect)."@en ;
    rdfs:domain cacontology-physical:ForensicAnalystRole ;
    rdfs:range xsd:double .

cacontology-physical:hasAnalysisReliability a owl:DatatypeProperty ;
    rdfs:label "has analysis reliability"@en ;
    rdfs:comment "Reliability of forensic analysis results (gUFO quality aspect)."@en ;
    rdfs:domain cacontology-physical:ForensicAnalystRole ;
    rdfs:range xsd:string .

cacontology-physical:hasConsentAuthorization a owl:ObjectProperty ;
    rdfs:label "has consent authorization"@en ;
    rdfs:comment "Links search action to consent authorization. Uses investigation:relevantAuthorization pattern."@en ;
    rdfs:domain cacontology-physical:PhysicalSearch ;
    rdfs:range cacontology-physical:ConsentToSearchAuthorization ;
    rdfs:subPropertyOf case-investigation:relevantAuthorization .

cacontology-physical:hasContaminationLevel a owl:DatatypeProperty ;
    rdfs:label "has contamination level"@en ;
    rdfs:comment "Level of evidence contamination (gUFO quality aspect)."@en ;
    rdfs:domain cacontology-physical:PhysicalEvidence ;
    rdfs:range xsd:double .

cacontology-physical:hasCustodyIntegrity a owl:DatatypeProperty ;
    rdfs:label "has custody integrity"@en ;
    rdfs:comment "Integrity level of chain of custody (gUFO quality aspect)."@en ;
    rdfs:domain cacontology-physical:EvidenceCustodianRole ;
    rdfs:range xsd:string .

cacontology-physical:hasDocumentationCompleteness a owl:DatatypeProperty ;
    rdfs:label "has documentation completeness"@en ;
    rdfs:comment "Completeness of custody documentation (gUFO quality aspect)."@en ;
    rdfs:domain cacontology-physical:EvidenceCustodianRole ;
    rdfs:range xsd:double .

cacontology-physical:hasEvidenceBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has evidence begin point"@en ;
    rdfs:comment "Temporal begin point for evidence lifecycle (gUFO temporal property)."@en ;
    rdfs:domain cacontology-physical:PhysicalEvidence ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-physical:hasEvidenceEndPoint a owl:DatatypeProperty ;
    rdfs:label "has evidence end point"@en ;
    rdfs:comment "Temporal end point for evidence lifecycle (gUFO temporal property)."@en ;
    rdfs:domain cacontology-physical:PhysicalEvidence ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-physical:hasEvidenceIntegrity a owl:DatatypeProperty ;
    rdfs:label "has evidence integrity"@en ;
    rdfs:comment "Overall integrity level of physical evidence (gUFO quality aspect)."@en ;
    rdfs:domain cacontology-physical:PhysicalEvidence ;
    rdfs:range xsd:string .

cacontology-physical:hasEvidenceReliability a owl:DatatypeProperty ;
    rdfs:label "has evidence reliability"@en ;
    rdfs:comment "Reliability assessment of evidence for prosecution (gUFO quality aspect)."@en ;
    rdfs:domain cacontology-physical:PhysicalEvidence ;
    rdfs:range xsd:double .

cacontology-physical:hasForensicValue a owl:DatatypeProperty ;
    rdfs:label "has forensic value"@en ;
    rdfs:comment "Forensic value assessment of evidence (gUFO quality aspect)."@en ;
    rdfs:domain cacontology-physical:PhysicalEvidence ;
    rdfs:range xsd:string .

cacontology-physical:hasMethodValidation a owl:DatatypeProperty ;
    rdfs:label "has method validation"@en ;
    rdfs:comment "Validation status of analysis methods used (gUFO quality aspect)."@en ;
    rdfs:domain cacontology-physical:ForensicAnalystRole ;
    rdfs:range xsd:string .

cacontology-physical:hasPhaseBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has phase begin point"@en ;
    rdfs:comment "Temporal begin point for evidence phases (gUFO temporal property)."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-physical:hasPhaseEndPoint a owl:DatatypeProperty ;
    rdfs:label "has phase end point"@en ;
    rdfs:comment "Temporal end point for evidence phases (gUFO temporal property)."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-physical:hasPreservationQuality a owl:DatatypeProperty ;
    rdfs:label "has preservation quality"@en ;
    rdfs:comment "Quality level of evidence preservation (gUFO quality aspect)."@en ;
    rdfs:domain cacontology-physical:PhysicalEvidence ;
    rdfs:range xsd:string .

cacontology-physical:hasProcurementBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has procurement begin point"@en ;
    rdfs:comment "Temporal begin point for procurement events (gUFO temporal property)."@en ;
    rdfs:domain cacontology-physical:CriminalProcurement ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-physical:hasProcurementEndPoint a owl:DatatypeProperty ;
    rdfs:label "has procurement end point"@en ;
    rdfs:comment "Temporal end point for procurement events (gUFO temporal property)."@en ;
    rdfs:domain cacontology-physical:CriminalProcurement ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-physical:hasProcurementSuspicion a owl:DatatypeProperty ;
    rdfs:label "has procurement suspicion"@en ;
    rdfs:comment "Suspicion level regarding criminal procurement (gUFO quality aspect)."@en ;
    rdfs:domain cacontology-physical:CriminalProcurement ;
    rdfs:range xsd:string .

cacontology-physical:hasProvenanceRecord a owl:ObjectProperty ;
    rdfs:label "has provenance record"@en ;
    rdfs:comment "Links physical evidence to its provenance record for chain of custody tracking."@en ;
    rdfs:domain cacontology-physical:PhysicalEvidence ;
    rdfs:range cacontology-physical:PhysicalEvidenceProvenanceRecord .

cacontology-physical:hasRoleBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has role begin point"@en ;
    rdfs:comment "Temporal begin point for forensic roles (gUFO temporal property)."@en ;
    rdfs:domain gufo:Role ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-physical:hasRoleEndPoint a owl:DatatypeProperty ;
    rdfs:label "has role end point"@en ;
    rdfs:comment "Temporal end point for forensic roles (gUFO temporal property)."@en ;
    rdfs:domain gufo:Role ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-physical:hasSearchBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has search begin point"@en ;
    rdfs:comment "Temporal begin point for search events (gUFO temporal property)."@en ;
    rdfs:domain cacontology-physical:PhysicalSearch ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-physical:hasSearchCompleteness a owl:DatatypeProperty ;
    rdfs:label "has search completeness"@en ;
    rdfs:comment "Completeness assessment of search coverage (gUFO quality aspect)."@en ;
    rdfs:domain cacontology-physical:PhysicalSearch ;
    rdfs:range xsd:double .

cacontology-physical:hasSearchEfficiency a owl:DatatypeProperty ;
    rdfs:label "has search efficiency"@en ;
    rdfs:comment "Efficiency rating of search operation (gUFO quality aspect)."@en ;
    rdfs:domain cacontology-physical:PhysicalSearch ;
    rdfs:range xsd:double .

cacontology-physical:hasSearchEndPoint a owl:DatatypeProperty ;
    rdfs:label "has search end point"@en ;
    rdfs:comment "Temporal end point for search events (gUFO temporal property)."@en ;
    rdfs:domain cacontology-physical:PhysicalSearch ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-physical:hasSearchThoroughness a owl:DatatypeProperty ;
    rdfs:label "has search thoroughness"@en ;
    rdfs:comment "Thoroughness level of physical search (gUFO quality aspect)."@en ;
    rdfs:domain cacontology-physical:PhysicalSearch ;
    rdfs:range xsd:string .

cacontology-physical:hasTraceability a owl:DatatypeProperty ;
    rdfs:label "has traceability"@en ;
    rdfs:comment "Traceability level of procurement source (gUFO quality aspect)."@en ;
    rdfs:domain cacontology-physical:CriminalProcurement ;
    rdfs:range xsd:double .

cacontology-physical:hiddenCompartment a owl:DatatypeProperty ;
    rdfs:label "hidden compartment"@en ;
    rdfs:comment "Whether the item contains hidden compartments or concealed areas."@en ;
    rdfs:domain cacontology-physical:PhysicalEvidence ;
    rdfs:range xsd:boolean .

cacontology-physical:linkedToTrafficStop a owl:ObjectProperty ;
    rdfs:label "linked to traffic stop"@en ;
    rdfs:comment "Links bodycam footage to the traffic stop during which it was recorded."@en ;
    rdfs:domain cacontology-physical:BodycamFootage ;
    rdfs:range cacontology-physical:PhysicalSearch .

cacontology-physical:matchesSelfie a owl:DatatypeProperty ;
    rdfs:label "matches selfie"@en ;
    rdfs:comment "Whether the bodycam footage was matched to selfies sent by suspect (as in Miami ICAC case)."@en ;
    rdfs:domain cacontology-physical:BodycamFootage ;
    rdfs:range xsd:boolean .

cacontology-physical:modificationPurpose a owl:DatatypeProperty ;
    rdfs:label "modification purpose"@en ;
    rdfs:comment "Purpose of item modification for criminal activity."@en ;
    rdfs:domain cacontology-physical:ItemModification ;
    rdfs:range xsd:string .

cacontology-physical:paymentMethod a owl:DatatypeProperty ;
    rdfs:label "payment method"@en ;
    rdfs:comment "Method of payment used (credit_card, cash, digital_currency, check)."@en ;
    rdfs:domain cacontology-physical:CriminalProcurement ;
    rdfs:range xsd:string .

cacontology-physical:physicalCondition a owl:DatatypeProperty ;
    rdfs:label "physical condition"@en ;
    rdfs:comment "Physical state of the evidence (excellent, good, fair, poor, damaged)."@en ;
    rdfs:domain cacontology-physical:PhysicalEvidence ;
    rdfs:range xsd:string .

cacontology-physical:procuredBy a owl:ObjectProperty ;
    rdfs:label "procured by"@en ;
    rdfs:comment "Links a physical evidence item to its procurement action."@en ;
    rdfs:domain cacontology-physical:PhysicalEvidence ;
    rdfs:range cacontology-physical:CriminalProcurement .

cacontology-physical:procurementCost a owl:DatatypeProperty ;
    rdfs:label "procurement cost"@en ;
    rdfs:comment "Cost paid for the item in USD."@en ;
    rdfs:domain cacontology-physical:CriminalProcurement ;
    rdfs:range xsd:decimal .

cacontology-physical:procurementDate a owl:DatatypeProperty ;
    rdfs:label "procurement date"@en ;
    rdfs:comment "Date when the item was acquired by the suspect."@en ;
    rdfs:domain cacontology-physical:CriminalProcurement ;
    rdfs:range xsd:dateTime .

cacontology-physical:procurementMethod a owl:DatatypeProperty ;
    rdfs:label "procurement method"@en ;
    rdfs:comment "Method used to acquire the item (online_purchase, retail_store, private_sale, gift)."@en ;
    rdfs:domain cacontology-physical:CriminalProcurement ;
    rdfs:range xsd:string .

cacontology-physical:procurementSource a owl:DatatypeProperty ;
    rdfs:label "procurement source"@en ;
    rdfs:comment "Source from which the item was acquired (vendor name, website, individual)."@en ;
    rdfs:domain cacontology-physical:CriminalProcurement ;
    rdfs:range xsd:string .

cacontology-physical:recordingDate a owl:DatatypeProperty ;
    rdfs:label "recording date"@en ;
    rdfs:comment "Date and time when the recording was made."@en ;
    rdfs:domain cacontology-physical:BodycamFootage ;
    rdfs:range xsd:dateTime .

cacontology-physical:recordingDuration a owl:DatatypeProperty ;
    rdfs:label "recording duration"@en ;
    rdfs:comment "Duration of the recording in seconds."@en ;
    rdfs:domain cacontology-physical:BodycamFootage ;
    rdfs:range xsd:decimal .

cacontology-physical:recordingOfficer a owl:ObjectProperty ;
    rdfs:label "recording officer"@en ;
    rdfs:comment "Officer whose bodycam made the recording."@en ;
    rdfs:domain cacontology-physical:BodycamFootage ;
    rdfs:range uco-identity:Person .

cacontology-physical:registeredToSuspect a owl:DatatypeProperty ;
    rdfs:label "registered to suspect"@en ;
    rdfs:comment "Whether the vehicle is registered to the suspect."@en ;
    rdfs:domain cacontology-physical:SuspectVehicle ;
    rdfs:range xsd:boolean .

cacontology-physical:searchDuration a owl:DatatypeProperty ;
    rdfs:label "search duration"@en ;
    rdfs:comment "Duration of the search in hours."@en ;
    rdfs:domain cacontology-physical:PhysicalSearch ;
    rdfs:range xsd:decimal .

cacontology-physical:searchScope a owl:DatatypeProperty ;
    rdfs:label "search scope"@en ;
    rdfs:comment "Areas or items covered by the search authorization."@en ;
    rdfs:domain cacontology-physical:PhysicalSearch ;
    rdfs:range xsd:string .

cacontology-physical:searchWarrant a owl:ObjectProperty ;
    rdfs:label "search warrant"@en ;
    rdfs:comment "Warrant authorizing the search and seizure."@en ;
    rdfs:domain cacontology-physical:PhysicalSearch ;
    rdfs:range uco-observable:ObservableObject .

cacontology-physical:searchingOfficer a owl:ObjectProperty ;
    rdfs:label "searching officer"@en ;
    rdfs:comment "Law enforcement officer who conducted the search."@en ;
    rdfs:domain cacontology-physical:PhysicalSearch ;
    rdfs:range uco-identity:Person .

cacontology-physical:seizedDuring a owl:ObjectProperty ;
    rdfs:label "seized during"@en ;
    rdfs:comment "Links physical evidence to the search operation during which it was seized."@en ;
    rdfs:domain cacontology-physical:PhysicalEvidence ;
    rdfs:range cacontology-physical:PhysicalSearch .

cacontology-physical:seizureDate a owl:DatatypeProperty ;
    rdfs:label "seizure date"@en ;
    rdfs:comment "Date when the evidence was seized by law enforcement."@en ;
    rdfs:domain cacontology-physical:PhysicalEvidence ;
    rdfs:range xsd:dateTime .

cacontology-physical:seizureLocation a owl:ObjectProperty ;
    rdfs:label "seizure location"@en ;
    rdfs:comment "Physical location where evidence was seized."@en ;
    rdfs:domain cacontology-physical:PhysicalEvidence ;
    rdfs:range uco-location:Location .

cacontology-physical:serialNumber a owl:DatatypeProperty ;
    rdfs:label "serial number"@en ;
    rdfs:comment "Serial number of the device or item."@en ;
    rdfs:domain cacontology-physical:PhysicalEvidence ;
    rdfs:range xsd:string .

cacontology-physical:storageCapacity a owl:DatatypeProperty ;
    rdfs:label "storage capacity"@en ;
    rdfs:comment "Storage capacity of digital storage media in gigabytes."@en ;
    rdfs:domain cacontology-physical:StorageMedia ;
    rdfs:range xsd:decimal .

cacontology-physical:tamperEvidence a owl:DatatypeProperty ;
    rdfs:label "tamper evidence"@en ;
    rdfs:comment "Signs that the item has been tampered with or modified."@en ;
    rdfs:domain cacontology-physical:PhysicalEvidence ;
    rdfs:range xsd:string .

cacontology-physical:targetAgeGroup a owl:DatatypeProperty ;
    rdfs:label "target age group"@en ;
    rdfs:comment "Age group of children the item is designed to attract."@en ;
    rdfs:domain cacontology-physical:ChildTargetedItem ;
    rdfs:range xsd:string .

cacontology-physical:usedForIdentification a owl:DatatypeProperty ;
    rdfs:label "used for identification"@en ;
    rdfs:comment "Whether the recording was used to identify suspects."@en ;
    rdfs:domain cacontology-physical:BodycamFootage ;
    rdfs:range xsd:boolean .

cacontology-physical:usedInOffense a owl:DatatypeProperty ;
    rdfs:label "used in offense"@en ;
    rdfs:comment "Whether the vehicle was used in the commission of the offense."@en ;
    rdfs:domain cacontology-physical:SuspectVehicle ;
    rdfs:range xsd:boolean .

cacontology-physical:vapeBrand a owl:DatatypeProperty ;
    rdfs:label "vape brand"@en ;
    rdfs:comment "Brand of the vape device."@en ;
    rdfs:domain cacontology-physical:VapeDevice ;
    rdfs:range xsd:string .

cacontology-physical:vapeFlavor a owl:DatatypeProperty ;
    rdfs:label "vape flavor"@en ;
    rdfs:comment "Flavor of the vape device (e.g., 'strawberry')."@en ;
    rdfs:domain cacontology-physical:VapeDevice ;
    rdfs:range xsd:string .

cacontology-physical:vehicleColor a owl:DatatypeProperty ;
    rdfs:label "vehicle color"@en ;
    rdfs:comment "Exterior color of the vehicle (e.g., 'white')."@en ;
    rdfs:domain cacontology-physical:SuspectVehicle ;
    rdfs:range xsd:string .

cacontology-physical:vehicleLicensePlate a owl:DatatypeProperty ;
    rdfs:label "vehicle license plate"@en ;
    rdfs:comment "License plate number of the vehicle."@en ;
    rdfs:domain cacontology-physical:SuspectVehicle ;
    rdfs:range xsd:string .

cacontology-physical:vehicleMake a owl:DatatypeProperty ;
    rdfs:label "vehicle make"@en ;
    rdfs:comment "Manufacturer of the vehicle (e.g., 'Toyota')."@en ;
    rdfs:domain cacontology-physical:SuspectVehicle ;
    rdfs:range xsd:string .

cacontology-physical:vehicleModel a owl:DatatypeProperty ;
    rdfs:label "vehicle model"@en ;
    rdfs:comment "Model of the vehicle (e.g., 'Corolla')."@en ;
    rdfs:domain cacontology-physical:SuspectVehicle ;
    rdfs:range xsd:string .

cacontology-physical:vehicleVIN a owl:DatatypeProperty ;
    rdfs:label "vehicle VIN"@en ;
    rdfs:comment "Vehicle Identification Number."@en ;
    rdfs:domain cacontology-physical:SuspectVehicle ;
    rdfs:range xsd:string .

cacontology-physical:vehicleYear a owl:DatatypeProperty ;
    rdfs:label "vehicle year"@en ;
    rdfs:comment "Model year of the vehicle (e.g., 2015)."@en ;
    rdfs:domain cacontology-physical:SuspectVehicle ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-physical:witnessPresent a owl:ObjectProperty ;
    rdfs:label "witness present"@en ;
    rdfs:comment "Civilian witness present during the search."@en ;
    rdfs:domain cacontology-physical:PhysicalSearch ;
    rdfs:range uco-identity:Person .

cacontology-physical-shapes:BodycamFootageShape a sh:NodeShape ;
    rdfs:label "Bodycam Footage Shape"@en ;
    rdfs:comment "Validation shape for bodycam footage evidence."@en ;
    sh:property [ sh:datatype rdf:langString ;
            sh:maxCount 1 ;
            sh:message "Bodycam footage should have a label."@en ;
            sh:minCount 0 ;
            sh:path rdfs:label ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "May specify the recording date."@en ;
            sh:minCount 0 ;
            sh:path cacontology-physical1:recordingDate ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "May specify if used for suspect identification."@en ;
            sh:minCount 0 ;
            sh:path cacontology-physical1:usedForIdentification ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "May specify if footage was matched to suspect selfies."@en ;
            sh:minCount 0 ;
            sh:path cacontology-physical1:matchesSelfie ] ;
    sh:targetClass cacontology-physical1:BodycamFootage .

cacontology-physical-shapes:ComputerEquipmentCompositionShape a sh:NodeShape ;
    rdfs:label "Computer Equipment Composition Shape"@en ;
    rdfs:comment "Validates gUFO part-whole relationships for computer equipment composition."@en ;
    sh:sparql [ sh:message "Computer equipment must have consistent component relationships (gUFO part-whole constraint)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this rdf:type cacontology-physical:ComputerEquipment .
                $this cacontology-physical:containsItem ?storage .
                ?storage rdf:type cacontology-physical:StorageMedia .
                FILTER NOT EXISTS {
                    ?storage cacontology-physical:storageCapacity ?capacity .
                    FILTER (?capacity > 0)
                }
            }
        """ ] ;
    sh:targetClass cacontology-physical1:ComputerEquipment .

cacontology-physical-shapes:ComputerEquipmentShape a sh:NodeShape ;
    rdfs:label "Computer Equipment Shape"@en ;
    rdfs:comment "Enhanced validation shape for computer equipment instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 50 ;
            sh:message "Computer equipment must specify device brand (2-50 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 2 ;
            sh:path cacontology-physical1:deviceBrand ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 100 ;
            sh:message "Computer equipment must specify device model (2-100 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 2 ;
            sh:path cacontology-physical1:deviceModel ],
        [ sh:datatype xsd:string ;
            sh:in ( "unencrypted" "partially_encrypted" "fully_encrypted" "password_protected" "unknown" ) ;
            sh:maxCount 1 ;
            sh:message "Computer equipment must specify encryption status from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-physical1:encryptionStatus ],
        [ sh:datatype xsd:string ;
            sh:in ( "working" "non_functional" "partially_functional" "unknown" ) ;
            sh:maxCount 1 ;
            sh:message "Computer equipment must specify functional status from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-physical1:functionalStatus ] ;
    sh:targetClass cacontology-physical1:ComputerEquipment .

cacontology-physical-shapes:CondomsShape a sh:NodeShape ;
    rdfs:label "Condoms Shape"@en ;
    rdfs:comment "Validation shape for condoms found as evidence."@en ;
    sh:property [ sh:datatype rdf:langString ;
            sh:maxCount 1 ;
            sh:message "Condoms evidence should have a label."@en ;
            sh:minCount 0 ;
            sh:path rdfs:label ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:message "May specify the condom brand."@en ;
            sh:minCount 0 ;
            sh:path cacontology-physical1:condomBrand ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 100 ;
            sh:message "Condom quantity should be between 1 and 100."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1 ;
            sh:path cacontology-physical1:condomQuantity ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:message "May specify where the condoms were found."@en ;
            sh:minCount 0 ;
            sh:path cacontology-physical1:foundInLocation ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "May specify if suspect agreed to bring this item."@en ;
            sh:minCount 0 ;
            sh:path cacontology-physical1:agreedToBring ] ;
    sh:targetClass cacontology-physical1:Condoms .

cacontology-physical-shapes:ConsentToSearchAuthorizationShape a sh:NodeShape ;
    rdfs:label "Consent to Search Authorization Shape"@en ;
    rdfs:comment "Validation shape for consent-based search authorizations."@en ;
    sh:property [ sh:datatype rdf:langString ;
            sh:maxCount 1 ;
            sh:message "Consent authorization should have a label."@en ;
            sh:minCount 0 ;
            sh:path rdfs:label ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "May specify if consent was given."@en ;
            sh:minCount 0 ;
            sh:path cacontology-physical1:consentGiven ],
        [ sh:datatype xsd:string ;
            sh:in ( "verbal" "written" "implied" ) ;
            sh:maxCount 1 ;
            sh:message "Consent type must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-physical1:consentType ],
        [ sh:datatype xsd:string ;
            sh:in ( "vehicle_only" "device_only" "full_search" "limited" ) ;
            sh:maxCount 1 ;
            sh:message "Consent scope must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-physical1:consentScope ] ;
    sh:targetClass cacontology-physical1:ConsentToSearchAuthorization .

cacontology-physical-shapes:ContaminationPreventionRule a sh:NodeShape ;
    rdfs:label "Contamination Prevention Rule"@en ;
    rdfs:comment "Advanced gUFO business rule: Low contamination requires excellent preservation and handling."@en ;
    sh:sparql [ sh:message "Evidence with low contamination levels must have excellent preservation quality (gUFO business rule)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-physical:hasContaminationLevel ?contamination .
                FILTER (?contamination <= 0.2)
                FILTER NOT EXISTS {
                    $this cacontology-physical:hasPreservationQuality ?preservation .
                    FILTER (?preservation IN ("excellent", "optimal"))
                }
            }
        """ ] ;
    sh:targetClass cacontology-physical1:PhysicalEvidence .

cacontology-physical-shapes:CriminalProcurementShape a sh:NodeShape ;
    rdfs:label "Criminal Procurement Shape"@en ;
    rdfs:comment "Enhanced validation shape for criminal procurement instances with gUFO quality aspects."@en ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 1000000.0 ;
            sh:message "Procurement cost must be between $0.00 and $1,000,000.00."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-physical1:procurementCost ],
        [ sh:datatype xsd:string ;
            sh:in ( "credit_card" "cash" "digital_currency" "check" "money_order" "unknown" ) ;
            sh:maxCount 1 ;
            sh:message "Payment method must be from the allowed list when specified."@en ;
            sh:minCount 0 ;
            sh:path cacontology-physical1:paymentMethod ],
        [ sh:datatype xsd:string ;
            sh:in ( "none" "low" "moderate" "high" "critical" ) ;
            sh:maxCount 1 ;
            sh:message "Procurement suspicion must be from allowed values (gUFO quality aspect)."@en ;
            sh:path cacontology-physical1:hasProcurementSuspicion ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Traceability must be between 0.0 and 1.0 (gUFO quality aspect)."@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-physical1:hasTraceability ],
        [ sh:datatype xsd:string ;
            sh:in ( "low" "moderate" "high" "extreme" "unknown" ) ;
            sh:maxCount 1 ;
            sh:message "Acquisition risk must be from allowed values (gUFO quality aspect)."@en ;
            sh:path cacontology-physical1:hasAcquisitionRisk ],
        [ sh:datatype xsd:string ;
            sh:in ( "online_purchase" "retail_store" "private_sale" "gift" "theft" "unknown" ) ;
            sh:maxCount 1 ;
            sh:message "Criminal procurement must specify procurement method from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-physical1:procurementMethod ] ;
    sh:targetClass cacontology-physical1:CriminalProcurement .

cacontology-physical-shapes:CustodyIntegrityShape a sh:NodeShape ;
    rdfs:label "Custody Integrity Shape"@en ;
    rdfs:comment "Validates evidence custody integrity."@en ;
    sh:sparql [ sh:message "Compromised custody integrity should have documentation issues flagged."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-physical:hasCustodyIntegrity "compromised" ;
                      cacontology-physical:hasDocumentationCompleteness ?completeness .
                FILTER (?completeness > 0.8)
            }
        """ ] ;
    sh:targetClass cacontology-physical1:EvidenceCustodianRole .

cacontology-physical-shapes:DeviceConsentSearchShape a sh:NodeShape ;
    rdfs:label "Device Consent Search Shape"@en ;
    rdfs:comment "Validation shape for device consent search authorizations."@en ;
    sh:property [ sh:datatype rdf:langString ;
            sh:maxCount 1 ;
            sh:message "Device consent search should have a label."@en ;
            sh:minCount 0 ;
            sh:path rdfs:label ] ;
    sh:targetClass cacontology-physical1:DeviceConsentSearch .

cacontology-physical-shapes:EvidenceCompositionShape a sh:NodeShape ;
    rdfs:label "Evidence Composition Shape"@en ;
    rdfs:comment "Validates gUFO part-whole relationships for evidence composition."@en ;
    sh:sparql [ sh:message "Evidence containment relationships must be consistent with gUFO part-whole constraints."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-physical:containsItem ?part .
                ?part cacontology-physical:containsItem $this .
            }
        """ ] ;
    sh:targetClass cacontology-physical1:PhysicalEvidence .

cacontology-physical-shapes:EvidenceCrossReferenceShape a sh:NodeShape ;
    rdfs:label "Evidence Cross Reference Shape"@en ;
    rdfs:comment "Validates cross-references between evidence and related entities."@en ;
    sh:sparql [ sh:message "Physical evidence must have either seizure or procurement information."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this rdf:type cacontology-physical:PhysicalEvidence .
                FILTER NOT EXISTS {
                    { $this cacontology-physical:seizedDuring ?search } UNION
                    { $this cacontology-physical:procuredBy ?procurement }
                }
            }
        """ ] ;
    sh:targetClass cacontology-physical1:PhysicalEvidence .

cacontology-physical-shapes:EvidenceCustodianRoleShape a sh:NodeShape ;
    rdfs:label "Evidence Custodian Role Shape"@en ;
    rdfs:comment "Enhanced validation shape for evidence custodian role instances with gUFO quality aspects."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 100 ;
            sh:message "Evidence custodian role label should be between 5 and 100 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 5 ;
            sh:path rdfs:label ],
        [ sh:datatype xsd:string ;
            sh:in ( "compromised" "questionable" "acceptable" "secure" "pristine" ) ;
            sh:maxCount 1 ;
            sh:message "Custody integrity must be from allowed values (gUFO quality aspect)."@en ;
            sh:path cacontology-physical1:hasCustodyIntegrity ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Documentation completeness must be between 0.0 and 1.0 (gUFO quality aspect)."@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-physical1:hasDocumentationCompleteness ] ;
    sh:targetClass cacontology-physical1:EvidenceCustodianRole .

cacontology-physical-shapes:EvidenceDataQualityShape a sh:NodeShape ;
    rdfs:label "Evidence Data Quality Shape"@en ;
    rdfs:comment "Enhanced data quality validation for physical evidence with gUFO quality consistency rules."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Evidence label should be between 5 and 200 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 5 ;
            sh:path rdfs:label ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 1000 ;
            sh:message "Evidence comment should be between 10 and 1000 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 10 ;
            sh:path rdfs:comment ] ;
    sh:sparql [ sh:message "Evidence integrity and reliability should be consistent (gUFO quality consistency)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-physical:hasEvidenceIntegrity ?integrity ;
                      cacontology-physical:hasEvidenceReliability ?reliability .
                {
                    FILTER (?integrity = "pristine" && ?reliability < 0.9)
                } UNION {
                    FILTER (?integrity = "excellent" && (?reliability < 0.7 || ?reliability > 0.95))
                } UNION {
                    FILTER (?integrity = "compromised" && ?reliability > 0.3)
                }
            }
        """ ],
        [ sh:message "Contamination level and preservation quality should be correlated (gUFO quality consistency)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-physical:hasContaminationLevel ?contamination ;
                      cacontology-physical:hasPreservationQuality ?preservation .
                {
                    FILTER (?contamination >= 0.8 && ?preservation NOT IN ("poor", "fair"))
                } UNION {
                    FILTER (?contamination <= 0.2 && ?preservation NOT IN ("excellent", "optimal"))
                }
            }
        """ ] ;
    sh:targetClass cacontology-physical1:PhysicalEvidence .

cacontology-physical-shapes:EvidenceLifecycleTimingShape a sh:NodeShape ;
    rdfs:label "Evidence Lifecycle Timing Shape"@en ;
    rdfs:comment "Validates temporal sequence consistency in evidence lifecycle."@en ;
    sh:sparql [ sh:message "Evidence seizure date should be before analysis date when both are specified."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-physical:seizureDate ?seizureDate ;
                      cacontology-physical:seizedDuring ?search .
                ?analyst cacontology-physical:analyzedBy ?this ;
                         cacontology-physical:hasRoleBeginPoint ?analysisDate .
                FILTER (?seizureDate > ?analysisDate)
            }
        """ ] ;
    sh:targetClass cacontology-physical1:PhysicalEvidence .

cacontology-physical-shapes:EvidenceParticipationShape a sh:NodeShape ;
    rdfs:label "Evidence Participation Shape"@en ;
    rdfs:comment "Validates gUFO participation constraints for physical evidence."@en ;
    sh:sparql [ sh:message "Physical evidence must be associated with at least one search or procurement event (gUFO participation constraint)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this rdf:type cacontology-physical:PhysicalEvidence .
                FILTER NOT EXISTS {
                    { $this cacontology-physical:seizedDuring ?search } UNION
                    { $this cacontology-physical:procuredBy ?procurement }
                }
            }
        """ ] ;
    sh:targetClass cacontology-physical1:PhysicalEvidence .

cacontology-physical-shapes:EvidencePhaseTemporalShape a sh:NodeShape ;
    rdfs:label "Evidence Phase Temporal Shape"@en ;
    rdfs:comment "Validates gUFO temporal constraints for evidence phases."@en ;
    sh:property [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Evidence phase may have begin point timestamp."@en ;
            sh:path cacontology-physical1:hasPhaseBeginPoint ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Evidence phase may have end point timestamp."@en ;
            sh:path cacontology-physical1:hasPhaseEndPoint ] ;
    sh:sparql [ sh:message "Phase end must be after begin when both are specified."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-physical:hasPhaseBeginPoint ?start ;
                      cacontology-physical:hasPhaseEndPoint ?end .
                FILTER (?end <= ?start)
            }
        """ ] ;
    sh:targetClass gufo:Phase .

cacontology-physical-shapes:EvidencePhaseTypeValidationShape a sh:NodeShape ;
    rdfs:label "Evidence Phase Type Validation Shape"@en ;
    rdfs:comment "Validates gUFO Phase type consistency for evidence phases."@en ;
    sh:sparql [ sh:message "Evidence phases must be properly typed as gUFO Phase and extend evidence classes."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this rdf:type gufo:Phase .
                FILTER NOT EXISTS {
                    $this rdf:type ?phaseClass .
                    ?phaseClass rdfs:subClassOf* cacontology-physical:PhysicalEvidence .
                }
            }
        """ ] ;
    sh:targetClass gufo:Phase .

cacontology-physical-shapes:EvidenceSituationTypeValidationShape a sh:NodeShape ;
    rdfs:label "Evidence Situation Type Validation Shape"@en ;
    rdfs:comment "Validates gUFO Situation type consistency for evidence situations."@en ;
    sh:property [ sh:hasValue gufo:Situation ;
            sh:message "Evidence situation should extend gUFO Situation."@en ;
            sh:minCount 0 ;
            sh:path rdfs:subClassOf ] ;
    sh:targetClass gufo:Situation .

cacontology-physical-shapes:EvidenceTemporalShape a sh:NodeShape ;
    rdfs:label "Evidence Temporal Shape"@en ;
    rdfs:comment "Validates gUFO temporal constraints for physical evidence."@en ;
    sh:property [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Evidence may have begin point timestamp."@en ;
            sh:path cacontology-physical1:hasEvidenceBeginPoint ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Evidence may have end point timestamp."@en ;
            sh:path cacontology-physical1:hasEvidenceEndPoint ] ;
    sh:sparql [ sh:message "Evidence end must be after begin when both are specified (gUFO temporal constraint)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-physical:hasEvidenceBeginPoint ?start ;
                      cacontology-physical:hasEvidenceEndPoint ?end .
                FILTER (?end <= ?start)
            }
        """ ] ;
    sh:targetClass cacontology-physical1:PhysicalEvidence .

cacontology-physical-shapes:ForensicAnalystRoleShape a sh:NodeShape ;
    rdfs:label "Forensic Analyst Role Shape"@en ;
    rdfs:comment "Enhanced validation shape for forensic analyst role instances with gUFO quality aspects."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 100 ;
            sh:message "Forensic analyst role label should be between 5 and 100 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 5 ;
            sh:path rdfs:label ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Analysis accuracy must be between 0.0 and 1.0 (gUFO quality aspect)."@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-physical1:hasAnalysisAccuracy ],
        [ sh:datatype xsd:string ;
            sh:in ( "unreliable" "questionable" "acceptable" "reliable" "highly_reliable" ) ;
            sh:maxCount 1 ;
            sh:message "Analysis reliability must be from allowed values (gUFO quality aspect)."@en ;
            sh:path cacontology-physical1:hasAnalysisReliability ],
        [ sh:datatype xsd:string ;
            sh:in ( "unvalidated" "partially_validated" "validated" "peer_reviewed" "certified" ) ;
            sh:maxCount 1 ;
            sh:message "Method validation must be from allowed values (gUFO quality aspect)."@en ;
            sh:path cacontology-physical1:hasMethodValidation ] ;
    sh:targetClass cacontology-physical1:ForensicAnalystRole .

cacontology-physical-shapes:ForensicRoleParticipationShape a sh:NodeShape ;
    rdfs:label "Forensic Role Participation Shape"@en ;
    rdfs:comment "Validates gUFO participation constraints for forensic roles."@en ;
    sh:sparql [ sh:message "Forensic analyst roles must be associated with evidence analysis activities (gUFO participation constraint)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this rdf:type cacontology-physical:ForensicAnalystRole .
                FILTER NOT EXISTS {
                    ?evidence cacontology-physical:forensicAnalysisRequired true .
                    ?evidence cacontology-physical:analyzedBy $this .
                }
            }
        """ ] ;
    sh:targetClass cacontology-physical1:ForensicAnalystRole .

cacontology-physical-shapes:ForensicRoleTemporalShape a sh:NodeShape ;
    rdfs:label "Forensic Role Temporal Shape"@en ;
    rdfs:comment "Validates gUFO temporal constraints for forensic roles."@en ;
    sh:property [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Forensic role may have begin point timestamp."@en ;
            sh:path cacontology-physical1:hasRoleBeginPoint ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Forensic role may have end point timestamp."@en ;
            sh:path cacontology-physical1:hasRoleEndPoint ] ;
    sh:sparql [ sh:message "Role end must be after begin when both are specified."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-physical:hasRoleBeginPoint ?start ;
                      cacontology-physical:hasRoleEndPoint ?end .
                FILTER (?end <= ?start)
            }
        """ ] ;
    sh:targetClass gufo:Role .

cacontology-physical-shapes:ForensicRoleTypeValidationShape a sh:NodeShape ;
    rdfs:label "Forensic Role Type Validation Shape"@en ;
    rdfs:comment "Validates gUFO Role type consistency for forensic roles."@en ;
    sh:sparql [ sh:message "Forensic roles must be properly typed as gUFO Role and extend UCO Identity."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this rdf:type gufo:Role .
                FILTER NOT EXISTS {
                    $this rdfs:subClassOf* uco-identity:Person .
                }
            }
        """ ] ;
    sh:targetClass gufo:Role .

cacontology-physical-shapes:HighValueEvidenceRule a sh:NodeShape ;
    rdfs:label "High Value Evidence Rule"@en ;
    rdfs:comment "Advanced gUFO business rule: High forensic value evidence should have excellent integrity and preservation."@en ;
    sh:sparql [ sh:message "Critical or high forensic value evidence must have excellent integrity and preservation quality (gUFO business rule)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-physical:hasForensicValue ?value .
                FILTER (?value IN ("critical", "high"))
                {
                    FILTER NOT EXISTS {
                        $this cacontology-physical:hasEvidenceIntegrity ?integrity .
                        FILTER (?integrity IN ("excellent", "pristine"))
                    }
                } UNION {
                    FILTER NOT EXISTS {
                        $this cacontology-physical:hasPreservationQuality ?preservation .
                        FILTER (?preservation IN ("excellent", "optimal"))
                    }
                }
            }
        """ ] ;
    sh:targetClass cacontology-physical1:PhysicalEvidence .

cacontology-physical-shapes:PhysicalEvidenceObjectTypeValidationShape a sh:NodeShape ;
    rdfs:label "Physical Evidence Object Type Validation Shape"@en ;
    rdfs:comment "Validates gUFO Object type consistency for physical evidence."@en ;
    sh:property [ sh:hasValue gufo:Object ;
            sh:message "Physical evidence must be typed as gUFO Object."@en ;
            sh:minCount 1 ;
            sh:path rdf:type ],
        [ sh:hasValue gufo:Object ;
            sh:message "Physical evidence class should extend gUFO Object."@en ;
            sh:minCount 0 ;
            sh:path rdfs:subClassOf ] ;
    sh:targetClass cacontology-physical1:PhysicalEvidence .

cacontology-physical-shapes:PhysicalEvidenceShape a sh:NodeShape ;
    rdfs:label "Physical Evidence Shape"@en ;
    rdfs:comment "Enhanced validation shape for physical evidence instances with gUFO quality aspects."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "digital_media" "documents" "photographs" "clothing" "biological_samples" "weapons" "contraband" "personal_items" ) ;
            sh:maxCount 1 ;
            sh:message "Physical evidence must specify evidence type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-physical1:evidenceType ],
        [ sh:datatype xsd:string ;
            sh:in ( "primary_evidence" "secondary_evidence" "corroborative_evidence" "circumstantial_evidence" "demonstrative_evidence" "real_evidence" ) ;
            sh:maxCount 1 ;
            sh:message "Physical evidence must specify evidence category from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-physical1:evidenceCategory ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Physical evidence must specify collection date."@en ;
            sh:minCount 1 ;
            sh:path cacontology-physical1:collectionDate ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Physical evidence must specify collection location (5-200 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path cacontology-physical1:collectionLocation ],
        [ sh:datatype xsd:string ;
            sh:in ( "excellent" "good" "fair" "poor" "damaged" "deteriorated" "contaminated" ) ;
            sh:maxCount 1 ;
            sh:message "Physical evidence must specify evidence condition from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-physical1:evidenceCondition ],
        [ sh:datatype xsd:string ;
            sh:in ( "collected" "processed" "analyzed" "stored" "returned" "destroyed" "missing" ) ;
            sh:maxCount 1 ;
            sh:message "Physical evidence must specify evidence status from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-physical1:evidenceStatus ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 50 ;
            sh:message "Physical evidence must specify evidence number (5-50 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path cacontology-physical1:evidenceNumber ],
        [ sh:datatype xsd:string ;
            sh:in ( "compromised" "questionable" "good" "excellent" "pristine" ) ;
            sh:maxCount 1 ;
            sh:message "Evidence integrity must be from allowed values (gUFO quality aspect)."@en ;
            sh:path cacontology-physical1:hasEvidenceIntegrity ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Evidence reliability must be between 0.0 and 1.0 (gUFO quality aspect)."@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-physical1:hasEvidenceReliability ],
        [ sh:datatype xsd:string ;
            sh:in ( "poor" "fair" "good" "excellent" "optimal" ) ;
            sh:maxCount 1 ;
            sh:message "Preservation quality must be from allowed values (gUFO quality aspect)."@en ;
            sh:path cacontology-physical1:hasPreservationQuality ],
        [ sh:datatype xsd:string ;
            sh:in ( "minimal" "limited" "moderate" "high" "critical" ) ;
            sh:maxCount 1 ;
            sh:message "Forensic value must be from allowed values (gUFO quality aspect)."@en ;
            sh:path cacontology-physical1:hasForensicValue ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Contamination level must be between 0.0 and 1.0 (gUFO quality aspect)."@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-physical1:hasContaminationLevel ] ;
    sh:targetClass cacontology-physical1:PhysicalEvidence .

cacontology-physical-shapes:PhysicalSearchShape a sh:NodeShape ;
    rdfs:label "Physical Search Shape"@en ;
    rdfs:comment "Enhanced validation shape for physical search instances with gUFO quality aspects."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 500 ;
            sh:message "Physical search must specify search scope (10-500 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 10 ;
            sh:path cacontology-physical1:searchScope ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 72.0 ;
            sh:message "Search duration must be between 0.25 and 72.0 hours."@en ;
            sh:minCount 1 ;
            sh:minInclusive 0.25 ;
            sh:path cacontology-physical1:searchDuration ],
        [ sh:datatype xsd:string ;
            sh:in ( "superficial" "basic" "thorough" "comprehensive" "exhaustive" ) ;
            sh:maxCount 1 ;
            sh:message "Search thoroughness must be from allowed values (gUFO quality aspect)."@en ;
            sh:path cacontology-physical1:hasSearchThoroughness ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Search efficiency must be between 0.0 and 1.0 (gUFO quality aspect)."@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-physical1:hasSearchEfficiency ],
        [ sh:datatype xsd:double ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Search completeness must be between 0.0 and 1.0 (gUFO quality aspect)."@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-physical1:hasSearchCompleteness ] ;
    sh:targetClass cacontology-physical1:PhysicalSearch .

cacontology-physical-shapes:ProcurementEventTemporalShape a sh:NodeShape ;
    rdfs:label "Procurement Event Temporal Shape"@en ;
    rdfs:comment "Validates gUFO temporal constraints for procurement events."@en ;
    sh:sparql [ sh:message "Procurement events must have consistent temporal boundaries with end after start."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-physical:hasProcurementBeginPoint ?start ;
                      cacontology-physical:hasProcurementEndPoint ?end .
                FILTER (?end <= ?start)
            }
        """ ] ;
    sh:targetClass cacontology-physical1:CriminalProcurement .

cacontology-physical-shapes:ProcurementEventTypeValidationShape a sh:NodeShape ;
    rdfs:label "Procurement Event Type Validation Shape"@en ;
    rdfs:comment "Validates gUFO Event type consistency for procurement events."@en ;
    sh:property [ sh:hasValue gufo:Event ;
            sh:message "Criminal procurement must be typed as gUFO Event."@en ;
            sh:minCount 1 ;
            sh:path rdf:type ] ;
    sh:sparql [ sh:message "Procurement events must be properly typed as gUFO Event and extend UCO Action."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this rdf:type gufo:Event .
                FILTER NOT EXISTS {
                    $this rdf:type ?actionClass .
                    ?actionClass rdfs:subClassOf* uco-action:Action .
                }
            }
        """ ] ;
    sh:targetClass cacontology-physical1:CriminalProcurement .

cacontology-physical-shapes:ReliableAnalysisRule a sh:NodeShape ;
    rdfs:label "Reliable Analysis Rule"@en ;
    rdfs:comment "Advanced gUFO business rule: Highly reliable analysis requires validated methods and high accuracy."@en ;
    sh:sparql [ sh:message "Highly reliable analysis must use validated methods and have high accuracy ratings (gUFO business rule)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-physical:hasAnalysisReliability "highly_reliable" .
                {
                    FILTER NOT EXISTS {
                        $this cacontology-physical:hasMethodValidation ?validation .
                        FILTER (?validation IN ("validated", "peer_reviewed", "certified"))
                    }
                } UNION {
                    FILTER NOT EXISTS {
                        $this cacontology-physical:hasAnalysisAccuracy ?accuracy .
                        FILTER (?accuracy >= 0.9)
                    }
                }
            }
        """ ] ;
    sh:targetClass cacontology-physical1:ForensicAnalystRole .

cacontology-physical-shapes:SearchEventTemporalShape a sh:NodeShape ;
    rdfs:label "Search Event Temporal Shape"@en ;
    rdfs:comment "Validates gUFO temporal constraints for search events."@en ;
    sh:sparql [ sh:message "gUFO Events must have consistent temporal boundaries with end after start."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-physical:hasSearchBeginPoint ?start ;
                      cacontology-physical:hasSearchEndPoint ?end .
                FILTER (?end <= ?start)
            }
        """ ] ;
    sh:targetClass cacontology-physical1:PhysicalSearch .

cacontology-physical-shapes:SearchEventTimingShape a sh:NodeShape ;
    rdfs:label "Search Event Timing Shape"@en ;
    rdfs:comment "Validates search event timing consistency."@en ;
    sh:sparql [ sh:message "Search events should occur after procurement events for the same evidence."@en ;
            sh:select """
            SELECT $this
            WHERE {
                ?evidence cacontology-physical:seizedDuring $this ;
                         cacontology-physical:procuredBy ?procurement .
                ?procurement cacontology-physical:procurementDate ?procurementDate .
                $this cacontology-physical:hasSearchBeginPoint ?searchDate .
                FILTER (?searchDate < ?procurementDate)
            }
        """ ] ;
    sh:targetClass cacontology-physical1:PhysicalSearch .

cacontology-physical-shapes:SearchEventTypeValidationShape a sh:NodeShape ;
    rdfs:label "Search Event Type Validation Shape"@en ;
    rdfs:comment "Validates gUFO Event type consistency for search events."@en ;
    sh:property [ sh:hasValue gufo:Event ;
            sh:message "Physical search must be typed as gUFO Event."@en ;
            sh:minCount 1 ;
            sh:path rdf:type ] ;
    sh:sparql [ sh:message "Search events must be properly typed as gUFO Event and extend UCO Action."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this rdf:type gufo:Event .
                FILTER NOT EXISTS {
                    $this rdf:type ?actionClass .
                    ?actionClass rdfs:subClassOf* uco-action:Action .
                }
            }
        """ ] ;
    sh:targetClass cacontology-physical1:PhysicalSearch .

cacontology-physical-shapes:SearchParticipationShape a sh:NodeShape ;
    rdfs:label "Search Participation Shape"@en ;
    rdfs:comment "Validates gUFO participation constraints for search events."@en ;
    sh:sparql [ sh:message "Search events must involve at least one searching officer (gUFO participation constraint)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this rdf:type cacontology-physical:PhysicalSearch .
                FILTER NOT EXISTS {
                    $this cacontology-physical:searchingOfficer ?officer .
                }
            }
        """ ] ;
    sh:targetClass cacontology-physical1:PhysicalSearch .

cacontology-physical-shapes:SecureCustodyRule a sh:NodeShape ;
    rdfs:label "Secure Custody Rule"@en ;
    rdfs:comment "Advanced gUFO business rule: Pristine custody integrity requires complete documentation."@en ;
    sh:sparql [ sh:message "Pristine custody integrity must have complete documentation (gUFO business rule)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-physical:hasCustodyIntegrity "pristine" .
                FILTER NOT EXISTS {
                    $this cacontology-physical:hasDocumentationCompleteness ?completeness .
                    FILTER (?completeness >= 0.95)
                }
            }
        """ ] ;
    sh:targetClass cacontology-physical1:EvidenceCustodianRole .

cacontology-physical-shapes:SuspectVehicleShape a sh:NodeShape ;
    rdfs:label "Suspect Vehicle Shape"@en ;
    rdfs:comment "Validation shape for suspect vehicles used in ICAC offenses."@en ;
    sh:property [ sh:datatype rdf:langString ;
            sh:maxCount 1 ;
            sh:message "Suspect vehicle should have a label."@en ;
            sh:minCount 0 ;
            sh:path rdfs:label ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 50 ;
            sh:message "Vehicle make should be between 1 and 50 characters."@en ;
            sh:minCount 0 ;
            sh:minLength 1 ;
            sh:path cacontology-physical1:vehicleMake ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 50 ;
            sh:message "Vehicle model should be between 1 and 50 characters."@en ;
            sh:minCount 0 ;
            sh:minLength 1 ;
            sh:path cacontology-physical1:vehicleModel ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 2030 ;
            sh:message "Vehicle year must be between 1900 and 2030."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1900 ;
            sh:path cacontology-physical1:vehicleYear ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:message "May specify the vehicle color."@en ;
            sh:minCount 0 ;
            sh:path cacontology-physical1:vehicleColor ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 20 ;
            sh:message "License plate should be between 1 and 20 characters."@en ;
            sh:minCount 0 ;
            sh:minLength 1 ;
            sh:path cacontology-physical1:vehicleLicensePlate ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:message "VIN must be exactly 17 alphanumeric characters (no I, O, Q)."@en ;
            sh:minCount 0 ;
            sh:path cacontology-physical1:vehicleVIN ;
            sh:pattern "^[A-HJ-NPR-Z0-9]{17}$" ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "May specify if vehicle is registered to suspect."@en ;
            sh:minCount 0 ;
            sh:path cacontology-physical1:registeredToSuspect ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "May specify if vehicle was used in offense."@en ;
            sh:minCount 0 ;
            sh:path cacontology-physical1:usedInOffense ] ;
    sh:targetClass cacontology-physical1:SuspectVehicle .

cacontology-physical-shapes:SuspiciousProcurementRule a sh:NodeShape ;
    rdfs:label "Suspicious Procurement Rule"@en ;
    rdfs:comment "Advanced gUFO business rule: High suspicion procurement should have enhanced traceability requirements."@en ;
    sh:sparql [ sh:message "High or critical suspicion procurement must have good traceability and high acquisition risk (gUFO business rule)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-physical:hasProcurementSuspicion ?suspicion .
                FILTER (?suspicion IN ("high", "critical"))
                {
                    FILTER NOT EXISTS {
                        $this cacontology-physical:hasTraceability ?traceability .
                        FILTER (?traceability >= 0.6)
                    }
                } UNION {
                    FILTER NOT EXISTS {
                        $this cacontology-physical:hasAcquisitionRisk ?risk .
                        FILTER (?risk IN ("high", "extreme"))
                    }
                }
            }
        """ ] ;
    sh:targetClass cacontology-physical1:CriminalProcurement .

cacontology-physical-shapes:ThoroughSearchRule a sh:NodeShape ;
    rdfs:label "Thorough Search Rule"@en ;
    rdfs:comment "Advanced gUFO business rule: Comprehensive searches should have high efficiency and completeness."@en ;
    sh:sparql [ sh:message "Comprehensive or exhaustive searches must have high efficiency and completeness ratings (gUFO business rule)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-physical:hasSearchThoroughness ?thoroughness .
                FILTER (?thoroughness IN ("comprehensive", "exhaustive"))
                {
                    FILTER NOT EXISTS {
                        $this cacontology-physical:hasSearchEfficiency ?efficiency .
                        FILTER (?efficiency >= 0.7)
                    }
                } UNION {
                    FILTER NOT EXISTS {
                        $this cacontology-physical:hasSearchCompleteness ?completeness .
                        FILTER (?completeness >= 0.8)
                    }
                }
            }
        """ ] ;
    sh:targetClass cacontology-physical1:PhysicalSearch .

cacontology-physical-shapes:VapeDeviceShape a sh:NodeShape ;
    rdfs:label "Vape Device Shape"@en ;
    rdfs:comment "Validation shape for vape devices found as evidence."@en ;
    sh:property [ sh:datatype rdf:langString ;
            sh:maxCount 1 ;
            sh:message "Vape device should have a label."@en ;
            sh:minCount 0 ;
            sh:path rdfs:label ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:message "May specify the vape flavor."@en ;
            sh:minCount 0 ;
            sh:path cacontology-physical1:vapeFlavor ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:message "May specify the vape brand."@en ;
            sh:minCount 0 ;
            sh:path cacontology-physical1:vapeBrand ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:message "May specify where the vape was found."@en ;
            sh:minCount 0 ;
            sh:path cacontology-physical1:foundInLocation ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "May specify if suspect agreed to bring this item."@en ;
            sh:minCount 0 ;
            sh:path cacontology-physical1:agreedToBring ] ;
    sh:targetClass cacontology-physical1:VapeDevice .

cacontology-physical-shapes:VehicleConsentSearchShape a sh:NodeShape ;
    rdfs:label "Vehicle Consent Search Shape"@en ;
    rdfs:comment "Validation shape for vehicle consent search authorizations."@en ;
    sh:property [ sh:datatype rdf:langString ;
            sh:maxCount 1 ;
            sh:message "Vehicle consent search should have a label."@en ;
            sh:minCount 0 ;
            sh:path rdfs:label ] ;
    sh:targetClass cacontology-physical1:VehicleConsentSearch .

cacontology-platforms:AccountMetadata a owl:Class ;
    rdfs:label "Account Metadata"@en ;
    rdfs:comment "Account-level metadata including creation date, profile information, and activity patterns."@en ;
    rdfs:subClassOf cacontology-platforms:SocialMediaEvidence .

cacontology-platforms:AccountSuspensionActionShape a sh:NodeShape ;
    rdfs:label "Account Suspension Action Shape"@en ;
    rdfs:comment "Validation shape for account suspension action instances."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Account suspension action must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ],
        [ sh:datatype xsd:string ;
            sh:in ( "policy_violation" "illegal_content" "harassment" "spam" "underage_user" "terms_violation" ) ;
            sh:maxCount 1 ;
            sh:message "Suspension reason must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-platforms:suspensionReason ],
        [ sh:datatype xsd:integer ;
            sh:maxCount 1 ;
            sh:maxInclusive 3650 ;
            sh:message "Suspension duration must be between 1 and 3650 days."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1 ;
            sh:path cacontology-platforms:suspensionDuration ] ;
    sh:targetClass cacontology-platforms:AccountSuspensionAction .

cacontology-platforms:ContentHashingAction a owl:Class ;
    rdfs:label "Content Hashing Action"@en ;
    rdfs:comment "An action by a platform to generate hashes of content for detection and matching. Modeled as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-platforms:ContentModerationActionShape a sh:NodeShape ;
    rdfs:label "Content Moderation Action Shape"@en ;
    rdfs:comment "Validation shape for content moderation action instances."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Content moderation action must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ],
        [ sh:datatype xsd:string ;
            sh:in ( "approved" "removed" "restricted" "flagged" "escalated" "pending_review" ) ;
            sh:maxCount 1 ;
            sh:message "Moderation decision must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-platforms:moderationDecision ] ;
    sh:targetClass cacontology-platforms:ContentModerationAction .

cacontology-platforms:ContentModerationCapabilityShape a sh:NodeShape ;
    rdfs:label "Content Moderation Capability Shape"@en ;
    rdfs:comment "Validation shape for content moderation capability instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "automated" "human_review" "hybrid" "user_reporting" "ai_assisted" "none" ) ;
            sh:maxCount 1 ;
            sh:message "Moderation method must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-platforms:moderationMethod ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "CSAI detection enablement must be a boolean value."@en ;
            sh:minCount 0 ;
            sh:path cacontology-platforms:csaiDetectionEnabled ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Hash matching enablement must be a boolean value."@en ;
            sh:minCount 0 ;
            sh:path cacontology-platforms:hashMatchingEnabled ],
        [ sh:datatype xsd:string ;
            sh:in ( "24/7" "business_hours" "limited" "none" "automated_only" ) ;
            sh:maxCount 1 ;
            sh:message "Moderation presence must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-platforms:moderationPresence ] ;
    sh:targetClass cacontology-platforms:ContentModerationCapability .

cacontology-platforms:ContentModerationCrossReferenceShape a sh:NodeShape ;
    rdfs:label "Content Moderation Cross Reference Shape"@en ;
    rdfs:comment "Validates that content platforms have moderation capabilities."@en ;
    sh:sparql [ sh:message "Content platforms should have associated content moderation capabilities."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a ?platformType .
                FILTER (?platformType IN (
                    cacontology-platforms:SocialMediaPlatform,
                    cacontology-platforms:VideoStreamingPlatform
                ))
                FILTER NOT EXISTS {
                    $this cacontology-platforms:hasContentModerationCapability ?moderation .
                }
            }
        """ ] ;
    sh:targetClass cacontology-platforms:SocialMediaPlatform,
        cacontology-platforms:VideoStreamingPlatform .

cacontology-platforms:ContentModerationQueueShape a sh:NodeShape ;
    rdfs:label "Content Moderation Queue Shape"@en ;
    rdfs:comment "Validates moderation queue objects used for scaled content review operations."@en ;
    sh:property [ sh:maxCount 1 ;
            sh:message "Content moderation queue must specify exactly one operator (Electronic Service Provider)."@en ;
            sh:minCount 1 ;
            sh:path cacontology-platforms:queueOperatedBy ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:message "Queue size must be a non-negative integer when present."@en ;
            sh:minCount 0 ;
            sh:path cacontology-platforms:queueSize ] ;
    sh:targetClass cacontology-platforms:ContentModerationQueue .

cacontology-platforms:CrossPlatformEvidence a owl:Class ;
    rdfs:label "Cross-Platform Evidence"@en ;
    rdfs:comment "Evidence found across multiple social media platforms by the same user."@en ;
    rdfs:subClassOf cacontology-platforms:SocialMediaEvidence .

cacontology-platforms:CryptocurrencyService a owl:Class ;
    rdfs:label "Cryptocurrency Service"@en ;
    rdfs:comment "A service for cryptocurrency transactions and exchanges (e.g., Bitcoin, Coinbase, Binance). Modeled as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:ObservableObject .

cacontology-platforms:DarkWebService a owl:Class ;
    rdfs:label "Dark Web Service"@en ;
    rdfs:comment "A service accessible through anonymizing networks like Tor, often used for illegal activities. Modeled as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:ObservableObject .

cacontology-platforms:DataPreservationActionShape a sh:NodeShape ;
    rdfs:label "Data Preservation Action Shape"@en ;
    rdfs:comment "Validation shape for data preservation action instances."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Data preservation action must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ],
        [ sh:datatype xsd:integer ;
            sh:maxCount 1 ;
            sh:maxInclusive 3650 ;
            sh:message "Preservation period must be between 30 and 3650 days."@en ;
            sh:minCount 0 ;
            sh:minInclusive 30 ;
            sh:path cacontology-platforms:preservationPeriod ] ;
    sh:targetClass cacontology-platforms:DataPreservationAction .

cacontology-platforms:DataQualityShape a sh:NodeShape ;
    rdfs:label "Data Quality Shape"@en ;
    rdfs:comment "Validates data quality for platform entities."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Name must be between 2 and 200 characters."@en ;
            sh:minCount 1 ;
            sh:minLength 2 ;
            sh:path uco-core:name ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 1000 ;
            sh:message "Description should be between 10 and 1000 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 10 ;
            sh:path uco-core:description ] ;
    sh:targetClass cacontology-platforms:ElectronicServiceProvider,
        cacontology-platforms:FileHostingService,
        cacontology-platforms:GamePlatform,
        cacontology-platforms:MessagingService,
        cacontology-platforms:SocialMediaPlatform,
        cacontology-platforms:VideoStreamingPlatform .

cacontology-platforms:DataRetentionCrossReferenceShape a sh:NodeShape ;
    rdfs:label "Data Retention Cross Reference Shape"@en ;
    rdfs:comment "Validates that service providers have data retention policies."@en ;
    sh:sparql [ sh:message "Electronic service providers should have associated data retention policies."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-platforms:ElectronicServiceProvider .
                FILTER NOT EXISTS {
                    ?platform cacontology-platforms:operatedBy $this ;
                              cacontology-platforms:hasDataRetentionPolicy ?policy .
                }
            }
        """ ] ;
    sh:targetClass cacontology-platforms:ElectronicServiceProvider .

cacontology-platforms:DataRetentionPolicyShape a sh:NodeShape ;
    rdfs:label "Data Retention Policy Shape"@en ;
    rdfs:comment "Validation shape for data retention policy instances."@en ;
    sh:property [ sh:datatype xsd:integer ;
            sh:maxCount 1 ;
            sh:maxInclusive 3650 ;
            sh:message "User data retention period must be between 0 and 3650 days (10 years)."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0 ;
            sh:path cacontology-platforms:userDataRetentionPeriod ],
        [ sh:datatype xsd:integer ;
            sh:maxCount 1 ;
            sh:maxInclusive 3650 ;
            sh:message "Content retention period must be between 0 and 3650 days (10 years)."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0 ;
            sh:path cacontology-platforms:contentRetentionPeriod ],
        [ sh:datatype xsd:integer ;
            sh:maxCount 1 ;
            sh:maxInclusive 3650 ;
            sh:message "Log retention period must be between 0 and 3650 days (10 years)."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0 ;
            sh:path cacontology-platforms:logRetentionPeriod ],
        [ sh:datatype xsd:integer ;
            sh:maxCount 1 ;
            sh:maxInclusive 365 ;
            sh:message "Anonymous user data retention must be between 0 and 365 days."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0 ;
            sh:path cacontology-platforms:anonymousUserDataRetention ] ;
    sh:targetClass cacontology-platforms:DataRetentionPolicy .

cacontology-platforms:DeviceSocialMediaCorrelation a owl:Class ;
    rdfs:label "Device Social Media Correlation"@en ;
    rdfs:comment "Correlation between evidence found on devices and social media accounts."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-platforms:DigitalEvidenceCorrelation a owl:Class ;
    rdfs:label "Digital Evidence Correlation"@en ;
    rdfs:comment "Process of correlating evidence found across devices and platforms."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-platforms:ElectronicServiceProviderShape a sh:NodeShape ;
    rdfs:label "Electronic Service Provider Shape"@en ;
    rdfs:comment "Validation shape for electronic service provider instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Electronic service provider must have a name (2-200 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 2 ;
            sh:path uco-core:name ],
        [ sh:datatype xsd:string ;
            sh:maxCount 10 ;
            sh:maxLength 100 ;
            sh:message "Jurisdiction must be 2-100 characters when specified."@en ;
            sh:minCount 0 ;
            sh:minLength 2 ;
            sh:path cacontology-platforms:operatesInJurisdiction ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 100 ;
            sh:message "Headquarters location must be 2-100 characters when specified."@en ;
            sh:minCount 0 ;
            sh:minLength 2 ;
            sh:path cacontology-platforms:headquarteredIn ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Legal process acceptance must be a boolean value."@en ;
            sh:minCount 0 ;
            sh:path cacontology-platforms:acceptsLegalProcess ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Emergency disclosure capability must be a boolean value."@en ;
            sh:minCount 0 ;
            sh:path cacontology-platforms:emergencyDisclosureCapable ] ;
    sh:targetClass cacontology-platforms:ElectronicServiceProvider .

cacontology-platforms:EmergencyDisclosureRequestShape a sh:NodeShape ;
    rdfs:label "Emergency Disclosure Request Shape"@en ;
    rdfs:comment "Validation shape for emergency disclosure request instances (EDR)."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Emergency disclosure request must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 2000 ;
            sh:message "Emergency disclosure request must include a grounded description (10-2000 chars)."@en ;
            sh:minCount 1 ;
            sh:minLength 10 ;
            sh:path uco-core:description ] ;
    sh:targetClass cacontology-platforms:EmergencyDisclosureRequest .

cacontology-platforms:GamePlatformShape a sh:NodeShape ;
    rdfs:label "Game Platform Shape"@en ;
    rdfs:comment "Validation shape for game platform instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 100 ;
            sh:message "Game platform must have a name (2-100 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 2 ;
            sh:path uco-core:name ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Guest accounts allowance must be a boolean value."@en ;
            sh:minCount 0 ;
            sh:path cacontology-platforms:guestAccountsAllowed ],
        [ sh:datatype xsd:string ;
            sh:in ( "friend_request" "direct_message" "public_chat" "game_invite" "voice_chat" ) ;
            sh:maxCount 1 ;
            sh:message "Contact initiation method must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-platforms:contactInitiationMethod ] ;
    sh:targetClass cacontology-platforms:GamePlatform .

cacontology-platforms:LargeScalePlatformTakedownShape a sh:NodeShape ;
    rdfs:label "Large Scale Platform Takedown Shape"@en ;
    rdfs:comment "Validation shape for large scale platform takedown instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 100 ;
            sh:message "Large scale platform takedown must have a name (5-100 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path uco-core:name ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Large scale platform takedown must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ],
        [ sh:datatype xsd:string ;
            sh:in ( "local" "national" "international" "global" ) ;
            sh:maxCount 1 ;
            sh:message "Operation scale must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-platforms:operationScale ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 200 ;
            sh:message "Countries involved must be between 1 and 200."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1 ;
            sh:path cacontology-platforms:countriesInvolved ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 10000.0 ;
            sh:message "Evidence volume must be between 0.1 and 10000 terabytes."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.1 ;
            sh:path cacontology-platforms:evidenceVolumeTerabytes ] ;
    sh:targetClass cacontology-platforms:LargeScalePlatformTakedown .

cacontology-platforms:LegalComplianceValidationShape a sh:NodeShape ;
    rdfs:label "Legal Compliance Validation Shape"@en ;
    rdfs:comment "Validates legal compliance capabilities for service providers."@en ;
    sh:sparql [ sh:message "Service providers that accept legal process should have contact information."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-platforms:acceptsLegalProcess true .
                FILTER NOT EXISTS {
                    $this cacontology-platforms:legalProcessContactInfo ?contact .
                }
            }
        """ ] ;
    sh:targetClass cacontology-platforms:ElectronicServiceProvider .

cacontology-platforms:LegalDataDisclosureActionShape a sh:NodeShape ;
    rdfs:label "Legal Data Disclosure Action Shape"@en ;
    rdfs:comment "Validation shape for legal data disclosure action instances."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Legal data disclosure action must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ],
        [ sh:datatype xsd:integer ;
            sh:maxCount 1 ;
            sh:maxInclusive 365 ;
            sh:message "Response time frame must be between 1 and 365 days."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1 ;
            sh:path cacontology-platforms:responseTimeFrame ],
        [ sh:datatype xsd:string ;
            sh:in ( "search_warrant" "subpoena" "court_order" "emergency_request" "preservation_request" ) ;
            sh:maxCount 1 ;
            sh:message "Legal process used must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-platforms:legalProcessUsed ] ;
    sh:targetClass cacontology-platforms:LegalDataDisclosureAction .

cacontology-platforms:MassUserBehaviorAnalysisShape a sh:NodeShape ;
    rdfs:label "Mass User Behavior Analysis Shape"@en ;
    rdfs:comment "Validation shape for mass user behavior analysis instances."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Mass user behavior analysis must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 100.0 ;
            sh:message "Automated processing percentage must be between 0.0 and 100.0."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-platforms:automatedProcessingPercentage ] ;
    sh:targetClass cacontology-platforms:MassUserBehaviorAnalysis .

cacontology-platforms:MassUserDatabaseShape a sh:NodeShape ;
    rdfs:label "Mass User Database Shape"@en ;
    rdfs:comment "Validation shape for mass user database instances."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 100000000 ;
            sh:message "User count must be between 1000 and 100 million for mass databases."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1000 ;
            sh:path cacontology-platforms:userCount ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 3650 ;
            sh:message "Processing timeframe must be between 1 and 3650 days."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1 ;
            sh:path cacontology-platforms:processingTimeframeDays ] ;
    sh:targetClass cacontology-platforms:MassUserDatabase .

cacontology-platforms:MassivePlatformSituation a owl:Class ;
    rdfs:label "Massive Platform Situation"@en ;
    rdfs:comment "Situation involving platforms with massive user bases requiring specialized investigation approaches. Modeled as gUFO Situation."@en ;
    rdfs:subClassOf gufo:Situation .

cacontology-platforms:MessagingServiceShape a sh:NodeShape ;
    rdfs:label "Messaging Service Shape"@en ;
    rdfs:comment "Validation shape for messaging service instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 100 ;
            sh:message "Messaging service must have a name (2-100 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 2 ;
            sh:path uco-core:name ],
        [ sh:datatype xsd:string ;
            sh:in ( "none" "in-transit" "end-to-end" "partial" ) ;
            sh:maxCount 1 ;
            sh:message "Encryption level must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-platforms:encryptionLevel ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Anonymous chat allowance must be a boolean value."@en ;
            sh:minCount 0 ;
            sh:path cacontology-platforms:allowsAnonymousChat ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Conversation logging must be a boolean value."@en ;
            sh:minCount 0 ;
            sh:path cacontology-platforms:conversationLogging ] ;
    sh:targetClass cacontology-platforms:MessagingService .

cacontology-platforms:ModerationThroughputMetricsShape a sh:NodeShape ;
    rdfs:label "Moderation Throughput Metrics Shape"@en ;
    rdfs:comment "Validates moderation throughput/latency metrics used to quantify bottlenecks."@en ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:message "Review latency hours must be a non-negative decimal when present."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-platforms:reviewLatencyHours ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:message "Throughput per day must be a non-negative integer when present."@en ;
            sh:minCount 0 ;
            sh:path cacontology-platforms:throughputPerDay ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:message "Flag volume per month must be a non-negative integer when present."@en ;
            sh:minCount 0 ;
            sh:path cacontology-platforms:flagVolumePerMonth ] ;
    sh:targetClass cacontology-platforms:ModerationThroughputMetrics .

cacontology-platforms:MultiPlatformSituation a owl:Class ;
    rdfs:label "Multi-Platform Situation"@en ;
    rdfs:comment "Situation involving coordination across multiple platforms and service providers. Modeled as gUFO Situation."@en ;
    rdfs:subClassOf gufo:Situation .

cacontology-platforms:OnlineDatingPlatform a owl:Class ;
    rdfs:label "Online Dating Platform"@en ;
    rdfs:comment "A platform for meeting and dating online (e.g., Tinder, Bumble, Grindr, dating websites). Modeled as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:ObservableObject .

cacontology-platforms:PlatformCooperationSituation a owl:Class ;
    rdfs:label "Platform Cooperation Situation"@en ;
    rdfs:comment "Situation involving cooperative efforts between platforms and law enforcement. Modeled as gUFO Situation."@en ;
    rdfs:subClassOf gufo:Situation .

cacontology-platforms:PlatformDeploymentPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Platform Deployment Phase"@en ;
    rdfs:comment "Phase when platform is deployed and becomes operational. Modeled as anti-rigid gUFO Phase."@en ;
    rdfs:subClassOf cacontology-platforms:ElectronicServiceProvider .

cacontology-platforms:PlatformGrowthPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Platform Growth Phase"@en ;
    rdfs:comment "Phase of platform expansion and user base growth. Modeled as anti-rigid gUFO Phase."@en ;
    rdfs:subClassOf cacontology-platforms:ElectronicServiceProvider .

cacontology-platforms:PlatformInvestigationPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Platform Investigation Phase"@en ;
    rdfs:comment "Phase when platform is under law enforcement investigation. Modeled as anti-rigid gUFO Phase."@en ;
    rdfs:subClassOf cacontology-platforms:ElectronicServiceProvider .

cacontology-platforms:PlatformModerationPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Platform Moderation Phase"@en ;
    rdfs:comment "Phase of active content moderation and policy enforcement. Modeled as anti-rigid gUFO Phase."@en ;
    rdfs:subClassOf cacontology-platforms:ElectronicServiceProvider .

cacontology-platforms:PlatformOperation a owl:Class ;
    rdfs:label "Platform Operation"@en ;
    rdfs:comment "Coordinated law enforcement operation targeting specific platforms or services. Modeled as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action ;
    owl:equivalentClass cacontology-gufo:CriminalEvent .

cacontology-platforms:PlatformOperatorCrossReferenceShape a sh:NodeShape ;
    rdfs:label "Platform Operator Cross Reference Shape"@en ;
    rdfs:comment "Validates that platforms have associated operators."@en ;
    sh:sparql [ sh:message "Platform should have an associated electronic service provider operator."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a ?platformType .
                FILTER (?platformType IN (
                    cacontology-platforms:SocialMediaPlatform,
                    cacontology-platforms:MessagingService,
                    cacontology-platforms:VideoStreamingPlatform,
                    cacontology-platforms:FileHostingService,
                    cacontology-platforms:GamePlatform
                ))
                FILTER NOT EXISTS {
                    ?esp cacontology-platforms:operatedBy $this .
                }
            }
        """ ] ;
    sh:targetClass cacontology-platforms:FileHostingService,
        cacontology-platforms:GamePlatform,
        cacontology-platforms:MessagingService,
        cacontology-platforms:SocialMediaPlatform,
        cacontology-platforms:VideoStreamingPlatform .

cacontology-platforms:PlatformTakedownPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Platform Takedown Phase"@en ;
    rdfs:comment "Phase of platform takedown and shutdown operations. Modeled as anti-rigid gUFO Phase."@en ;
    rdfs:subClassOf cacontology-platforms:ElectronicServiceProvider .

cacontology-platforms:PrivateMessage a owl:Class ;
    rdfs:label "Private Message"@en ;
    rdfs:comment "Private messages or direct communications on social media platforms."@en ;
    rdfs:subClassOf cacontology-platforms:SocialMediaEvidence .

cacontology-platforms:ProfileBrowsingAnonymous a owl:Class ;
    rdfs:label "Profile Browsing Anonymous"@en ;
    rdfs:comment "Ability to browse and contact user profiles anonymously without revealing identity."@en ;
    rdfs:subClassOf cacontology-platforms:AnonymousContactOpportunity .

cacontology-platforms:RetentionPeriodValidationShape a sh:NodeShape ;
    rdfs:label "Retention Period Validation Shape"@en ;
    rdfs:comment "Validates logical consistency of retention periods."@en ;
    sh:sparql [ sh:message "Anonymous user data retention should not exceed general user data retention."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-platforms:userDataRetentionPeriod ?userRetention ;
                      cacontology-platforms:anonymousUserDataRetention ?anonRetention .
                FILTER (?anonRetention > ?userRetention)
            }
        """ ] ;
    sh:targetClass cacontology-platforms:DataRetentionPolicy .

cacontology-platforms:SocialMediaAppData a owl:Class ;
    rdfs:label "Social Media App Data"@en ;
    rdfs:comment "Application data from social media apps stored on devices."@en ;
    rdfs:subClassOf cacontology-platforms:ElectronicDeviceEvidence .

cacontology-platforms:SocialMediaPlatformShape a sh:NodeShape ;
    rdfs:label "Social Media Platform Shape"@en ;
    rdfs:comment "Validation shape for social media platform instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 100 ;
            sh:message "Social media platform must have a name (2-100 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 2 ;
            sh:path uco-core:name ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Registration requirement must be a boolean value."@en ;
            sh:minCount 0 ;
            sh:path cacontology-platforms:requiresRegistration ],
        [ sh:datatype xsd:string ;
            sh:in ( "social_media" "photo_sharing" "video_sharing" "microblogging" "professional_networking" ) ;
            sh:maxCount 1 ;
            sh:message "Platform type must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-platforms:platformType ],
        [ sh:datatype xsd:string ;
            sh:in ( "adults" "teens" "children" "all_ages" "professionals" ) ;
            sh:maxCount 1 ;
            sh:message "Primary user base must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-platforms:primaryUserBase ] ;
    sh:targetClass cacontology-platforms:SocialMediaPlatform .

cacontology-platforms:SocialMediaPost a owl:Class ;
    rdfs:label "Social Media Post"@en ;
    rdfs:comment "Individual posts, updates, or content shared on social media platforms."@en ;
    rdfs:subClassOf cacontology-platforms:SocialMediaEvidence .

cacontology-platforms:StoredSocialMediaContent a owl:Class ;
    rdfs:label "Stored Social Media Content"@en ;
    rdfs:comment "Social media content downloaded and stored on electronic devices."@en ;
    rdfs:subClassOf cacontology-platforms:ElectronicDeviceEvidence .

cacontology-platforms:TechnicalServiceProvider a owl:Class ;
    rdfs:label "Technical Service Provider"@en ;
    rdfs:comment "Organizations providing technical infrastructure (hosting, CDN, DNS, etc.) that may be involved in content distribution. Modeled as gUFO Organization."@en ;
    rdfs:subClassOf gufo:Organization,
        uco-identity:Organization .

cacontology-platforms:TemporalValidationShape a sh:NodeShape ;
    rdfs:label "Temporal Validation Shape"@en ;
    rdfs:comment "Validates temporal consistency for platform actions."@en ;
    sh:sparql [ sh:message "Start time must be before end time when both are specified."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this uco-core:startTime ?start ;
                      uco-core:endTime ?end .
                FILTER (?start >= ?end)
            }
        """ ] ;
    sh:targetClass cacontology-platforms:AccountSuspensionAction,
        cacontology-platforms:ContentModerationAction,
        cacontology-platforms:DataPreservationAction,
        cacontology-platforms:LargeScalePlatformTakedown,
        cacontology-platforms:LegalDataDisclosureAction,
        cacontology-platforms:MassUserBehaviorAnalysis .

cacontology-platforms:UserRiskClassificationShape a sh:NodeShape ;
    rdfs:label "User Risk Classification Shape"@en ;
    rdfs:comment "Validation shape for user risk classification instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "low" "medium" "high" "critical" ) ;
            sh:maxCount 1 ;
            sh:message "User risk level must be from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-platforms:userRiskLevel ] ;
    sh:targetClass cacontology-platforms:UserRiskClassification .

cacontology-platforms:UserScaleClassificationShape a sh:NodeShape ;
    rdfs:label "User Scale Classification Shape"@en ;
    rdfs:comment "Validation shape for user scale classification instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "small" "medium" "large" "massive" ) ;
            sh:maxCount 1 ;
            sh:message "Platform scale must be from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-platforms:platformScale ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Million plus users indicator must be a boolean value."@en ;
            sh:minCount 0 ;
            sh:path cacontology-platforms:millionPlusUsers ] ;
    sh:targetClass cacontology-platforms:UserScaleClassification .

cacontology-platforms:UserVerificationSystemShape a sh:NodeShape ;
    rdfs:label "User Verification System Shape"@en ;
    rdfs:comment "Validation shape for user verification system instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "none" "self_declaration" "credit_card" "id_verification" "parental_consent" "third_party" ) ;
            sh:maxCount 1 ;
            sh:message "Age verification method must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-platforms:ageVerificationMethod ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Identity verification requirement must be a boolean value."@en ;
            sh:minCount 0 ;
            sh:path cacontology-platforms:identityVerificationRequired ],
        [ sh:datatype xsd:string ;
            sh:in ( "none" "weak" "moderate" "strong" "government_id" ) ;
            sh:maxCount 1 ;
            sh:message "Verification strength must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-platforms:verificationStrength ] ;
    sh:targetClass cacontology-platforms:UserVerificationSystem .

cacontology-platforms:VideoStreamingPlatformShape a sh:NodeShape ;
    rdfs:label "Video Streaming Platform Shape"@en ;
    rdfs:comment "Validation shape for video streaming platform instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 100 ;
            sh:message "Video streaming platform must have a name (2-100 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 2 ;
            sh:path uco-core:name ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Age verification requirement must be a boolean value."@en ;
            sh:minCount 0 ;
            sh:path cacontology-platforms:ageVerificationRequired ] ;
    sh:targetClass cacontology-platforms:VideoStreamingPlatform .

cacontology-platforms:accountStatus a owl:DatatypeProperty ;
    rdfs:label "account status"@en ;
    rdfs:comment "Status of account (active, suspended, deleted, preserved)."@en ;
    rdfs:domain cacontology-platforms:SocialMediaAccount ;
    rdfs:range xsd:string .

cacontology-platforms:accountUsername a owl:DatatypeProperty ;
    rdfs:label "account username"@en ;
    rdfs:comment "Username or handle for social media account."@en ;
    rdfs:domain cacontology-platforms:SocialMediaAccount ;
    rdfs:range xsd:string .

cacontology-platforms:actionDuration a owl:DatatypeProperty ;
    rdfs:label "action duration"@en ;
    rdfs:comment "Duration of platform action."@en ;
    rdfs:domain cacontology-platforms:ContentModerationAction ;
    rdfs:range xsd:duration .

cacontology-platforms:anonymityLevel a owl:DatatypeProperty ;
    rdfs:label "anonymity level"@en ;
    rdfs:comment "Level of anonymity provided (full_anonymous, pseudo_anonymous, semi_verified, fully_verified)."@en ;
    rdfs:domain cacontology-platforms:AnonymityProtectionLevel ;
    rdfs:range xsd:string .

cacontology-platforms:contentType a owl:DatatypeProperty ;
    rdfs:label "content type"@en ;
    rdfs:comment "Type of content (text, image, video, document)."@en ;
    rdfs:domain cacontology-platforms:SocialMediaEvidence ;
    rdfs:range xsd:string .

cacontology-platforms:coordinatedBy a owl:ObjectProperty ;
    rdfs:label "coordinated by"@en ;
    rdfs:comment "Organization coordinating multi-platform investigation."@en ;
    rdfs:domain cacontology-platforms:PlatformInvestigationCoordination ;
    rdfs:range uco-identity:Organization .

cacontology-platforms:correlatesWithAccount a owl:ObjectProperty ;
    rdfs:label "correlates with account"@en ;
    rdfs:comment "Links device evidence to related social media account."@en ;
    rdfs:domain cacontology-platforms:ElectronicDeviceEvidence ;
    rdfs:range cacontology-platforms:SocialMediaAccount .

cacontology-platforms:correlatesWithDevice a owl:ObjectProperty ;
    rdfs:label "correlates with device"@en ;
    rdfs:comment "Links social media evidence to related device evidence."@en ;
    rdfs:domain cacontology-platforms:SocialMediaEvidence ;
    rdfs:range cacontology-platforms:ElectronicDeviceEvidence .

cacontology-platforms:crossPlatformAnonymity a owl:DatatypeProperty ;
    rdfs:label "cross platform anonymity"@en ;
    rdfs:comment "Whether anonymity is maintained across connected platforms or services."@en ;
    rdfs:domain cacontology-platforms:AnonymityProtectionLevel ;
    rdfs:range xsd:boolean .

cacontology-platforms:crossPlatformMatch a owl:ObjectProperty ;
    rdfs:label "cross platform match"@en ;
    rdfs:comment "Links evidence found on different platforms but from same user."@en ;
    rdfs:domain cacontology-platforms:SocialMediaEvidence ;
    rdfs:range cacontology-platforms:SocialMediaEvidence .

cacontology-platforms:dataDisclosed a owl:ObjectProperty ;
    rdfs:label "data disclosed"@en ;
    rdfs:comment "Links a disclosure action to the specific data that was disclosed."@en ;
    rdfs:domain cacontology-platforms:LegalDataDisclosureAction ;
    rdfs:range uco-observable:ObservableObject .

cacontology-platforms:deviceType a owl:DatatypeProperty ;
    rdfs:label "device type"@en ;
    rdfs:comment "Type of electronic device (computer, phone, tablet, storage media)."@en ;
    rdfs:domain cacontology-platforms:ElectronicDeviceEvidence ;
    rdfs:range xsd:string .

cacontology-platforms:devicesSearched a owl:DatatypeProperty ;
    rdfs:label "devices searched"@en ;
    rdfs:comment "Number of devices searched in simultaneous operation."@en ;
    rdfs:domain cacontology-platforms:SimultaneousSearchWarrant ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-platforms:discoveredDuring a owl:ObjectProperty ;
    rdfs:label "discovered during"@en ;
    rdfs:comment "Links evidence to the investigative action during which it was discovered."@en ;
    rdfs:domain cacontology-platforms:SocialMediaEvidence ;
    rdfs:range uco-action:Action .

cacontology-platforms:discoveryTimestamp a owl:DatatypeProperty ;
    rdfs:label "discovery timestamp"@en ;
    rdfs:comment "Timestamp when evidence was discovered by investigators."@en ;
    rdfs:domain cacontology-platforms:SocialMediaEvidence ;
    rdfs:range xsd:dateTime .

cacontology-platforms:enablesTemporaryAccounts a owl:ObjectProperty ;
    rdfs:label "enables temporary accounts"@en ;
    rdfs:comment "Links platform to temporary account systems enabled."@en ;
    rdfs:domain cacontology-platforms:AnonymousChatPlatform ;
    rdfs:range cacontology-platforms:TemporaryAccountSystem .

cacontology-platforms:enqueuedForModeration a owl:ObjectProperty ;
    rdfs:label "enqueued for moderation"@en ;
    dcterms:source "Community & Intelligence Beyond Detection (Global Emancipation Network), 2026-02-10."@en ;
    rdfs:comment "Links a content item or moderation-relevant observable object to a moderation queue for review/processing."@en ;
    rdfs:domain uco-observable:ObservableObject ;
    rdfs:range cacontology-platforms:ContentModerationQueue ;
    rdfs:seeAlso <https://www.linkedin.com/pulse/community-intelligence-beyond-detection-global-emancipation-network-xvemc/> .

cacontology-platforms:evidenceCategory a owl:DatatypeProperty ;
    rdfs:label "evidence category"@en ;
    rdfs:comment "Category of evidence (possession, distribution, production, communication)."@en ;
    rdfs:domain cacontology-platforms:SocialMediaEvidence ;
    rdfs:range xsd:string .

cacontology-platforms:evidenceTimestamp a owl:DatatypeProperty ;
    rdfs:label "evidence timestamp"@en ;
    rdfs:comment "Timestamp when evidence was created or posted."@en ;
    rdfs:domain cacontology-platforms:SocialMediaEvidence ;
    rdfs:range xsd:dateTime .

cacontology-platforms:facilitatesRandomMatching a owl:ObjectProperty ;
    rdfs:label "facilitates random matching"@en ;
    rdfs:comment "Links contact opportunity to random user matching systems."@en ;
    rdfs:domain cacontology-platforms:AnonymousContactOpportunity ;
    rdfs:range cacontology-platforms:RandomUserMatching .

cacontology-platforms:foundOnDevice a owl:DatatypeProperty ;
    rdfs:label "found on device"@en ;
    rdfs:comment "Whether evidence was found on electronic device."@en ;
    rdfs:domain cacontology-platforms:ElectronicDeviceEvidence ;
    rdfs:range xsd:boolean .

cacontology-platforms:foundOnSocialMedia a owl:DatatypeProperty ;
    rdfs:label "found on social media"@en ;
    rdfs:comment "Whether evidence was found on social media platform."@en ;
    rdfs:domain cacontology-platforms:SocialMediaEvidence ;
    rdfs:range xsd:boolean .

cacontology-platforms:governedByDisclosurePolicy a owl:ObjectProperty ;
    rdfs:label "governed by disclosure policy"@en ;
    rdfs:comment "Links platform to identity disclosure policies governing anonymous users."@en ;
    rdfs:domain cacontology-platforms:AnonymousChatPlatform ;
    rdfs:range cacontology-platforms:IdentityDisclosurePolicy .

cacontology-platforms:hasActionBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has action begin point"@en ;
    rdfs:comment "Temporal begin point for platform action."@en ;
    rdfs:domain cacontology-platforms:ContentModerationAction ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-platforms:hasActionEndPoint a owl:DatatypeProperty ;
    rdfs:label "has action end point"@en ;
    rdfs:comment "Temporal end point for platform action."@en ;
    rdfs:domain cacontology-platforms:ContentModerationAction ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-platforms:hasBacklogSituation a owl:ObjectProperty ;
    rdfs:label "has backlog situation"@en ;
    dcterms:source "Community & Intelligence Beyond Detection (Global Emancipation Network), 2026-02-10."@en ;
    rdfs:comment "Links a moderation queue to a backlog situation indicating capacity constraints."@en ;
    rdfs:domain cacontology-platforms:ContentModerationQueue ;
    rdfs:range cacontology-platforms:ReviewBacklogSituation ;
    rdfs:seeAlso <https://www.linkedin.com/pulse/community-intelligence-beyond-detection-global-emancipation-network-xvemc/> .

cacontology-platforms:hasContentModerationCapability a owl:ObjectProperty ;
    rdfs:label "has content moderation capability"@en ;
    rdfs:comment "Links a platform to its content moderation capabilities."@en ;
    rdfs:range cacontology-platforms:ContentModerationCapability .

cacontology-platforms:hasDataRetentionPolicy a owl:ObjectProperty ;
    rdfs:label "has data retention policy"@en ;
    rdfs:comment "Links a platform to its data retention policy."@en ;
    rdfs:range cacontology-platforms:DataRetentionPolicy .

cacontology-platforms:hasLegalComplianceCapability a owl:ObjectProperty ;
    rdfs:label "has legal compliance capability"@en ;
    rdfs:comment "Links a platform to its legal compliance capabilities."@en ;
    rdfs:range cacontology-platforms:LegalComplianceCapability .

cacontology-platforms:hasPhaseBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has phase begin point"@en ;
    rdfs:comment "Temporal begin point for platform phase."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-platforms:hasPhaseEndPoint a owl:DatatypeProperty ;
    rdfs:label "has phase end point"@en ;
    rdfs:comment "Temporal end point for platform phase."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-platforms:hasPlatformBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has platform begin point"@en ;
    rdfs:comment "Temporal begin point for platform operation."@en ;
    rdfs:domain cacontology-platforms:ElectronicServiceProvider ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-platforms:hasPlatformEndPoint a owl:DatatypeProperty ;
    rdfs:label "has platform end point"@en ;
    rdfs:comment "Temporal end point for platform operation."@en ;
    rdfs:domain cacontology-platforms:ElectronicServiceProvider ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-platforms:hasUserVerificationSystem a owl:ObjectProperty ;
    rdfs:label "has user verification system"@en ;
    rdfs:comment "Links a platform to its user verification system."@en ;
    rdfs:range cacontology-platforms:UserVerificationSystem .

cacontology-platforms:identityDisclosureCircumstances a owl:DatatypeProperty ;
    rdfs:label "identity disclosure circumstances"@en ;
    rdfs:comment "Circumstances under which anonymous user identity may be disclosed (never, legal_request, safety_violation, platform_choice)."@en ;
    rdfs:domain cacontology-platforms:IdentityDisclosurePolicy ;
    rdfs:range xsd:string .

cacontology-platforms:legalAuthority a owl:ObjectProperty ;
    rdfs:label "legal authority"@en ;
    rdfs:comment "The legal authority (court, agency) that requested the data disclosure."@en ;
    rdfs:domain cacontology-platforms:LegalDataDisclosureAction ;
    rdfs:range uco-identity:Organization .

cacontology-platforms:legalProcessContactInfo a owl:DatatypeProperty ;
    rdfs:label "legal process contact info"@en ;
    rdfs:comment "Contact information for submitting legal process requests."@en ;
    rdfs:domain cacontology-platforms:LegalComplianceCapability ;
    rdfs:range xsd:string .

cacontology-platforms:maintainsAnonymityLevel a owl:ObjectProperty ;
    rdfs:label "maintains anonymity level"@en ;
    rdfs:comment "Links platform to anonymity protection levels maintained."@en ;
    rdfs:domain cacontology-platforms:AnonymousChatPlatform ;
    rdfs:range cacontology-platforms:AnonymityProtectionLevel .

cacontology-platforms:offersContactOpportunity a owl:ObjectProperty ;
    rdfs:label "offers contact opportunity"@en ;
    rdfs:comment "Links platform to anonymous contact opportunities provided."@en ;
    rdfs:domain cacontology-platforms:AnonymousChatPlatform ;
    rdfs:range cacontology-platforms:AnonymousContactOpportunity .

cacontology-platforms:operatedBy a owl:ObjectProperty ;
    rdfs:label "operated by"@en ;
    rdfs:comment "Links a platform or service to the organization that operates it."@en ;
    rdfs:range cacontology-platforms:ElectronicServiceProvider .

cacontology-platforms:phaseDuration a owl:DatatypeProperty ;
    rdfs:label "phase duration"@en ;
    rdfs:comment "Duration of platform phase."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:duration .

cacontology-platforms:platformDuration a owl:DatatypeProperty ;
    rdfs:label "platform duration"@en ;
    rdfs:comment "Duration of platform operation from launch to shutdown."@en ;
    rdfs:domain cacontology-platforms:ElectronicServiceProvider ;
    rdfs:range xsd:duration .

cacontology-platforms:platformsInvestigated a owl:DatatypeProperty ;
    rdfs:label "platforms investigated"@en ;
    rdfs:comment "Number of platforms investigated in coordinated effort."@en ;
    rdfs:domain cacontology-platforms:PlatformInvestigationCoordination ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-platforms:providesAnonymousFeature a owl:ObjectProperty ;
    rdfs:label "provides anonymous feature"@en ;
    rdfs:comment "Links anonymous chat platform to specific anonymity features provided."@en ;
    rdfs:domain cacontology-platforms:AnonymousChatPlatform ;
    rdfs:range cacontology-platforms:GuestChatFeature .

cacontology-platforms:providesOpenChatAccess a owl:ObjectProperty ;
    rdfs:label "provides open chat access"@en ;
    rdfs:comment "Links contact opportunity to open chat room access."@en ;
    rdfs:domain cacontology-platforms:AnonymousContactOpportunity ;
    rdfs:range cacontology-platforms:OpenChatRooms .

cacontology-platforms:reportsThroughputMetrics a owl:ObjectProperty ;
    rdfs:label "reports throughput metrics"@en ;
    dcterms:source "Community & Intelligence Beyond Detection (Global Emancipation Network), 2026-02-10."@en ;
    rdfs:comment "Links a moderation queue to operational throughput/latency metrics."@en ;
    rdfs:domain cacontology-platforms:ContentModerationQueue ;
    rdfs:range cacontology-platforms:ModerationThroughputMetrics ;
    rdfs:seeAlso <https://www.linkedin.com/pulse/community-intelligence-beyond-detection-global-emancipation-network-xvemc/> .

cacontology-platforms:searchWarrantRequired a owl:DatatypeProperty ;
    rdfs:label "search warrant required"@en ;
    rdfs:comment "Whether search warrant was required to obtain this evidence."@en ;
    rdfs:domain cacontology-platforms:SocialMediaEvidence ;
    rdfs:range xsd:boolean .

cacontology-platforms:socialMediaPlatform a owl:DatatypeProperty ;
    rdfs:label "social media platform"@en ;
    rdfs:comment "Name of social media platform where evidence was found."@en ;
    rdfs:domain cacontology-platforms:SocialMediaEvidence ;
    rdfs:range xsd:string .

cacontology-platforms:subsidiaryOf a owl:ObjectProperty ;
    rdfs:label "subsidiary of"@en ;
    rdfs:comment "Links a platform or organization to its parent company."@en ;
    rdfs:range uco-identity:Organization .

cacontology-prevention:BehavioralPreventionShape a sh:NodeShape ;
    rdfs:label "Behavioral Prevention Shape"@en ;
    rdfs:comment "Validation shape for behavioral prevention instances."@en ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 36.0 ;
            sh:message "Behavioral prevention duration should be between 1 and 36 months."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1.0 ;
            sh:path cacontology-prevention:programDuration ] ;
    sh:targetClass cacontology-prevention:BehavioralPrevention .

cacontology-prevention:ChildAbusePreventionMonth a owl:Class ;
    rdfs:label "Child Abuse Prevention Month"@en ;
    rdfs:comment "National Child Abuse Prevention Month coordinated awareness activities."@en ;
    rdfs:subClassOf cacontology-prevention:PreventionCampaign .

cacontology-prevention:ChildSafetyEducationShape a sh:NodeShape ;
    rdfs:label "Child Safety Education Shape"@en ;
    rdfs:comment "Validation shape for child safety education instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Child safety education must have a name (5-200 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path uco-core:name ],
        [ sh:datatype xsd:string ;
            sh:in ( "preschool" "elementary" "middle_school" "high_school" "young_adult" "all_ages" ) ;
            sh:maxCount 1 ;
            sh:message "Age group must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-prevention:ageGroup ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Child safety education must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ] ;
    sh:targetClass cacontology-prevention:ChildSafetyEducation .

cacontology-prevention:CommunityEducationShape a sh:NodeShape ;
    rdfs:label "Community Education Shape"@en ;
    rdfs:comment "Validation shape for community education instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Community education must have a name (5-200 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path uco-core:name ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Community education must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ] ;
    sh:targetClass cacontology-prevention:CommunityEducation .

cacontology-prevention:CommunityEducator a owl:Class ;
    rdfs:label "Community Educator"@en ;
    rdfs:comment "Educator working in community prevention programs."@en ;
    rdfs:subClassOf uco-role:Role .

cacontology-prevention:CommunityEngagementShape a sh:NodeShape ;
    rdfs:label "Community Engagement Shape"@en ;
    rdfs:comment "Validation shape for community engagement instances."@en ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Community participation must be between 0.0 and 1.0."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-prevention:communityParticipation ] ;
    sh:targetClass cacontology-prevention:CommunityEngagement .

cacontology-prevention:CommunityNewsletterSystem a owl:Class ;
    rdfs:label "Community Newsletter System"@en ;
    rdfs:comment "Regular newsletter communication system for ongoing community engagement and safety updates."@en ;
    rdfs:subClassOf cacontology-prevention:CommunityEmailList .

cacontology-prevention:CommunityOutreachCoordinationValidationShape a sh:NodeShape ;
    rdfs:label "Community Outreach Coordination Validation Shape"@en ;
    rdfs:comment "Validates that community outreach has coordinators."@en ;
    sh:sparql [ sh:message "Community outreach should have assigned coordinators."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-prevention:CommunityOutreach .
                FILTER NOT EXISTS {
                    $this cacontology-prevention:coordinatedBy ?coordinator .
                    ?coordinator a cacontology-prevention:SafetyCoordinator .
                }
            }
        """ ] ;
    sh:targetClass cacontology-prevention:CommunityOutreach .

cacontology-prevention:CommunityOutreachShape a sh:NodeShape ;
    rdfs:label "Community Outreach Shape"@en ;
    rdfs:comment "Validation shape for community outreach instances."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Community outreach must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Community outreach must have a name (5-200 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path uco-core:name ] ;
    sh:targetClass cacontology-prevention:CommunityOutreach .

cacontology-prevention:DataQualityShape a sh:NodeShape ;
    rdfs:label "Data Quality Shape"@en ;
    rdfs:comment "Validates data quality for prevention entities."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Creation time should be specified when available."@en ;
            sh:minCount 0 ;
            sh:path uco-core:createdTime ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Modification time should be specified when available."@en ;
            sh:minCount 0 ;
            sh:path uco-core:modifiedTime ] ;
    sh:targetClass cacontology-prevention:EducationPortal,
        cacontology-prevention:EducationalResource,
        cacontology-prevention:PreventionMetrics,
        cacontology-prevention:PreventionProgram,
        cacontology-prevention:SafetyProtocol .

cacontology-prevention:DigitalLiteracy a owl:Class ;
    rdfs:label "Digital Literacy"@en ;
    rdfs:comment "Education on digital literacy and safe technology use."@en ;
    rdfs:subClassOf cacontology-prevention:ChildSafetyEducation .

cacontology-prevention:DigitalSafetyShape a sh:NodeShape ;
    rdfs:label "Digital Safety Shape"@en ;
    rdfs:comment "Validation shape for digital safety instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Digital safety program must have a name (5-200 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path uco-core:name ] ;
    sh:targetClass cacontology-prevention:DigitalSafety .

cacontology-prevention:EducationPortalResourceValidationShape a sh:NodeShape ;
    rdfs:label "Education Portal Resource Validation Shape"@en ;
    rdfs:comment "Validates that education portals provide educational resources."@en ;
    sh:sparql [ sh:message "Education portal should provide educational resources."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-prevention:EducationPortal .
                FILTER NOT EXISTS {
                    $this cacontology-prevention:providesResource ?resource .
                    ?resource a cacontology-prevention:EducationalResource .
                }
            }
        """ ] ;
    sh:targetClass cacontology-prevention:EducationPortal .

cacontology-prevention:EducationPortalShape a sh:NodeShape ;
    rdfs:label "Education Portal Shape"@en ;
    rdfs:comment "Validation shape for education portal instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Education portal must have a name (5-200 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path uco-core:name ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 10000000 ;
            sh:message "Education portal reach must be between 1 and 10000000 when specified."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1 ;
            sh:path cacontology-prevention:educationPortalReach ] ;
    sh:targetClass cacontology-prevention:EducationPortal .

cacontology-prevention:EducationalResourceShape a sh:NodeShape ;
    rdfs:label "Educational Resource Shape"@en ;
    rdfs:comment "Validation shape for educational resource instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Educational resource must have a name (5-200 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path uco-core:name ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 1000 ;
            sh:message "Educational resource description should be 10-1000 characters when specified."@en ;
            sh:minCount 0 ;
            sh:minLength 10 ;
            sh:path uco-core:description ],
        [ sh:datatype xsd:string ;
            sh:maxCount 20 ;
            sh:maxLength 50 ;
            sh:message "Language availability should be 2-50 characters (up to 20 languages)."@en ;
            sh:minCount 0 ;
            sh:minLength 2 ;
            sh:path cacontology-prevention:languageAvailability ],
        [ sh:datatype xsd:string ;
            sh:in ( "children" "parents" "educators" "healthcare_providers" "community_members" "professionals" "general_public" ) ;
            sh:maxCount 1 ;
            sh:message "Target audience must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-prevention:targetAudience ] ;
    sh:targetClass cacontology-prevention:EducationalResource .

cacontology-prevention:EducatorTrainingShape a sh:NodeShape ;
    rdfs:label "Educator Training Shape"@en ;
    rdfs:comment "Validation shape for educator training instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Educator training must have a name (5-200 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path uco-core:name ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Educator training must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ] ;
    sh:targetClass cacontology-prevention:EducatorTraining .

cacontology-prevention:EnvironmentalPreventionShape a sh:NodeShape ;
    rdfs:label "Environmental Prevention Shape"@en ;
    rdfs:comment "Validation shape for environmental prevention instances."@en ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 60.0 ;
            sh:message "Environmental prevention duration should be between 1 and 60 months."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1.0 ;
            sh:path cacontology-prevention:programDuration ] ;
    sh:targetClass cacontology-prevention:EnvironmentalPrevention .

cacontology-prevention:HealthcareProviderTrainingShape a sh:NodeShape ;
    rdfs:label "Healthcare Provider Training Shape"@en ;
    rdfs:comment "Validation shape for healthcare provider training instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Healthcare provider training must have a name (5-200 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path uco-core:name ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Healthcare provider training must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ] ;
    sh:targetClass cacontology-prevention:HealthcareProviderTraining .

cacontology-prevention:LanguageAvailabilityValidationShape a sh:NodeShape ;
    rdfs:label "Language Availability Validation Shape"@en ;
    rdfs:comment "Validates language availability for educational resources."@en ;
    sh:sparql [ sh:message "Educational resources for diverse communities should have multiple languages."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-prevention:targetAudience "community_members" .
                FILTER NOT EXISTS {
                    $this cacontology-prevention:languageAvailability ?lang1 .
                    $this cacontology-prevention:languageAvailability ?lang2 .
                    FILTER (?lang1 != ?lang2)
                }
            }
        """ ] ;
    sh:targetClass cacontology-prevention:EducationalResource .

cacontology-prevention:OnlineSafetyEducationShape a sh:NodeShape ;
    rdfs:label "Online Safety Education Shape"@en ;
    rdfs:comment "Validation shape for online safety education instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "preschool" "elementary" "middle_school" "high_school" "young_adult" "all_ages" ) ;
            sh:maxCount 1 ;
            sh:message "Online safety education must specify age group."@en ;
            sh:minCount 1 ;
            sh:path cacontology-prevention:ageGroup ] ;
    sh:targetClass cacontology-prevention:OnlineSafetyEducation .

cacontology-prevention:ParentCommunityEmailList a owl:Class ;
    rdfs:label "Parent Community Email List"@en ;
    rdfs:comment "Specialized email list for parent and community safety updates and archived publication access."@en ;
    rdfs:subClassOf cacontology-prevention:CommunityEmailList .

cacontology-prevention:ParentEducationShape a sh:NodeShape ;
    rdfs:label "Parent Education Shape"@en ;
    rdfs:comment "Validation shape for parent education instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Parent education must have a name (5-200 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path uco-core:name ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Parent education must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ] ;
    sh:targetClass cacontology-prevention:ParentEducation .

cacontology-prevention:ParentalControlShape a sh:NodeShape ;
    rdfs:label "Parental Control Shape"@en ;
    rdfs:comment "Validation shape for parental control instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Parental control must have a name (5-200 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path uco-core:name ] ;
    sh:targetClass cacontology-prevention:ParentalControl .

cacontology-prevention:PlatformSafetyShape a sh:NodeShape ;
    rdfs:label "Platform Safety Shape"@en ;
    rdfs:comment "Validation shape for platform safety instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Platform safety must have a name (5-200 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path uco-core:name ] ;
    sh:targetClass cacontology-prevention:PlatformSafety .

cacontology-prevention:PreventionAdvocate a owl:Class ;
    rdfs:label "Prevention Advocate"@en ;
    rdfs:comment "Advocate promoting prevention initiatives."@en ;
    rdfs:subClassOf uco-role:Role .

cacontology-prevention:PreventionCurriculumShape a sh:NodeShape ;
    rdfs:label "Prevention Curriculum Shape"@en ;
    rdfs:comment "Validation shape for prevention curriculum instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Prevention curriculum must have a name (5-200 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path uco-core:name ] ;
    sh:targetClass cacontology-prevention:PreventionCurriculum .

cacontology-prevention:PreventionEffectivenessShape a sh:NodeShape ;
    rdfs:label "Prevention Effectiveness Shape"@en ;
    rdfs:comment "Validation shape for prevention effectiveness instances."@en ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Prevention effectiveness must be between 0.0 and 1.0."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-prevention:preventionEffectiveness ] ;
    sh:targetClass cacontology-prevention:PreventionEffectiveness .

cacontology-prevention:PreventionEffectivenessValidationShape a sh:NodeShape ;
    rdfs:label "Prevention Effectiveness Validation Shape"@en ;
    rdfs:comment "Validates prevention program effectiveness metrics."@en ;
    sh:sparql [ sh:message "Large prevention programs should have effectiveness metrics."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-prevention:participantCount ?count .
                FILTER (?count > 1000)
                FILTER NOT EXISTS {
                    ?effectiveness a cacontology-prevention:PreventionEffectiveness ;
                                   cacontology-prevention:preventionEffectiveness ?score .
                }
            }
        """ ] ;
    sh:targetClass cacontology-prevention:PreventionProgram .

cacontology-prevention:PreventionMaterialShape a sh:NodeShape ;
    rdfs:label "Prevention Material Shape"@en ;
    rdfs:comment "Validation shape for prevention material instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "children" "parents" "educators" "healthcare_providers" "community_members" "professionals" "general_public" ) ;
            sh:maxCount 1 ;
            sh:message "Prevention material must specify target audience."@en ;
            sh:minCount 1 ;
            sh:path cacontology-prevention:targetAudience ] ;
    sh:targetClass cacontology-prevention:PreventionMaterial .

cacontology-prevention:PreventionMetricsShape a sh:NodeShape ;
    rdfs:label "Prevention Metrics Shape"@en ;
    rdfs:comment "Validation shape for prevention metrics instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Prevention metrics name should be 5-200 characters when specified."@en ;
            sh:minCount 0 ;
            sh:minLength 5 ;
            sh:path uco-core:name ] ;
    sh:targetClass cacontology-prevention:PreventionMetrics .

cacontology-prevention:PreventionProgramDeliveryValidationShape a sh:NodeShape ;
    rdfs:label "Prevention Program Delivery Validation Shape"@en ;
    rdfs:comment "Validates that prevention programs have delivery specialists."@en ;
    sh:sparql [ sh:message "Prevention program should have assigned specialists."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-prevention:PreventionProgram .
                FILTER NOT EXISTS {
                    $this cacontology-prevention:deliveredBy ?specialist .
                    ?specialist a cacontology-prevention:PreventionSpecialist .
                }
            }
        """ ] ;
    sh:targetClass cacontology-prevention:PreventionProgram .

cacontology-prevention:PreventionProgramShape a sh:NodeShape ;
    rdfs:label "Prevention Program Shape"@en ;
    rdfs:comment "Validation shape for prevention program instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Prevention program must have a name (5-200 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path uco-core:name ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Prevention program must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Prevention program may specify end time."@en ;
            sh:minCount 0 ;
            sh:path uco-core:endTime ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 120.0 ;
            sh:message "Program duration must be between 0.5 and 120 months."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.5 ;
            sh:path cacontology-prevention:programDuration ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 1000000 ;
            sh:message "Participant count must be between 1 and 1000000 when specified."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1 ;
            sh:path cacontology-prevention:participantCount ] ;
    sh:targetClass cacontology-prevention:PreventionProgram .

cacontology-prevention:PrimaryPreventionShape a sh:NodeShape ;
    rdfs:label "Primary Prevention Shape"@en ;
    rdfs:comment "Validation shape for primary prevention instances."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 1000000 ;
            sh:message "Primary prevention participant count must be between 1 and 1000000 when specified."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1 ;
            sh:path cacontology-prevention:participantCount ] ;
    sh:targetClass cacontology-prevention:PrimaryPrevention .

cacontology-prevention:ProgramDurationValidationShape a sh:NodeShape ;
    rdfs:label "Program Duration Validation Shape"@en ;
    rdfs:comment "Validates program duration consistency."@en ;
    sh:sparql [ sh:message "Long-term prevention programs should have appropriate participant counts."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-prevention:programDuration ?duration ;
                      cacontology-prevention:participantCount ?count .
                FILTER (?duration > 24.0 && ?count < 10)
            }
        """ ] ;
    sh:targetClass cacontology-prevention:PreventionProgram .

cacontology-prevention:PublicAwarenessShape a sh:NodeShape ;
    rdfs:label "Public Awareness Shape"@en ;
    rdfs:comment "Validation shape for public awareness instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Public awareness campaign must have a name (5-200 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path uco-core:name ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Public awareness campaign must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ] ;
    sh:targetClass cacontology-prevention:PublicAwareness .

cacontology-prevention:RiskAssessmentToolShape a sh:NodeShape ;
    rdfs:label "Risk Assessment Tool Shape"@en ;
    rdfs:comment "Validation shape for risk assessment tool instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Risk assessment tool must have a name (5-200 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path uco-core:name ] ;
    sh:targetClass cacontology-prevention:RiskAssessmentTool .

cacontology-prevention:RiskPreventionShape a sh:NodeShape ;
    rdfs:label "Risk Prevention Shape"@en ;
    rdfs:comment "Validation shape for risk prevention instances."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 100000 ;
            sh:message "Risk prevention participant count must be between 1 and 100000 when specified."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1 ;
            sh:path cacontology-prevention:participantCount ] ;
    sh:targetClass cacontology-prevention:RiskPrevention .

cacontology-prevention:RiskReductionShape a sh:NodeShape ;
    rdfs:label "Risk Reduction Shape"@en ;
    rdfs:comment "Validation shape for risk reduction instances."@en ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Risk reduction level must be between 0.0 and 1.0."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-prevention:riskReductionLevel ] ;
    sh:targetClass cacontology-prevention:RiskReduction .

cacontology-prevention:SafetyGuidelineShape a sh:NodeShape ;
    rdfs:label "Safety Guideline Shape"@en ;
    rdfs:comment "Validation shape for safety guideline instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "children" "parents" "educators" "healthcare_providers" "community_members" "professionals" "general_public" ) ;
            sh:maxCount 1 ;
            sh:message "Safety guideline must specify target audience."@en ;
            sh:minCount 1 ;
            sh:path cacontology-prevention:targetAudience ] ;
    sh:targetClass cacontology-prevention:SafetyGuideline .

cacontology-prevention:SafetyProtocolImplementationValidationShape a sh:NodeShape ;
    rdfs:label "Safety Protocol Implementation Validation Shape"@en ;
    rdfs:comment "Validates that safety protocols are implemented by organizations."@en ;
    sh:sparql [ sh:message "Safety protocol should be implemented by organizations."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-prevention:SafetyProtocol .
                FILTER NOT EXISTS {
                    ?org cacontology-prevention:implementsProtocol $this .
                    ?org a uco-identity:Organization .
                }
            }
        """ ] ;
    sh:targetClass cacontology-prevention:SafetyProtocol .

cacontology-prevention:SafetyProtocolShape a sh:NodeShape ;
    rdfs:label "Safety Protocol Shape"@en ;
    rdfs:comment "Validation shape for safety protocol instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Safety protocol must have a name (5-200 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path uco-core:name ],
        [ sh:datatype xsd:string ;
            sh:in ( "planned" "active" "completed" "suspended" "cancelled" ) ;
            sh:maxCount 1 ;
            sh:message "Implementation status must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-prevention:implementationStatus ] ;
    sh:targetClass cacontology-prevention:SafetyProtocol .

cacontology-prevention:SchoolAllegationProtocolShape a sh:NodeShape ;
    rdfs:label "School Allegation Protocol Shape"@en ;
    rdfs:comment "Validation shape for school allegation protocol instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "School allegation protocol must have a name (5-200 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path uco-core:name ] ;
    sh:targetClass cacontology-prevention:SchoolAllegationProtocol .

cacontology-prevention:SchoolCounselorTrainingShape a sh:NodeShape ;
    rdfs:label "School Counselor Training Shape"@en ;
    rdfs:comment "Validation shape for school counselor training instances."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "School counselor training must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ] ;
    sh:targetClass cacontology-prevention:SchoolCounselorTraining .

cacontology-prevention:SchoolDistribution a owl:Class ;
    rdfs:label "School Distribution"@en ;
    rdfs:comment "Distribution of educational materials to schools."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-prevention:SchoolPolicyShape a sh:NodeShape ;
    rdfs:label "School Policy Shape"@en ;
    rdfs:comment "Validation shape for school policy instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "School policy must have a name (5-200 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path uco-core:name ] ;
    sh:targetClass cacontology-prevention:SchoolPolicy .

cacontology-prevention:SchoolSafetyProgramShape a sh:NodeShape ;
    rdfs:label "School Safety Program Shape"@en ;
    rdfs:comment "Validation shape for school safety program instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "School safety program must have a name (5-200 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path uco-core:name ] ;
    sh:targetClass cacontology-prevention:SchoolSafetyProgram .

cacontology-prevention:SecondaryPreventionShape a sh:NodeShape ;
    rdfs:label "Secondary Prevention Shape"@en ;
    rdfs:comment "Validation shape for secondary prevention instances."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 100000 ;
            sh:message "Secondary prevention participant count must be between 1 and 100000 when specified."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1 ;
            sh:path cacontology-prevention:participantCount ] ;
    sh:targetClass cacontology-prevention:SecondaryPrevention .

cacontology-prevention:SextortionAwarenessShape a sh:NodeShape ;
    rdfs:label "Sextortion Awareness Shape"@en ;
    rdfs:comment "Validation shape for sextortion awareness instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Sextortion awareness program must have a name (5-200 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path uco-core:name ] ;
    sh:targetClass cacontology-prevention:SextortionAwareness .

cacontology-prevention:SextortionEducationShape a sh:NodeShape ;
    rdfs:label "Sextortion Education Shape"@en ;
    rdfs:comment "Validation shape for sextortion education instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "middle_school" "high_school" "young_adult" ) ;
            sh:maxCount 1 ;
            sh:message "Sextortion education must target appropriate age groups."@en ;
            sh:minCount 1 ;
            sh:path cacontology-prevention:ageGroup ] ;
    sh:targetClass cacontology-prevention:SextortionEducation .

cacontology-prevention:SextortionResponseShape a sh:NodeShape ;
    rdfs:label "Sextortion Response Shape"@en ;
    rdfs:comment "Validation shape for sextortion response instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "active" "planned" ) ;
            sh:maxCount 1 ;
            sh:message "Sextortion response must be active or planned."@en ;
            sh:minCount 1 ;
            sh:path cacontology-prevention:implementationStatus ] ;
    sh:targetClass cacontology-prevention:SextortionResponse .

cacontology-prevention:SextortionWarningSignShape a sh:NodeShape ;
    rdfs:label "Sextortion Warning Sign Shape"@en ;
    rdfs:comment "Validation shape for sextortion warning sign instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Sextortion warning sign must have a name (5-200 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path uco-core:name ] ;
    sh:targetClass cacontology-prevention:SextortionWarningSign .

cacontology-prevention:StudentEducationShape a sh:NodeShape ;
    rdfs:label "Student Education Shape"@en ;
    rdfs:comment "Validation shape for student education instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "elementary" "middle_school" "high_school" ) ;
            sh:maxCount 1 ;
            sh:message "Student education must specify appropriate age group."@en ;
            sh:minCount 1 ;
            sh:path cacontology-prevention:ageGroup ] ;
    sh:targetClass cacontology-prevention:StudentEducation .

cacontology-prevention:TargetAudienceValidationShape a sh:NodeShape ;
    rdfs:label "Target Audience Validation Shape"@en ;
    rdfs:comment "Validates target audience appropriateness for child safety education."@en ;
    sh:sparql [ sh:message "Child safety education should have appropriate age groups."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-prevention:OnlineSafetyEducation ;
                      cacontology-prevention:ageGroup "preschool" .
            }
        """ ] ;
    sh:targetClass cacontology-prevention:ChildSafetyEducation .

cacontology-prevention:TeacherTrainingShape a sh:NodeShape ;
    rdfs:label "Teacher Training Shape"@en ;
    rdfs:comment "Validation shape for teacher training instances."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Teacher training must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ] ;
    sh:targetClass cacontology-prevention:TeacherTraining .

cacontology-prevention:TemporalValidationShape a sh:NodeShape ;
    rdfs:label "Temporal Validation Shape"@en ;
    rdfs:comment "Validates temporal consistency for prevention activities."@en ;
    sh:sparql [ sh:message "Start time must be before end time when both are specified."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this uco-core:startTime ?start ;
                      uco-core:endTime ?end .
                FILTER (?start >= ?end)
            }
        """ ] ;
    sh:targetClass cacontology-prevention:ChildSafetyEducation,
        cacontology-prevention:CommunityEducation,
        cacontology-prevention:CommunityOutreach,
        cacontology-prevention:EducatorTraining,
        cacontology-prevention:HealthcareProviderTraining,
        cacontology-prevention:ParentEducation,
        cacontology-prevention:PreventionProgram,
        cacontology-prevention:PublicAwareness .

cacontology-prevention:TertiaryPreventionShape a sh:NodeShape ;
    rdfs:label "Tertiary Prevention Shape"@en ;
    rdfs:comment "Validation shape for tertiary prevention instances."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 10000 ;
            sh:message "Tertiary prevention participant count must be between 1 and 10000 when specified."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1 ;
            sh:path cacontology-prevention:participantCount ] ;
    sh:targetClass cacontology-prevention:TertiaryPrevention .

cacontology-prevention:TwelvePlusEducation a owl:Class ;
    rdfs:label "Twelve Plus Education"@en ;
    rdfs:comment "Safety education targeted specifically for students 12 years and older."@en ;
    rdfs:subClassOf cacontology-prevention:AgeTargetedEducation .

cacontology-prevention:accessesArchive a owl:ObjectProperty ;
    rdfs:label "accesses archive"@en ;
    rdfs:comment "Community member accesses archived publication system."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range cacontology-prevention:ArchivePublicationSystem .

cacontology-prevention:activeParticipantCount a owl:DatatypeProperty ;
    rdfs:label "active participant count"@en ;
    rdfs:comment "Number of currently active participants in interactive courses."@en ;
    rdfs:domain cacontology-prevention:InteractiveCourseSystem ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-prevention:addressesSextortion a owl:ObjectProperty ;
    rdfs:label "addresses sextortion"@en ;
    rdfs:comment "Education addresses specific sextortion warning signs."@en ;
    rdfs:domain cacontology-prevention:SextortionEducation ;
    rdfs:range cacontology-prevention:SextortionWarningSign .

cacontology-prevention:affiliateOrganizationCount a owl:DatatypeProperty ;
    rdfs:label "affiliate organization count"@en ;
    rdfs:comment "Number of organizations in the ICAC affiliate network."@en ;
    rdfs:domain cacontology-prevention:ICACAffiliateNetwork ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-prevention:affiliatedWith a owl:ObjectProperty ;
    rdfs:label "affiliated with"@en ;
    rdfs:comment "Organization is formally affiliated with ICAC network."@en ;
    rdfs:domain uco-identity:Organization ;
    rdfs:range cacontology-prevention:ICACAffiliateNetwork .

cacontology-prevention:arrestsFromDisclosures a owl:DatatypeProperty ;
    rdfs:label "arrests from disclosures"@en ;
    rdfs:comment "Number of arrests resulting from outreach-generated disclosures."@en ;
    rdfs:domain cacontology-prevention:CommunityOutreachEffectiveness ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-prevention:assessesRisk a owl:ObjectProperty ;
    rdfs:label "assesses risk"@en ;
    rdfs:comment "Risk factor assessed by the tool."@en ;
    rdfs:domain cacontology-prevention:RiskAssessmentTool ;
    rdfs:range uco-core:UcoObject .

cacontology-prevention:averageDisclosureTime a owl:DatatypeProperty ;
    rdfs:label "average disclosure time"@en ;
    rdfs:comment "Average time in hours from presentation to victim disclosure."@en ;
    rdfs:domain cacontology-prevention:PostPresentationDisclosure ;
    rdfs:range xsd:decimal .

cacontology-prevention:averageHelpSeekingTime a owl:DatatypeProperty ;
    rdfs:label "average help seeking time"@en ;
    rdfs:comment "Average time in minutes users spend accessing FAQ information."@en ;
    rdfs:domain cacontology-prevention:FAQUsageMetrics ;
    rdfs:range xsd:decimal .

cacontology-prevention:averageListeningDuration a owl:DatatypeProperty ;
    rdfs:label "average listening duration"@en ;
    rdfs:comment "Average listening duration in minutes per episode."@en ;
    rdfs:domain cacontology-prevention:PodcastEngagementMetrics ;
    rdfs:range xsd:decimal .

cacontology-prevention:communityReportingIncrease a owl:DatatypeProperty ;
    rdfs:label "community reporting increase"@en ;
    rdfs:comment "Percentage increase in community reporting following initiative."@en ;
    rdfs:domain cacontology-prevention:CommunityPartnershipInitiative ;
    rdfs:range xsd:decimal .

cacontology-prevention:coordinatedBy a owl:ObjectProperty ;
    rdfs:label "coordinated by"@en ;
    rdfs:comment "Coordinator responsible for outreach program."@en ;
    rdfs:domain cacontology-prevention:CommunityOutreach ;
    rdfs:range cacontology-prevention:SafetyCoordinator .

cacontology-prevention:coordinatedWith a owl:ObjectProperty ;
    rdfs:label "coordinated with"@en ;
    rdfs:comment "Links awareness initiative to coordinating agencies."@en ;
    rdfs:domain cacontology-prevention:NationwideAwarenessInitiative ;
    rdfs:range uco-identity:Organization .

cacontology-prevention:coordinatesWith a owl:ObjectProperty ;
    rdfs:label "coordinates with"@en ;
    rdfs:comment "Coordination activity involves specific affiliate organization."@en ;
    rdfs:domain cacontology-prevention:AffiliateCoordination ;
    rdfs:range uco-identity:Organization .

cacontology-prevention:coordinationMeetingFrequency a owl:DatatypeProperty ;
    rdfs:label "coordination meeting frequency"@en ;
    rdfs:comment "Frequency of affiliate coordination meetings and activities."@en ;
    rdfs:domain cacontology-prevention:AffiliateCoordination ;
    rdfs:range xsd:string .

cacontology-prevention:courseCompletionRate a owl:DatatypeProperty ;
    rdfs:label "course completion rate"@en ;
    rdfs:comment "Course completion rate percentage (0.0-1.0) for interactive safety courses."@en ;
    rdfs:domain cacontology-prevention:InteractiveCourseMetrics ;
    rdfs:range xsd:decimal .

cacontology-prevention:courseModuleCount a owl:DatatypeProperty ;
    rdfs:label "course module count"@en ;
    rdfs:comment "Number of interactive modules in the course system."@en ;
    rdfs:domain cacontology-prevention:InteractiveCourseSystem ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-prevention:deliveredBy a owl:ObjectProperty ;
    rdfs:label "delivered by"@en ;
    rdfs:comment "Specialist delivering the prevention program."@en ;
    rdfs:domain cacontology-prevention:PreventionProgram ;
    rdfs:range cacontology-prevention:PreventionSpecialist .

cacontology-prevention:disclosureBarriersAddressed a owl:DatatypeProperty ;
    rdfs:label "disclosure barriers addressed"@en ;
    rdfs:comment "Number of disclosure barriers identified and addressed."@en ;
    rdfs:domain cacontology-prevention:DisclosureBarrierReduction ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-prevention:disclosuresGenerated a owl:DatatypeProperty ;
    rdfs:label "disclosures generated"@en ;
    rdfs:comment "Number of victim disclosures generated by outreach program."@en ;
    rdfs:domain cacontology-prevention:CommunityOutreachEffectiveness ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-prevention:discreteAccessCount a owl:DatatypeProperty ;
    rdfs:label "discrete access count"@en ;
    rdfs:comment "Number of discrete accesses to safety information."@en ;
    rdfs:domain cacontology-prevention:DiscreetAccessSystem ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-prevention:distributedViaEmailList a owl:ObjectProperty ;
    rdfs:label "distributed via email list"@en ;
    rdfs:comment "Educational resource is distributed through community email list."@en ;
    rdfs:domain cacontology-prevention:EducationalResource ;
    rdfs:range cacontology-prevention:CommunityEmailList .

cacontology-prevention:distributedsTo a owl:ObjectProperty ;
    rdfs:label "distributed to"@en ;
    rdfs:comment "Organization (school) receiving poster distribution."@en ;
    rdfs:domain cacontology-prevention:InformationPoster ;
    rdfs:range uco-identity:Organization .

cacontology-prevention:educatesOn a owl:ObjectProperty ;
    rdfs:label "educates on"@en ;
    rdfs:comment "Topic or subject covered by educational resource."@en ;
    rdfs:domain cacontology-prevention:EducationalResource ;
    rdfs:range uco-core:UcoObject .

cacontology-prevention:emailListSubscriberCount a owl:DatatypeProperty ;
    rdfs:label "email list subscriber count"@en ;
    rdfs:comment "Number of active subscribers to community email list."@en ;
    rdfs:domain cacontology-prevention:CommunityEmailList ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-prevention:emailOpenRate a owl:DatatypeProperty ;
    rdfs:label "email open rate"@en ;
    rdfs:comment "Email open rate percentage (0.0-1.0) for community communications."@en ;
    rdfs:domain cacontology-prevention:EmailListEngagementMetrics ;
    rdfs:range xsd:decimal .

cacontology-prevention:enablesDiscreetAccess a owl:ObjectProperty ;
    rdfs:label "enables discreet access"@en ;
    rdfs:comment "QR code enables discreet access to safety information."@en ;
    rdfs:domain cacontology-prevention:QRCodeIntegration ;
    rdfs:range cacontology-prevention:DiscreetAccessSystem .

cacontology-prevention:enablesRapidResponse a owl:ObjectProperty ;
    rdfs:label "enables rapid response"@en ;
    rdfs:comment "Links disclosure to rapid response capability."@en ;
    rdfs:domain cacontology-prevention:PostPresentationDisclosure ;
    rdfs:range cacontology-prevention:RapidResponseDisclosureWorkflow .

cacontology-prevention:engagesCommunity a owl:ObjectProperty ;
    rdfs:label "engages community"@en ;
    rdfs:comment "Community organization engaged by outreach."@en ;
    rdfs:domain cacontology-prevention:CommunityOutreach ;
    rdfs:range uco-identity:Organization .

cacontology-prevention:engagesParents a owl:ObjectProperty ;
    rdfs:label "engages parents"@en ;
    rdfs:comment "Links vigilance program to parent participants."@en ;
    rdfs:domain cacontology-prevention:ParentalVigilanceProgram ;
    rdfs:range uco-identity:Person .

cacontology-prevention:enhancedBy a owl:ObjectProperty ;
    rdfs:label "enhanced by"@en ;
    rdfs:comment "Interactive course system is enhanced by multimedia educational content."@en ;
    rdfs:domain cacontology-prevention:InteractiveCourseSystem ;
    rdfs:range cacontology-prevention:MultimediaEducationContent .

cacontology-prevention:faqAccessCount a owl:DatatypeProperty ;
    rdfs:label "FAQ access count"@en ;
    rdfs:comment "Total number of accesses to the FAQ knowledge base."@en ;
    rdfs:domain cacontology-prevention:FAQUsageMetrics ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-prevention:faqItemCount a owl:DatatypeProperty ;
    rdfs:label "FAQ item count"@en ;
    rdfs:comment "Number of frequently asked questions in the knowledge base."@en ;
    rdfs:domain cacontology-prevention:FAQKnowledgeBase ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-prevention:hostsContentOn a owl:ObjectProperty ;
    rdfs:label "hosts content on"@en ;
    rdfs:comment "Podcast series hosts educational content on platform integration system."@en ;
    rdfs:domain cacontology-prevention:PodcastEducationSeries ;
    rdfs:range cacontology-prevention:EducationPlatformIntegration .

cacontology-prevention:identifiesTrustedAdult a owl:ObjectProperty ;
    rdfs:label "identifies trusted adult"@en ;
    rdfs:comment "Links program to trusted adult identification."@en ;
    rdfs:domain cacontology-prevention:TrustedAdultIdentification ;
    rdfs:range uco-identity:Person .

cacontology-prevention:implementsProtocol a owl:ObjectProperty ;
    rdfs:label "implements protocol"@en ;
    rdfs:comment "Safety protocol implemented by organization."@en ;
    rdfs:domain uco-identity:Organization ;
    rdfs:range cacontology-prevention:SafetyProtocol .

cacontology-prevention:integratesQRCode a owl:ObjectProperty ;
    rdfs:label "integrates QR code"@en ;
    rdfs:comment "Poster integrates QR code for information access."@en ;
    rdfs:domain cacontology-prevention:InformationPoster ;
    rdfs:range cacontology-prevention:QRCodeIntegration .

cacontology-prevention:integratesToPlatform a owl:ObjectProperty ;
    rdfs:label "integrates to platform"@en ;
    rdfs:comment "Multimedia content integrates with education platform systems."@en ;
    rdfs:domain cacontology-prevention:MultimediaEducationContent ;
    rdfs:range cacontology-prevention:EducationPlatformIntegration .

cacontology-prevention:maintainsEmailList a owl:ObjectProperty ;
    rdfs:label "maintains email list"@en ;
    rdfs:comment "Organization maintains community email list for ongoing communication."@en ;
    rdfs:domain uco-identity:Organization ;
    rdfs:range cacontology-prevention:CommunityEmailList .

cacontology-prevention:measuresEngagementOf a owl:ObjectProperty ;
    rdfs:label "measures engagement of"@en ;
    rdfs:comment "Engagement metrics measure effectiveness of community communication system."@en ;
    rdfs:domain cacontology-prevention:CommunityEngagementMetrics ;
    rdfs:range cacontology-prevention:CommunityEmailList .

cacontology-prevention:monitorsUsageOf a owl:ObjectProperty ;
    rdfs:label "monitors usage of"@en ;
    rdfs:comment "Usage metrics monitor access patterns of FAQ knowledge base."@en ;
    rdfs:domain cacontology-prevention:FAQUsageMetrics ;
    rdfs:range cacontology-prevention:FAQKnowledgeBase .

cacontology-prevention:parentalEngagementRate a owl:DatatypeProperty ;
    rdfs:label "parental engagement rate"@en ;
    rdfs:comment "Rate of parental engagement in vigilance program (0.0-1.0)."@en ;
    rdfs:domain cacontology-prevention:ParentalVigilanceProgram ;
    rdfs:range xsd:decimal .

cacontology-prevention:podcastDownloadCount a owl:DatatypeProperty ;
    rdfs:label "podcast download count"@en ;
    rdfs:comment "Total number of podcast episode downloads."@en ;
    rdfs:domain cacontology-prevention:PodcastEngagementMetrics ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-prevention:podcastEpisodeCount a owl:DatatypeProperty ;
    rdfs:label "podcast episode count"@en ;
    rdfs:comment "Number of episodes in the podcast education series."@en ;
    rdfs:domain cacontology-prevention:PodcastEducationSeries ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-prevention:postersDistributed a owl:DatatypeProperty ;
    rdfs:label "posters distributed"@en ;
    rdfs:comment "Number of posters distributed in campaign."@en ;
    rdfs:domain cacontology-prevention:PosterDistributionMetrics ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-prevention:presentationAttendance a owl:DatatypeProperty ;
    rdfs:label "presentation attendance"@en ;
    rdfs:comment "Number of students attending safety presentation."@en ;
    rdfs:domain cacontology-prevention:SchoolPresentationProgram ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-prevention:preventsBullying a owl:DatatypeProperty ;
    rdfs:label "prevents bullying"@en ;
    rdfs:comment "Whether system helps prevent bullying and shaming."@en ;
    rdfs:domain cacontology-prevention:DiscreetAccessSystem ;
    rdfs:range xsd:boolean .

cacontology-prevention:preventsMechanism a owl:ObjectProperty ;
    rdfs:label "prevents mechanism"@en ;
    rdfs:comment "Mechanism or behavior prevented by program."@en ;
    rdfs:domain cacontology-prevention:PreventionProgram ;
    rdfs:range uco-core:UcoObject .

cacontology-prevention:providesResource a owl:ObjectProperty ;
    rdfs:label "provides resource"@en ;
    rdfs:comment "Educational resource provided by portal."@en ;
    rdfs:domain cacontology-prevention:EducationPortal ;
    rdfs:range cacontology-prevention:EducationalResource .

cacontology-prevention:publicationArchiveSize a owl:DatatypeProperty ;
    rdfs:label "publication archive size"@en ;
    rdfs:comment "Number of archived publications available in the system."@en ;
    rdfs:domain cacontology-prevention:ArchivePublicationSystem ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-prevention:publishesToArchive a owl:ObjectProperty ;
    rdfs:label "publishes to archive"@en ;
    rdfs:comment "Educational resource is published to archive publication system."@en ;
    rdfs:domain cacontology-prevention:EducationalResource ;
    rdfs:range cacontology-prevention:ArchivePublicationSystem .

cacontology-prevention:qrCodeEnabled a owl:DatatypeProperty ;
    rdfs:label "QR code enabled"@en ;
    rdfs:comment "Whether campaign uses QR codes for information access."@en ;
    rdfs:domain cacontology-prevention:EducationalPosterCampaign ;
    rdfs:range xsd:boolean .

cacontology-prevention:qrCodeScans a owl:DatatypeProperty ;
    rdfs:label "QR code scans"@en ;
    rdfs:comment "Number of QR code scans recorded."@en ;
    rdfs:domain cacontology-prevention:QRCodeEngagementMetrics ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-prevention:queriesFAQ a owl:ObjectProperty ;
    rdfs:label "queries FAQ"@en ;
    rdfs:comment "Community member queries FAQ knowledge base for information."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range cacontology-prevention:FAQKnowledgeBase .

cacontology-prevention:rapidResponseCapability a owl:DatatypeProperty ;
    rdfs:label "rapid response capability"@en ;
    rdfs:comment "Whether rapid response (sub-24 hour) capability is available."@en ;
    rdfs:domain cacontology-prevention:RapidResponseDisclosureWorkflow ;
    rdfs:range xsd:boolean .

cacontology-prevention:reducesBarrier a owl:ObjectProperty ;
    rdfs:label "reduces barrier"@en ;
    rdfs:comment "Links strategy to disclosure barrier it addresses."@en ;
    rdfs:domain cacontology-prevention:DisclosureBarrierReduction ;
    rdfs:range uco-core:UcoObject .

cacontology-prevention:reducesShaming a owl:ObjectProperty ;
    rdfs:label "reduces shaming"@en ;
    rdfs:comment "System reduces shaming associated with seeking help."@en ;
    rdfs:domain cacontology-prevention:DiscreetAccessSystem ;
    rdfs:range cacontology-prevention:BullyingPrevention .

cacontology-prevention:resourceSharingFrequency a owl:DatatypeProperty ;
    rdfs:label "resource sharing frequency"@en ;
    rdfs:comment "Frequency of resource sharing activities (daily, weekly, monthly, quarterly)."@en ;
    rdfs:domain cacontology-prevention:AffiliateResourceSharing ;
    rdfs:range xsd:string .

cacontology-prevention:resultsInArrest a owl:ObjectProperty ;
    rdfs:label "results in arrest"@en ;
    rdfs:comment "Links outreach-triggered investigation to arrest."@en ;
    rdfs:domain cacontology-prevention:OutreachTriggeredInvestigation ;
    rdfs:range uco-action:Action .

cacontology-prevention:schoolsTargeted a owl:DatatypeProperty ;
    rdfs:label "schools targeted"@en ;
    rdfs:comment "Number of schools targeted by poster campaign."@en ;
    rdfs:domain cacontology-prevention:EducationalPosterCampaign ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-prevention:sextortionWarningSignsCount a owl:DatatypeProperty ;
    rdfs:label "sextortion warning signs count"@en ;
    rdfs:comment "Number of warning signs covered in education."@en ;
    rdfs:domain cacontology-prevention:SextortionEducation ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-prevention:sharesResourcesWith a owl:ObjectProperty ;
    rdfs:label "shares resources with"@en ;
    rdfs:comment "Resource sharing activity involves specific affiliate organization."@en ;
    rdfs:domain cacontology-prevention:AffiliateResourceSharing ;
    rdfs:range uco-identity:Organization .

cacontology-prevention:statewideCoverage a owl:DatatypeProperty ;
    rdfs:label "statewide coverage"@en ;
    rdfs:comment "Percentage of state covered by campaign (0.0-1.0)."@en ;
    rdfs:domain cacontology-prevention:StatewideCampaignMetrics ;
    rdfs:range xsd:decimal .

cacontology-prevention:supportedBy a owl:ObjectProperty ;
    rdfs:label "supported by"@en ;
    rdfs:comment "Links disclosure to support system that enabled it."@en,
        "Organization supporting the prevention program."@en ;
    rdfs:domain cacontology-prevention:PostPresentationDisclosure,
        cacontology-prevention:PreventionProgram ;
    rdfs:range cacontology-prevention:SafeDisclosureEnvironment,
        uco-identity:Organization .

cacontology-prevention:targetAgeGroup a owl:DatatypeProperty ;
    rdfs:label "target age group"@en ;
    rdfs:comment "Age group targeted by poster campaign (e.g., '12+')."@en ;
    rdfs:domain cacontology-prevention:EducationalPosterCampaign ;
    rdfs:range xsd:string .

cacontology-prevention:targetsAudience a owl:ObjectProperty ;
    rdfs:label "targets audience"@en ;
    rdfs:comment "Target audience for prevention program."@en ;
    rdfs:domain cacontology-prevention:PreventionProgram ;
    rdfs:range uco-identity:Person .

cacontology-prevention:tracksPodcastMetrics a owl:ObjectProperty ;
    rdfs:label "tracks podcast metrics"@en ;
    rdfs:comment "Metrics system tracks engagement data for podcast education series."@en ;
    rdfs:domain cacontology-prevention:PodcastEngagementMetrics ;
    rdfs:range cacontology-prevention:PodcastEducationSeries .

cacontology-prevention:tracksProgressOf a owl:ObjectProperty ;
    rdfs:label "tracks progress of"@en ;
    rdfs:comment "Tracking system monitors progress of interactive course participants."@en ;
    rdfs:domain cacontology-prevention:CourseCompletionTracking ;
    rdfs:range cacontology-prevention:InteractiveCourseSystem .

cacontology-prevention:triggersDisclosure a owl:ObjectProperty ;
    rdfs:label "triggers disclosure"@en ;
    rdfs:comment "Links outreach activity to victim disclosure it triggered."@en ;
    rdfs:domain cacontology-prevention:VictimDisclosureTriggering ;
    rdfs:range cacontology-prevention:PostPresentationDisclosure .

cacontology-prevention:trustedAdultsIdentified a owl:DatatypeProperty ;
    rdfs:label "trusted adults identified"@en ;
    rdfs:comment "Number of trusted adults identified by children in program."@en ;
    rdfs:domain cacontology-prevention:TrustedAdultIdentification ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-production:ActiveProductionPhaseShape a sh:NodeShape ;
    rdfs:label "Active Production Phase Shape"@en ;
    rdfs:comment "Validation for active production phase instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "recording" "editing" "streaming" "distribution_preparation" ) ;
            sh:maxCount 1 ;
            sh:message "Active production phase must specify current production activity."@en ;
            sh:minCount 1 ;
            sh:path cacontology-production:productionActivity ] ;
    sh:targetClass cacontology-production:ActiveProductionPhase .

cacontology-production:BathroomSurveillance a owl:Class ;
    rdfs:label "Bathroom Surveillance"@en ;
    rdfs:comment "Specific surveillance of bathroom facilities, as observed in Vermont case."@en ;
    rdfs:subClassOf cacontology-production:PrivateSpaceSurveillance .

cacontology-production:BedroomSurveillance a owl:Class ;
    rdfs:label "Bedroom Surveillance"@en ;
    rdfs:comment "Specific surveillance of sleeping areas and bedrooms."@en ;
    rdfs:subClassOf cacontology-production:PrivateSpaceSurveillance .

cacontology-production:ConcealmentContainer a owl:Class ;
    rdfs:label "Concealment Container"@en ;
    rdfs:comment "Object used to hide recording equipment such as backpacks, furniture, or everyday items with modifications."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:ObservableObject .

cacontology-production:ControlledEnvironment a owl:Class ;
    rdfs:label "Controlled Environment"@en ;
    rdfs:comment "Location specifically prepared or modified for production activities."@en ;
    rdfs:subClassOf cacontology-production:ProductionLocation .

cacontology-production:DataQualityShape a sh:NodeShape ;
    rdfs:label "Data Quality Shape"@en ;
    rdfs:comment "Validates data quality for production offenses."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Label should be between 5 and 200 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 5 ;
            sh:path rdfs:label ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 1000 ;
            sh:message "Comment should be between 10 and 1000 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 10 ;
            sh:path rdfs:comment ] ;
    sh:targetClass cacontology-production:ProductionOffense .

cacontology-production:DigitalManipulation a owl:Class ;
    rdfs:label "Digital Manipulation"@en ;
    rdfs:comment "Digital alteration or enhancement of images or videos to create child sexual abuse material."@en ;
    rdfs:subClassOf cacontology-production:ContentCreation .

cacontology-production:EquipmentUsageValidationShape a sh:NodeShape ;
    rdfs:label "Equipment Usage Validation Shape"@en ;
    rdfs:comment "Validates that production offenses have appropriate equipment."@en ;
    sh:sparql [ sh:message "Production offense should specify equipment used for recording or streaming."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-production:ProductionOffense ;
                      cacontology-production:productionMethod ?method .
                FILTER (?method IN ("direct_recording", "video_recording", "live_streaming"))
                FILTER NOT EXISTS {
                    $this cacontology-production:usesEquipment ?equipment .
                    ?equipment a cacontology-production:RecordingDevice .
                }
            }
        """ ] ;
    sh:targetClass cacontology-production:ProductionOffense .

cacontology-production:ExtendedOperationValidationShape a sh:NodeShape ;
    rdfs:label "Extended Operation Validation Shape"@en ;
    rdfs:comment "Validates extended production operation consistency."@en ;
    sh:sparql [ sh:message "Extended operation duration should be consistent with total sessions."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-production:operationDuration ?duration ;
                      cacontology-production:totalSessions ?sessions .
                FILTER (?sessions > (?duration * 10))
            }
        """ ] ;
    sh:targetClass cacontology-production:ExtendedProductionOperation .

cacontology-production:ExtendedProductionOperationShape a sh:NodeShape ;
    rdfs:label "Extended Production Operation Shape"@en ;
    rdfs:comment "Validation shape for extended production operation instances."@en ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 3650.0 ;
            sh:message "Extended operation duration must be between 7 days and 10 years."@en ;
            sh:minCount 1 ;
            sh:minInclusive 7.0 ;
            sh:path cacontology-production:operationDuration ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 5000 ;
            sh:message "Extended operation must have between 5 and 5000 total sessions."@en ;
            sh:minCount 1 ;
            sh:minInclusive 5 ;
            sh:path cacontology-production:totalSessions ] ;
    sh:targetClass cacontology-production:ExtendedProductionOperation .

cacontology-production:FacilitatesProductionShape a sh:PropertyShape ;
    sh:class cacontology-production:ProductionOffense ;
    sh:description "Links facilitator to production they assist" ;
    sh:minCount 0 ;
    sh:name "facilitates production" ;
    sh:path cacontology-production:facilitatesProduction .

cacontology-production:FacilitatorShape a sh:NodeShape ;
    rdfs:label "Facilitator Shape"@en ;
    rdfs:comment "Validation shape for facilitator role instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "equipment_provider" "location_provider" "victim_recruiter" "technical_support" "distribution_coordinator" "financial_facilitator" ) ;
            sh:maxCount 1 ;
            sh:message "Facilitator must specify facilitation type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-production:facilitationType ] ;
    sh:targetClass cacontology-production:Facilitator .

cacontology-production:HiddenRecordingDevice a owl:Class ;
    rdfs:label "Hidden Recording Device"@en ;
    rdfs:comment "Covert recording equipment designed to capture content without victim awareness."@en ;
    rdfs:subClassOf cacontology-production:RecordingDevice .

cacontology-production:ImagePostProcessingShape a sh:NodeShape ;
    rdfs:label "Image Post-Processing Shape"@en ;
    rdfs:comment "Validation shape for image post-processing instances."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 1000 ;
            sh:message "Image post-processing must specify modification count between 1 and 1000."@en ;
            sh:minCount 1 ;
            sh:minInclusive 1 ;
            sh:path cacontology-production:modificationCount ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 100 ;
            sh:message "Modification software must be specified (2-100 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 2 ;
            sh:path cacontology-production:modificationSoftware ] ;
    sh:targetClass cacontology-production:ImagePostProcessing .

cacontology-production:LiveProductionEventShape a sh:NodeShape ;
    rdfs:label "Live Production Event Shape"@en ;
    rdfs:comment "Validation shape for live production event instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 100 ;
            sh:message "Live production event must specify streaming platform (2-100 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 2 ;
            sh:path cacontology-production:streamingPlatform ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 10000 ;
            sh:message "Viewer count must be between 1 and 10000 when specified."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1 ;
            sh:path cacontology-production:viewerCount ] ;
    sh:targetClass cacontology-production:LiveProductionEvent .

cacontology-production:LiveStreamContent a owl:Class ;
    rdfs:label "Live Stream Content"@en ;
    rdfs:comment "Content transmitted in real-time during live production events."@en ;
    rdfs:subClassOf cacontology-production:ProducedContent .

cacontology-production:MobileRecordingDevice a owl:Class ;
    rdfs:label "Mobile Recording Device"@en ;
    rdfs:comment "Mobile phone, tablet, or portable device used for recording."@en ;
    rdfs:subClassOf cacontology-production:RecordingDevice .

cacontology-production:ModifiesImagesShape a sh:PropertyShape ;
    sh:class uco-core:UcoObject ;
    sh:description "Links post-processing to image modification" ;
    sh:minCount 0 ;
    sh:name "modifies images" ;
    sh:path cacontology-production:modifiesImages .

cacontology-production:OverlaysTextShape a sh:PropertyShape ;
    sh:class cacontology-production:ImagePostProcessing ;
    sh:description "Links text overlay to image modification" ;
    sh:minCount 0 ;
    sh:name "overlays text" ;
    sh:path cacontology-production:overlaysText .

cacontology-production:PrimaryProducerShape a sh:NodeShape ;
    rdfs:label "Primary Producer Shape"@en ;
    rdfs:comment "Validation shape for primary producer instances."@en ;
    sh:property [ sh:datatype xsd:boolean ;
            sh:hasValue true ;
            sh:maxCount 1 ;
            sh:message "Primary producer must have leadership role set to true."@en ;
            sh:minCount 1 ;
            sh:path cacontology-production:leadershipRole ] ;
    sh:targetClass cacontology-production:PrimaryProducer .

cacontology-production:ProducedAtShape a sh:PropertyShape ;
    sh:class uco-location:Location ;
    sh:description "Links production to location where it occurred" ;
    sh:minCount 0 ;
    sh:name "produced at" ;
    sh:path cacontology-production:producedAt .

cacontology-production:ProducedImage a owl:Class ;
    rdfs:label "Produced Image"@en ;
    rdfs:comment "Still images created through production activities."@en ;
    rdfs:subClassOf cacontology-production:ProducedContent .

cacontology-production:ProducedVideo a owl:Class ;
    rdfs:label "Produced Video"@en ;
    rdfs:comment "Video content created through production activities."@en ;
    rdfs:subClassOf cacontology-production:ProducedContent .

cacontology-production:ProducerRoleConflictShape a sh:NodeShape ;
    rdfs:label "Producer Role Conflict Shape"@en ;
    rdfs:comment "Prevents conflicting roles from being assigned simultaneously."@en ;
    sh:sparql [ sh:message "Individual cannot simultaneously be Producer and VictimRole."@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/production#"^^xsd:anyURI ;
                            sh:prefix "cacontology-production" ],
                        [ sh:namespace "https://cacontology.projectvic.org/gufo#"^^xsd:anyURI ;
                            sh:prefix "cacontology-gufo" ] ] ;
            sh:select """
            PREFIX cacontology-production: <https://cacontology.projectvic.org/production#>
            PREFIX cacontology-gufo: <https://cacontology.projectvic.org/gufo#>
            PREFIX gufo: <http://purl.org/nemo/gufo#>
            SELECT ?this WHERE {
                ?entity gufo:playsRole ?this .
                ?entity gufo:playsRole ?victimRole .
                ?this a cacontology-production:Producer .
                ?victimRole a cacontology-gufo:VictimRole .
                ?this cacontology-production:hasRoleBeginPoint ?producerBegin .
                ?victimRole cacontology-production:hasRoleBeginPoint ?victimBegin .
                FILTER(?producerBegin <= ?victimBegin)
                OPTIONAL { ?this cacontology-production:hasRoleEndPoint ?producerEnd }
                OPTIONAL { ?victimRole cacontology-production:hasRoleEndPoint ?victimEnd }
                FILTER(
                    (!BOUND(?producerEnd) && !BOUND(?victimEnd)) ||
                    (!BOUND(?producerEnd) && ?victimBegin <= ?victimEnd) ||
                    (!BOUND(?victimEnd) && ?producerBegin <= ?producerEnd) ||
                    (BOUND(?producerEnd) && BOUND(?victimEnd) && 
                     !((?producerEnd < ?victimBegin) || (?victimEnd < ?producerBegin)))
                )
            }
        """ ] ;
    sh:targetClass cacontology-production:Producer .

cacontology-production:ProducerShape a sh:NodeShape ;
    rdfs:label "Producer Shape"@en ;
    rdfs:comment "Validation shape for producer role instances."@en ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 50.0 ;
            sh:message "Production experience must be between 0 and 50 years."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-production:productionExperience ],
        [ sh:datatype xsd:string ;
            sh:in ( "novice" "intermediate" "advanced" "expert" "professional" ) ;
            sh:maxCount 1 ;
            sh:message "Technical skill level must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-production:technicalSkillLevel ] ;
    sh:targetClass cacontology-production:Producer .

cacontology-production:ProducesContentShape a sh:PropertyShape ;
    sh:class uco-core:UcoObject ;
    sh:description "Links producer to content they create" ;
    sh:minCount 0 ;
    sh:name "produces content" ;
    sh:path cacontology-production:producesContent .

cacontology-production:ProductionCrossReferenceShape a sh:NodeShape ;
    rdfs:label "Production Cross Reference Shape"@en ;
    rdfs:comment "Validates cross-references between production and related entities."@en ;
    sh:sparql [ sh:message "Production offense should have at least one producer or facilitator."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-production:ProductionOffense .
                FILTER NOT EXISTS {
                    { ?producer cacontology-production:producesContent $this } UNION
                    { ?facilitator cacontology-production:facilitatesProduction $this }
                }
            }
        """ ] ;
    sh:targetClass cacontology-production:ProductionOffense .

cacontology-production:ProductionDistributionPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Production Distribution Phase"@en ;
    rdfs:comment "Phase during which produced content is distributed or shared."@en ;
    rdfs:subClassOf cacontology-production:ProductionOffense .

cacontology-production:ProductionEquipmentShape a sh:NodeShape ;
    rdfs:label "Production Equipment Shape"@en ;
    rdfs:comment "Validation shape for production equipment instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "camera" "smartphone" "tablet" "laptop" "desktop" "recording_device" "lighting_equipment" "audio_equipment" "editing_software" "streaming_equipment" ) ;
            sh:maxCount 1 ;
            sh:message "Equipment must specify type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-production:equipmentType ],
        [ sh:datatype xsd:string ;
            sh:in ( "new" "good" "fair" "poor" "damaged" "modified" ) ;
            sh:maxCount 1 ;
            sh:message "Equipment condition must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-production:equipmentCondition ] ;
    sh:targetClass cacontology-production:ProductionEquipment .

cacontology-production:ProductionEventShape a sh:NodeShape ;
    rdfs:label "Production Event Shape"@en ;
    rdfs:comment "gUFO validation for production events ensuring proper temporal modeling."@en ;
    sh:property [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Production event must have exactly one begin point."@en ;
            sh:minCount 1 ;
            sh:path gufo:hasBeginPointInXSDDateTimeStamp ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Production event may have an end point."@en ;
            sh:minCount 0 ;
            sh:path gufo:hasEndPointInXSDDateTimeStamp ] ;
    sh:sparql [ sh:message "Event begin point must be before end point."@en ;
            sh:prefixes [ sh:declare [ sh:namespace "http://purl.org/nemo/gufo#"^^xsd:anyURI ;
                            sh:prefix "gufo" ] ] ;
            sh:select """
            SELECT ?this WHERE {
                ?this gufo:hasBeginPointInXSDDateTimeStamp ?begin .
                ?this gufo:hasEndPointInXSDDateTimeStamp ?end .
                FILTER(?begin >= ?end)
            }
        """ ] ;
    sh:targetClass gufo:Event .

cacontology-production:ProductionLocationShape a sh:NodeShape ;
    rdfs:label "Production Location Shape"@en ;
    rdfs:comment "Validation shape for production location instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "open" "restricted" "controlled" "secured" "locked" ) ;
            sh:maxCount 1 ;
            sh:message "Access control must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-production:accessControl ],
        [ sh:datatype xsd:string ;
            sh:in ( "residential" "commercial" "institutional" "outdoor" "vehicle" "temporary" "mobile" ) ;
            sh:maxCount 1 ;
            sh:message "Production location must specify type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-production:locationType ],
        [ sh:datatype xsd:string ;
            sh:in ( "public" "semi_private" "private" "highly_private" "isolated" ) ;
            sh:maxCount 1 ;
            sh:message "Production location must specify privacy level from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-production:privacyLevel ] ;
    sh:targetClass cacontology-production:ProductionLocation .

cacontology-production:ProductionOffenseShape a sh:NodeShape ;
    rdfs:label "Production Offense Shape"@en ;
    rdfs:comment "Validation shape for CSAM production offense instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "direct_recording" "photography" "video_recording" "live_streaming" "photography_with_modification" "multi_session_recording" "edited_compilation" ) ;
            sh:maxCount 1 ;
            sh:message "Production offense must specify exactly one production method from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-production:productionMethod ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 1000 ;
            sh:message "Session count must be between 1 and 1000 when specified."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1 ;
            sh:path cacontology-production:sessionCount ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 50 ;
            sh:message "Production offense must specify victim count between 1 and 50."@en ;
            sh:minCount 1 ;
            sh:minInclusive 1 ;
            sh:path cacontology-production:victimCount ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 10080.0 ;
            sh:message "Duration must be between 1 minute and 1 week (10080 minutes)."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1.0 ;
            sh:path cacontology-production:durationMinutes ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Production offense may have a start time."@en ;
            sh:minCount 0 ;
            sh:path uco-core:startTime ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Production offense may have an end time."@en ;
            sh:minCount 0 ;
            sh:path uco-core:endTime ] ;
    sh:targetClass cacontology-production:ProductionOffense .

cacontology-production:ProductionPhaseShape a sh:NodeShape ;
    rdfs:label "Production Phase Shape"@en ;
    rdfs:comment "gUFO-enhanced validation shape for production phases with anti-rigidity constraints."@en ;
    sh:property [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Production phase may have at most one begin point."@en ;
            sh:minCount 0 ;
            sh:path cacontology-production:hasProductionPhaseBeginPoint ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Production phase may have an end point."@en ;
            sh:minCount 0 ;
            sh:path cacontology-production:hasProductionPhaseEndPoint ] ;
    sh:sparql [ sh:message "Phase begin point must be before end point."@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/production#"^^xsd:anyURI ;
                            sh:prefix "cacontology-production" ] ] ;
            sh:select """
            PREFIX cacontology-production: <https://cacontology.projectvic.org/production#>
            SELECT ?this WHERE {
                ?this cacontology-production:hasProductionPhaseBeginPoint ?begin .
                ?this cacontology-production:hasProductionPhaseEndPoint ?end .
                FILTER(?begin >= ?end)
            }
        """ ],
        [ sh:message "Phase instances must be anti-rigid (cannot exist without being instantiated by entities)."@en ;
            sh:prefixes [ sh:declare [ sh:namespace "http://purl.org/nemo/gufo#"^^xsd:anyURI ;
                            sh:prefix "gufo" ] ] ;
            sh:select """
            PREFIX gufo: <http://purl.org/nemo/gufo#>
            PREFIX owl: <http://www.w3.org/2002/07/owl#>
            SELECT ?this WHERE {
                ?this a gufo:Phase .
                FILTER NOT EXISTS { ?this a owl:Class . }
                FILTER NOT EXISTS { 
                    ?entity ?property ?this .
                    ?property rdfs:subPropertyOf* gufo:hasPhase .
                }
            }
        """ ] ;
    sh:targetClass gufo:Phase .

cacontology-production:ProductionPreparationPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Production Preparation Phase"@en ;
    rdfs:comment "Phase involving preparation and setup for production activities."@en ;
    rdfs:subClassOf cacontology-production:ProductionOffense .

cacontology-production:ProductionRoleShape a sh:NodeShape ;
    rdfs:label "Production Role Shape"@en ;
    rdfs:comment "gUFO-enhanced validation shape for production roles with anti-rigidity and temporal constraints."@en ;
    sh:property [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Production role may have at most one begin point."@en ;
            sh:minCount 0 ;
            sh:path cacontology-production:hasRoleBeginPoint ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Production role may have an end point."@en ;
            sh:minCount 0 ;
            sh:path cacontology-production:hasRoleEndPoint ] ;
    sh:sparql [ sh:message "Role begin point must be before end point."@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/production#"^^xsd:anyURI ;
                            sh:prefix "cacontology-production" ] ] ;
            sh:select """
            PREFIX cacontology-production: <https://cacontology.projectvic.org/production#>
            SELECT ?this WHERE {
                ?this cacontology-production:hasRoleBeginPoint ?begin .
                ?this cacontology-production:hasRoleEndPoint ?end .
                FILTER(?begin >= ?end)
            }
        """ ],
        [ sh:message "Role instances must be anti-rigid (cannot exist without being played by entities)."@en ;
            sh:prefixes [ sh:declare [ sh:namespace "http://purl.org/nemo/gufo#"^^xsd:anyURI ;
                            sh:prefix "gufo" ] ] ;
            sh:select """
            PREFIX gufo: <http://purl.org/nemo/gufo#>
            PREFIX owl: <http://www.w3.org/2002/07/owl#>
            SELECT ?this WHERE {
                ?this a gufo:Role .
                FILTER NOT EXISTS { ?this a owl:Class . }
                FILTER NOT EXISTS { 
                    ?entity ?property ?this .
                    ?property rdfs:subPropertyOf* gufo:playsRole .
                }
            }
        """ ] ;
    sh:targetClass gufo:Role .

cacontology-production:ProductionSituationShape a sh:NodeShape ;
    rdfs:label "Production Situation Shape"@en ;
    rdfs:comment "gUFO validation for production situations ensuring proper modeling of ongoing states."@en ;
    sh:sparql [ sh:message "Situations should involve multiple entities or persist over time."@en ;
            sh:prefixes [ sh:declare [ sh:namespace "http://purl.org/nemo/gufo#"^^xsd:anyURI ;
                            sh:prefix "gufo" ] ] ;
            sh:select """
            SELECT ?this WHERE {
                ?this a gufo:Situation .
                FILTER NOT EXISTS { 
                    { SELECT ?this WHERE { 
                        ?this gufo:involves ?entity1 .
                        ?this gufo:involves ?entity2 .
                        FILTER(?entity1 != ?entity2)
                    } }
                    UNION
                    { SELECT ?this WHERE {
                        ?this gufo:hasBeginPointInXSDDateTimeStamp ?begin .
                        ?this gufo:hasEndPointInXSDDateTimeStamp ?end .
                        FILTER(?end > ?begin)
                    } }
                }
            }
        """ ] ;
    sh:targetClass gufo:Situation .

cacontology-production:RecordingDeviceShape a sh:NodeShape ;
    rdfs:label "Recording Device Shape"@en ;
    rdfs:comment "Validation shape for recording device instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "low" "standard" "high" "ultra_high" "professional" ) ;
            sh:maxCount 1 ;
            sh:message "Recording quality must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-production:recordingQuality ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 100000.0 ;
            sh:message "Storage capacity must be between 0.1 GB and 100 TB."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.1 ;
            sh:path cacontology-production:storageCapacity ] ;
    sh:targetClass cacontology-production:RecordingDevice .

cacontology-production:ResidentialProductionSite a owl:Class ;
    rdfs:label "Residential Production Site"@en ;
    rdfs:comment "Private residence used for production activities."@en ;
    rdfs:subClassOf cacontology-production:ProductionLocation .

cacontology-production:StationaryCamera a owl:Class ;
    rdfs:label "Stationary Camera"@en ;
    rdfs:comment "Fixed camera equipment including webcams, digital cameras, and video cameras."@en ;
    rdfs:subClassOf cacontology-production:RecordingDevice .

cacontology-production:TemporalValidationShape a sh:NodeShape ;
    rdfs:label "Temporal Validation Shape"@en ;
    rdfs:comment "Validates temporal consistency in production offenses."@en ;
    sh:sparql [ sh:message "Start time must be before end time when both are specified."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this uco-core:startTime ?start ;
                      uco-core:endTime ?end .
                FILTER (?start >= ?end)
            }
        """ ] ;
    sh:targetClass cacontology-production:ProductionOffense .

cacontology-production:TextOverlayShape a sh:NodeShape ;
    rdfs:label "Text Overlay Shape"@en ;
    rdfs:comment "Validation shape for text overlay instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "victim_name" "victim_name_and_slang" "explicit_text" "identifying_text" "threatening_text" "instructional_text" ) ;
            sh:maxCount 1 ;
            sh:message "Text overlay must specify text type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-production:textType ],
        [ sh:datatype xsd:string ;
            sh:in ( "overlay_on_image" "caption_below" "watermark" "corner_placement" "center_placement" ) ;
            sh:maxCount 1 ;
            sh:message "Text overlay must specify placement from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-production:textPlacement ] ;
    sh:targetClass cacontology-production:TextOverlay .

cacontology-production:UsesEquipmentShape a sh:PropertyShape ;
    sh:class cacontology-production:ProductionEquipment ;
    sh:description "Links production to equipment used" ;
    sh:minCount 0 ;
    sh:name "uses equipment" ;
    sh:path cacontology-production:usesEquipment .

cacontology-production:concealmentLocation a owl:DatatypeProperty ;
    rdfs:label "concealment location"@en ;
    rdfs:comment "Specific location where device was concealed (bathroom, bedroom, living_area)."@en ;
    rdfs:domain cacontology-production:DeviceConcealment ;
    rdfs:range xsd:string .

cacontology-production:concealmentMethod a owl:DatatypeProperty ;
    rdfs:label "concealment method"@en ;
    rdfs:comment "Specific technique used to hide recording device (fabric_cut, false_bottom, hollow_object)."@en ;
    rdfs:domain cacontology-production:DeviceConcealment ;
    rdfs:range xsd:string .

cacontology-production:developmentalDocumentation a owl:DatatypeProperty ;
    rdfs:label "developmental documentation"@en ;
    rdfs:comment "Whether abuse documentation captured victim's physical development over time."@en ;
    rdfs:domain cacontology-production:ExtendedProductionPeriod ;
    rdfs:range xsd:boolean .

cacontology-production:deviceBrand a owl:DatatypeProperty ;
    rdfs:label "device brand"@en ;
    rdfs:comment "Brand or manufacturer of recording device."@en ;
    rdfs:domain cacontology-production:RecordingDevice ;
    rdfs:range xsd:string .

cacontology-production:deviceModel a owl:DatatypeProperty ;
    rdfs:label "device model"@en ;
    rdfs:comment "Model number or name of recording device."@en ;
    rdfs:domain cacontology-production:RecordingDevice ;
    rdfs:range xsd:string .

cacontology-production:distributionIntent a owl:DatatypeProperty ;
    rdfs:label "distribution intent"@en ;
    rdfs:comment "Whether content was produced for distribution (personal_use, intended_distribution, commercial)."@en ;
    rdfs:domain cacontology-production:ProductionOffense ;
    rdfs:range xsd:string .

cacontology-production:editedWith a owl:ObjectProperty ;
    rdfs:label "edited with"@en ;
    rdfs:comment "Links edited content to editing equipment used."@en ;
    rdfs:domain cacontology-production:EditedContent ;
    rdfs:range cacontology-production:EditingEquipment .

cacontology-production:evidenceOf a owl:ObjectProperty ;
    rdfs:label "evidence of"@en ;
    rdfs:comment "Links produced content to the production offense it evidences."@en ;
    rdfs:domain cacontology-production:ProducedContent ;
    rdfs:range cacontology-production:ProductionOffense .

cacontology-production:evidenceRecovered a owl:DatatypeProperty ;
    rdfs:label "evidence recovered"@en ;
    rdfs:comment "Whether physical evidence of production was recovered."@en ;
    rdfs:domain cacontology-production:ProductionOffense ;
    rdfs:range xsd:boolean .

cacontology-production:facilitatedBy a owl:ObjectProperty ;
    rdfs:label "facilitated by"@en ;
    rdfs:comment "Links production activity to individual who facilitated it."@en ;
    rdfs:domain cacontology-production:ProductionOffense ;
    rdfs:range cacontology-production:ProductionFacilitator .

cacontology-production:forensicValue a owl:DatatypeProperty ;
    rdfs:label "forensic value"@en ;
    rdfs:comment "Forensic value of production evidence (high, medium, low)."@en ;
    rdfs:domain cacontology-production:ProducedContent ;
    rdfs:range xsd:string .

cacontology-production:imageCount a owl:DatatypeProperty ;
    rdfs:label "image count"@en ;
    rdfs:comment "Number of images produced during production activities."@en ;
    rdfs:domain cacontology-production:ProductionOffense ;
    rdfs:range xsd:integer .

cacontology-production:immediateDistribution a owl:DatatypeProperty ;
    rdfs:label "immediate distribution"@en ;
    rdfs:comment "Whether content was distributed immediately after production."@en ;
    rdfs:domain cacontology-production:ProductionOffense ;
    rdfs:range xsd:boolean .

cacontology-production:involvestVictim a owl:ObjectProperty ;
    rdfs:label "involves victim"@en ;
    rdfs:comment "Links production activity to victim involved."@en ;
    rdfs:domain cacontology-production:ProductionOffense ;
    rdfs:range cacontology-production:ProductionVictim .

cacontology-production:locationAccess a owl:DatatypeProperty ;
    rdfs:label "location access"@en ;
    rdfs:comment "Access control at production location (unrestricted, controlled, restricted)."@en ;
    rdfs:domain cacontology-production:ProductionLocation ;
    rdfs:range xsd:string .

cacontology-production:locationSecurity a owl:DatatypeProperty ;
    rdfs:label "location security"@en ;
    rdfs:comment "Security measures at production location (isolated, private, public)."@en ;
    rdfs:domain cacontology-production:ProductionLocation ;
    rdfs:range xsd:string .

cacontology-production:metadataPreserved a owl:DatatypeProperty ;
    rdfs:label "metadata preserved"@en ;
    rdfs:comment "Whether original metadata from production was preserved."@en ;
    rdfs:domain cacontology-production:ProducedContent ;
    rdfs:range xsd:boolean .

cacontology-production:modificationDescription a owl:DatatypeProperty ;
    rdfs:label "modification description"@en ;
    rdfs:comment "Description of physical modifications made to enable concealment."@en ;
    rdfs:domain cacontology-production:PhysicalDeviceModification ;
    rdfs:range xsd:string .

cacontology-production:partOfSeries a owl:ObjectProperty ;
    rdfs:label "part of series"@en ;
    rdfs:comment "Links individual session to larger production series."@en ;
    rdfs:domain cacontology-production:ProductionSession ;
    rdfs:range cacontology-production:ProductionSeries .

cacontology-production:privacyExpectation a owl:DatatypeProperty ;
    rdfs:label "privacy expectation"@en ;
    rdfs:comment "Level of privacy expectation in surveillance location (high, medium, low)."@en ;
    rdfs:domain cacontology-production:PrivateSpaceSurveillance ;
    rdfs:range xsd:string .

cacontology-production:producedBy a owl:ObjectProperty ;
    rdfs:label "produced by"@en ;
    rdfs:comment "Links production activity to the individual who produced it."@en ;
    rdfs:domain cacontology-production:ProductionOffense ;
    rdfs:range cacontology-production:Producer .

cacontology-production:produces a owl:ObjectProperty ;
    rdfs:label "produces"@en ;
    rdfs:comment "Links production activity to content created."@en ;
    rdfs:domain cacontology-production:ProductionOffense ;
    rdfs:range cacontology-production:ProducedContent .

cacontology-production:productionComplexity a owl:DatatypeProperty ;
    rdfs:label "production complexity"@en ;
    rdfs:comment "Complexity level of production (basic, intermediate, sophisticated)."@en ;
    rdfs:domain cacontology-production:ProductionOffense ;
    rdfs:range xsd:string .

cacontology-production:productionEndDate a owl:DatatypeProperty ;
    rdfs:label "production end date"@en ;
    rdfs:comment "Date when production activities ended."@en ;
    rdfs:domain cacontology-production:ProductionOffense ;
    rdfs:range xsd:dateTime .

cacontology-production:productionPeriod a owl:DatatypeProperty ;
    rdfs:label "production period"@en ;
    rdfs:comment "Duration of production activities in days."@en ;
    rdfs:domain cacontology-production:ExtendedProductionPeriod ;
    rdfs:range xsd:integer .

cacontology-production:productionStartDate a owl:DatatypeProperty ;
    rdfs:label "production start date"@en ;
    rdfs:comment "Date when production activities began."@en ;
    rdfs:domain cacontology-production:ProductionOffense ;
    rdfs:range xsd:dateTime .

cacontology-production:recordedWith a owl:ObjectProperty ;
    rdfs:label "recorded with"@en ;
    rdfs:comment "Links produced content to the device used for recording."@en ;
    rdfs:domain cacontology-production:ProducedContent ;
    rdfs:range cacontology-production:RecordingDevice .

cacontology-production:recordingCapability a owl:DatatypeProperty ;
    rdfs:label "recording capability"@en ;
    rdfs:comment "Recording capabilities of device (photo_only, video_only, both)."@en ;
    rdfs:domain cacontology-production:RecordingDevice ;
    rdfs:range xsd:string .

cacontology-production:resultingContent a owl:ObjectProperty ;
    rdfs:label "resulting content"@en ;
    rdfs:comment "Links production session to content created during that session."@en ;
    rdfs:domain cacontology-production:ProductionSession ;
    rdfs:range cacontology-production:ProducedContent .

cacontology-production:sessionDuration a owl:DatatypeProperty ;
    rdfs:label "session duration"@en ;
    rdfs:comment "Duration of individual production session in minutes."@en ;
    rdfs:domain cacontology-production:ProductionSession ;
    rdfs:range xsd:integer .

cacontology-production:sessionLocation a owl:ObjectProperty ;
    rdfs:label "session location"@en ;
    rdfs:comment "Links production session to its physical location."@en ;
    rdfs:domain cacontology-production:ProductionSession ;
    rdfs:range cacontology-production:ProductionLocation .

cacontology-production:surveillanceAngle a owl:DatatypeProperty ;
    rdfs:label "surveillance angle"@en ;
    rdfs:comment "Camera angle or positioning for surveillance (pointing_toward_bathroom, wide_angle, focused)."@en ;
    rdfs:domain cacontology-production:PrivateSpaceSurveillance ;
    rdfs:range xsd:string .

cacontology-production:systematicNature a owl:DatatypeProperty ;
    rdfs:label "systematic nature"@en ;
    rdfs:comment "Whether production shows systematic, ongoing pattern rather than isolated incidents."@en ;
    rdfs:domain cacontology-production:ExtendedProductionPeriod ;
    rdfs:range xsd:boolean .

cacontology-production:totalContentVolume a owl:DatatypeProperty ;
    rdfs:label "total content volume"@en ;
    rdfs:comment "Total amount of content produced in megabytes."@en ;
    rdfs:domain cacontology-production:ProductionOffense ;
    rdfs:range xsd:decimal .

cacontology-production:triggeredInvestigation a owl:ObjectProperty ;
    rdfs:label "triggered investigation"@en ;
    rdfs:comment "Links production offense to investigation it triggered."@en ;
    rdfs:domain cacontology-production:ProductionOffense ;
    rdfs:range cacontology:Investigation .

cacontology-production:victimAge a owl:DatatypeProperty ;
    rdfs:label "victim age"@en ;
    rdfs:comment "Age of victim at time of production."@en ;
    rdfs:domain cacontology-production:ProductionVictim ;
    rdfs:range xsd:integer .

cacontology-production:victimAgeProgression a owl:DatatypeProperty ;
    rdfs:label "victim age progression"@en ;
    rdfs:comment "Age range documented showing victim's development (e.g., '13-16')."@en ;
    rdfs:domain cacontology-production:ExtendedProductionPeriod ;
    rdfs:range xsd:string .

cacontology-production:victimAwareness a owl:DatatypeProperty ;
    rdfs:label "victim awareness"@en ;
    rdfs:comment "Whether victim was aware of recording (aware, unaware, coerced)."@en ;
    rdfs:domain cacontology-production:ProductionSession ;
    rdfs:range xsd:string .

cacontology-production:videoCount a owl:DatatypeProperty ;
    rdfs:label "video count"@en ;
    rdfs:comment "Number of videos produced during production activities."@en ;
    rdfs:domain cacontology-production:ProductionOffense ;
    rdfs:range xsd:integer .

cacontology-recruitment:ExtracurricularRecruitment a owl:Class ;
    rdfs:label "Extracurricular Recruitment"@en ;
    rdfs:comment "Recruitment occurring during extracurricular activities or school events."@en ;
    rdfs:subClassOf cacontology-recruitment:AfterSchoolRecruitment .

cacontology-recruitment:LunchBreakRecruitment a owl:Class ;
    rdfs:label "Lunch Break Recruitment"@en ;
    rdfs:comment "Recruitment occurring during lunch breaks or between classes."@en ;
    rdfs:subClassOf cacontology-recruitment:SchoolHoursRecruitment .

cacontology-recruitment:MandatoryReportingActivation a owl:Class ;
    rdfs:label "Mandatory Reporting Activation"@en ;
    rdfs:comment "Activation of mandatory reporting requirements by school personnel."@en ;
    rdfs:subClassOf cacontology-recruitment:SchoolBasedReporting .

cacontology-recruitment:PeerPressureVulnerability a owl:Class ;
    rdfs:label "Peer Pressure Vulnerability"@en ;
    rdfs:comment "Susceptibility to peer pressure enabling recruitment through classmates."@en ;
    rdfs:subClassOf cacontology-recruitment:SchoolVulnerabilityFactor .

cacontology-recruitment:RecruitmentIncentive a owl:Class ;
    rdfs:label "Recruitment Incentive"@en ;
    rdfs:comment "Incentives offered to existing victims for successful recruitment of new victims."@en ;
    rdfs:subClassOf cacontology-recruitment:CoercedPeerRecruitment .

cacontology-recruitment:RecruitmentPunishment a owl:Class ;
    rdfs:label "Recruitment Punishment"@en ;
    rdfs:comment "Punishment threatened or applied to victims who fail to recruit new victims."@en ;
    rdfs:subClassOf cacontology-recruitment:CoercedPeerRecruitment .

cacontology-recruitment:SchoolCounselor a owl:Class ;
    rdfs:label "School Counselor"@en ;
    rdfs:comment "School counselor who may receive disclosures from trafficking victims."@en ;
    rdfs:subClassOf cacontology-recruitment:SchoolStaffMember .

cacontology-recruitment:SocialConnectionLeverage a owl:Class ;
    rdfs:label "Social Connection Leverage"@en ;
    rdfs:comment "Leveraging existing social connections between victims to facilitate new recruitment."@en ;
    rdfs:subClassOf cacontology-recruitment:FriendshipExploitation .

cacontology-recruitment:SocialIsolationAtSchool a owl:Class ;
    rdfs:label "Social Isolation at School"@en ;
    rdfs:comment "Student isolation within school environment making them vulnerable to recruitment."@en ;
    rdfs:subClassOf cacontology-recruitment:SchoolVulnerabilityFactor .

cacontology-recruitment:StudentNetworkExploitation a owl:Class ;
    rdfs:label "Student Network Exploitation"@en ;
    rdfs:comment "Exploitation of student social networks and peer relationships for trafficking recruitment."@en ;
    rdfs:subClassOf cacontology-recruitment:SchoolBasedRecruitment .

cacontology-recruitment:TeacherReporter a owl:Class ;
    rdfs:label "Teacher Reporter"@en ;
    rdfs:comment "Teacher who identifies signs of trafficking or receives disclosures from students."@en ;
    rdfs:subClassOf cacontology-recruitment:SchoolStaffMember .

cacontology-recruitment:attendsSchool a owl:ObjectProperty ;
    rdfs:label "attends school"@en ;
    rdfs:comment "Links student to educational institution they attend."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range cacontology-recruitment:EducationalInstitution .

cacontology-recruitment:exhibitsVulnerability a owl:ObjectProperty ;
    rdfs:label "exhibits vulnerability"@en ;
    rdfs:comment "Links victim to vulnerability factors they exhibit."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range cacontology-recruitment:SchoolVulnerabilityFactor .

cacontology-recruitment:exploitsVulnerability a owl:ObjectProperty ;
    rdfs:label "exploits vulnerability"@en ;
    rdfs:comment "Links recruitment to vulnerability factor being exploited."@en ;
    rdfs:domain cacontology-recruitment:SchoolBasedRecruitment ;
    rdfs:range cacontology-recruitment:SchoolVulnerabilityFactor .

cacontology-recruitment:mitigatesVulnerability a owl:ObjectProperty ;
    rdfs:label "mitigates vulnerability"@en ;
    rdfs:comment "Links school intervention to vulnerability factor it addresses."@en ;
    rdfs:domain cacontology-recruitment:SchoolBasedReporting ;
    rdfs:range cacontology-recruitment:SchoolVulnerabilityFactor .

cacontology-recruitment:operatesInNetwork a owl:ObjectProperty ;
    rdfs:label "operates in network"@en ;
    rdfs:comment "Links trafficking operation to recruitment network it utilizes."@en ;
    rdfs:domain cacontology-trafficking:TraffickingOperation ;
    rdfs:range cacontology-recruitment:PeerRecruitmentNetwork .

cacontology-recruitment:recruitsVictim a owl:ObjectProperty ;
    rdfs:label "recruits victim"@en ;
    rdfs:comment "Links recruiting victim to new victim they recruit."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range uco-identity:Person .

cacontology-recruitment:reportsToSchool a owl:ObjectProperty ;
    rdfs:label "reports to school"@en ;
    rdfs:comment "Links victim to school where they made disclosure."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range cacontology-recruitment:EducationalInstitution .

cacontology-recruitment:triggersInvestigation a owl:ObjectProperty ;
    rdfs:label "triggers investigation"@en ;
    rdfs:comment "Links school-based reporting to investigation it triggers."@en ;
    rdfs:domain cacontology-recruitment:SchoolBasedReporting ;
    rdfs:range cacontology:Investigation .

cacontology-recruitment-shapes:AcademicStrugglesShape a sh:NodeShape ;
    rdfs:label "Academic Struggles Shape"@en ;
    rdfs:comment "Validation shape for academic struggles instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "failing" "below_average" "average" "above_average" "excellent" ) ;
            sh:maxCount 1 ;
            sh:message "Academic performance level must be from allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-recruitment:academicPerformanceLevel ] ;
    sh:targetClass cacontology-recruitment:AcademicStruggles .

cacontology-recruitment-shapes:AttendanceProblemsShape a sh:NodeShape ;
    rdfs:label "Attendance Problems Shape"@en ;
    rdfs:comment "Validation shape for attendance problems instances."@en ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Attendance rate must be 0.0-1.0 (percentage)."@en ;
            sh:minCount 1 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-recruitment:attendanceRate ] ;
    sh:targetClass cacontology-recruitment:AttendanceProblems .

cacontology-recruitment-shapes:ClassmateIntroductionShape a sh:NodeShape ;
    rdfs:label "Classmate Introduction Shape"@en ;
    rdfs:comment "Validation shape for classmate introduction instances."@en ;
    sh:property [ sh:class uco-identity:Person ;
            sh:maxCount 1 ;
            sh:message "Classmate introduction must specify who victim is introduced to."@en ;
            sh:minCount 1 ;
            sh:path cacontology-recruitment:introducesTo ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 365.0 ;
            sh:message "Average recruitment time must be 0.1-365 days."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.1 ;
            sh:path cacontology-recruitment:averageRecruitmentTime ] ;
    sh:targetClass cacontology-recruitment:ClassmateIntroduction .

cacontology-recruitment-shapes:ClassmateRecruitmentNetworkShape a sh:NodeShape ;
    rdfs:label "Classmate Recruitment Network Shape"@en ;
    rdfs:comment "Validation shape for classmate recruitment network instances."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 10 ;
            sh:message "Classmate recruitment network must involve 1-10 schools."@en ;
            sh:minCount 1 ;
            sh:minInclusive 1 ;
            sh:path cacontology-recruitment:schoolsInvolved ],
        [ sh:class cacontology-recruitment:EducationalInstitution ;
            sh:message "Classmate recruitment network must target at least one school."@en ;
            sh:minCount 1 ;
            sh:path cacontology-recruitment:targetsSchool ] ;
    sh:targetClass cacontology-recruitment:ClassmateRecruitmentNetwork .

cacontology-recruitment-shapes:CoercedPeerRecruitmentShape a sh:NodeShape ;
    rdfs:label "Coerced Peer Recruitment Shape"@en ;
    rdfs:comment "Validation shape for coerced peer recruitment instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 500 ;
            sh:message "Coerced recruitment must have description 10-500 characters."@en ;
            sh:minCount 1 ;
            sh:minLength 10 ;
            sh:path uco-core:description ] ;
    sh:targetClass cacontology-recruitment:CoercedPeerRecruitment .

cacontology-recruitment-shapes:DataQualityShape a sh:NodeShape ;
    rdfs:label "Recruitment Networks Data Quality Shape"@en ;
    rdfs:comment "General data quality constraints for recruitment networks module."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:message "All recruitment network entities must have non-empty labels, comments, or descriptions."@en ;
            sh:minLength 1 ;
            sh:path [ sh:alternativePath ( rdfs:label rdfs:comment uco-core:description ) ] ] ;
    sh:targetNode cacontology-recruitment: .

cacontology-recruitment-shapes:EducationalInstitutionShape a sh:NodeShape ;
    rdfs:label "Educational Institution Shape"@en ;
    rdfs:comment "Validation shape for educational institution instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "public" "private" "charter" "alternative" "homeschool" "online" ) ;
            sh:maxCount 1 ;
            sh:message "School type must be public, private, charter, alternative, homeschool, or online."@en ;
            sh:minCount 1 ;
            sh:path cacontology-recruitment:schoolType ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 5000 ;
            sh:message "Student population must be 10-5000."@en ;
            sh:minCount 0 ;
            sh:minInclusive 10 ;
            sh:path cacontology-recruitment:studentPopulation ],
        [ sh:datatype xsd:string ;
            sh:in ( "low" "middle" "high" "mixed" ) ;
            sh:maxCount 1 ;
            sh:message "Socioeconomic level must be low, middle, high, or mixed."@en ;
            sh:minCount 0 ;
            sh:path cacontology-recruitment:socioeconomicLevel ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Educational institution must have label 3-200 characters."@en ;
            sh:minCount 1 ;
            sh:minLength 3 ;
            sh:path rdfs:label ] ;
    sh:targetClass cacontology-recruitment:EducationalInstitution .

cacontology-recruitment-shapes:EducationalReportingDataQualityShape a sh:NodeShape ;
    rdfs:label "Educational Reporting Data Quality Shape"@en ;
    rdfs:comment "Data quality constraints for educational reporting instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:message "School-based reporting must specify staff role making report."@en ;
            sh:minCount 1 ;
            sh:path cacontology-recruitment:reportingStaffRole ],
        [ sh:datatype xsd:dateTime ;
            sh:message "School-based reporting must have reporting timestamp."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ] ;
    sh:targetClass cacontology-recruitment:SchoolBasedReporting .

cacontology-recruitment-shapes:NetworkSizeConsistencyShape a sh:NodeShape ;
    rdfs:label "Network Size Consistency Shape"@en ;
    rdfs:comment "Validates consistency between network size and victim recruiter count."@en ;
    sh:sparql [ sh:message "Victim recruiter count cannot exceed total network size."@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/recruitment-networks#"^^xsd:anyURI ;
                            sh:prefix "cacontology-recruitment" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-recruitment:networkSize ?size ;
                      cacontology-recruitment:victimRecruitersCount ?recruiters .
                FILTER (?recruiters > ?size)
            }
        """ ] ;
    sh:targetClass cacontology-recruitment:PeerRecruitmentNetwork .

cacontology-recruitment-shapes:PeerRecruitmentNetworkShape a sh:NodeShape ;
    rdfs:label "Peer Recruitment Network Shape"@en ;
    rdfs:comment "Validation shape for peer recruitment network instances."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 50 ;
            sh:message "Peer recruitment network must have 2-50 participants."@en ;
            sh:minCount 1 ;
            sh:minInclusive 2 ;
            sh:path cacontology-recruitment:networkSize ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 20 ;
            sh:message "Network must have 1-20 victim recruiters."@en ;
            sh:minCount 1 ;
            sh:minInclusive 1 ;
            sh:path cacontology-recruitment:victimRecruitersCount ],
        [ sh:class uco-identity:Person ;
            sh:message "Recruitment network must include at least one recruiting victim."@en ;
            sh:minCount 1 ;
            sh:path cacontology-recruitment:includesRecruitingVictim ] ;
    sh:targetClass cacontology-recruitment:PeerRecruitmentNetwork .

cacontology-recruitment-shapes:RecruitmentConsistencyShape a sh:NodeShape ;
    rdfs:label "Recruitment Consistency Shape"@en ;
    rdfs:comment "Validates consistency between recruitment attempts and successes."@en ;
    sh:sparql [ sh:message "Successful recruitments cannot exceed total recruitment attempts."@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/recruitment-networks#"^^xsd:anyURI ;
                            sh:prefix "cacontology-recruitment" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-recruitment:successfulRecruitments ?successful ;
                      cacontology-recruitment:recruitmentAttempts ?attempts .
                FILTER (?successful > ?attempts)
            }
        """ ] ;
    sh:targetClass cacontology-recruitment:VictimMediatedRecruitment .

cacontology-recruitment-shapes:RecruitmentQuotaShape a sh:NodeShape ;
    rdfs:label "Recruitment Quota Shape"@en ;
    rdfs:comment "Validation shape for recruitment quota instances."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 10 ;
            sh:message "Recruitment quota must specify 1-10 required recruitments."@en ;
            sh:minCount 1 ;
            sh:minInclusive 1 ;
            sh:path cacontology-recruitment:successfulRecruitments ] ;
    sh:targetClass cacontology-recruitment:RecruitmentQuota .

cacontology-recruitment-shapes:RecruitmentTimingShape a sh:NodeShape ;
    rdfs:label "Recruitment Timing Shape"@en ;
    rdfs:comment "Validation shape for recruitment timing instances."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Recruitment timing may have start time."@en ;
            sh:minCount 0 ;
            sh:path uco-core:startTime ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Recruitment timing may have end time."@en ;
            sh:minCount 0 ;
            sh:path uco-core:endTime ] ;
    sh:targetClass cacontology-recruitment:RecruitmentTiming .

cacontology-recruitment-shapes:SchoolBasedRecruitmentShape a sh:NodeShape ;
    rdfs:label "School Based Recruitment Shape"@en ;
    rdfs:comment "Validation shape for school-based recruitment instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "elementary" "middle" "high" "mixed" "alternative" ) ;
            sh:maxCount 1 ;
            sh:message "Grade level must be elementary, middle, high, mixed, or alternative."@en ;
            sh:minCount 1 ;
            sh:path cacontology-recruitment:gradeLevel ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "School-based recruitment may have start time."@en ;
            sh:minCount 0 ;
            sh:path uco-core:startTime ] ;
    sh:targetClass cacontology-recruitment:SchoolBasedRecruitment .

cacontology-recruitment-shapes:SchoolBasedReportingShape a sh:NodeShape ;
    rdfs:label "School Based Reporting Shape"@en ;
    rdfs:comment "Validation shape for school-based reporting instances."@en ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 365.0 ;
            sh:message "Reporting delay must be 0-365 days."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-recruitment:reportingDelay ],
        [ sh:datatype xsd:string ;
            sh:in ( "social_worker" "counselor" "teacher" "administrator" "nurse" "resource_officer" ) ;
            sh:maxCount 1 ;
            sh:message "Reporting staff role must be from allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-recruitment:reportingStaffRole ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Must specify if mandatory reporting was triggered."@en ;
            sh:minCount 1 ;
            sh:path cacontology-recruitment:mandatoryReportingTrigger ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "School-based reporting must have start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ] ;
    sh:targetClass cacontology-recruitment:SchoolBasedReporting .

cacontology-recruitment-shapes:SchoolReportingTimelinessShape a sh:NodeShape ;
    rdfs:label "School Reporting Timeliness Shape"@en ;
    rdfs:comment "Validates reasonable reporting timelines for school-based reports."@en ;
    sh:sparql [ sh:message "Mandatory reporting should occur within 24 hours when triggered."@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/recruitment-networks#"^^xsd:anyURI ;
                            sh:prefix "cacontology-recruitment" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-recruitment:mandatoryReportingTrigger true ;
                      cacontology-recruitment:reportingDelay ?delay .
                FILTER (?delay > 1.0)
            }
        """ ] ;
    sh:targetClass cacontology-recruitment:SchoolBasedReporting .

cacontology-recruitment-shapes:SchoolSocialWorkerShape a sh:NodeShape ;
    rdfs:label "School Social Worker Shape"@en ;
    rdfs:comment "Validation shape for school social worker instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 100 ;
            sh:message "School social worker must have label 3-100 characters."@en ;
            sh:minCount 1 ;
            sh:minLength 3 ;
            sh:path rdfs:label ] ;
    sh:targetClass cacontology-recruitment:SchoolSocialWorker .

cacontology-recruitment-shapes:SchoolStaffMemberShape a sh:NodeShape ;
    rdfs:label "School Staff Member Shape"@en ;
    rdfs:comment "Validation shape for school staff member instances."@en ;
    sh:property [ sh:class cacontology-recruitment:EducationalInstitution ;
            sh:maxCount 1 ;
            sh:message "School staff member must be employed at one institution."@en ;
            sh:minCount 1 ;
            sh:path cacontology-recruitment:employedAt ] ;
    sh:targetClass cacontology-recruitment:SchoolStaffMember .

cacontology-recruitment-shapes:SchoolVulnerabilityFactorShape a sh:NodeShape ;
    rdfs:label "School Vulnerability Factor Shape"@en ;
    rdfs:comment "Validation shape for school vulnerability factor instances."@en ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Vulnerability score must be 0.0-1.0."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-recruitment:vulnerabilityScore ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 150 ;
            sh:message "Vulnerability factor must have label 5-150 characters."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path rdfs:label ] ;
    sh:targetClass cacontology-recruitment:SchoolVulnerabilityFactor .

cacontology-recruitment-shapes:SocialWorkerReportShape a sh:NodeShape ;
    rdfs:label "Social Worker Report Shape"@en ;
    rdfs:comment "Validation shape for social worker report instances."@en ;
    sh:property [ sh:class cacontology-recruitment:SchoolPoliceContact ;
            sh:maxCount 1 ;
            sh:message "Social worker report must include law enforcement contact."@en ;
            sh:minCount 1 ;
            sh:path cacontology-recruitment:contactsLawEnforcement ] ;
    sh:targetClass cacontology-recruitment:SocialWorkerReport .

cacontology-recruitment-shapes:VictimMediatedRecruitmentShape a sh:NodeShape ;
    rdfs:label "Victim Mediated Recruitment Shape"@en ;
    rdfs:comment "Validation shape for victim-mediated recruitment instances."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 20 ;
            sh:message "Successful recruitments must be 0-20."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0 ;
            sh:path cacontology-recruitment:successfulRecruitments ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 100 ;
            sh:message "Recruitment attempts must be 1-100."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1 ;
            sh:path cacontology-recruitment:recruitmentAttempts ],
        [ sh:class uco-identity:Person ;
            sh:maxCount 1 ;
            sh:message "Victim-mediated recruitment must specify facilitating victim."@en ;
            sh:minCount 1 ;
            sh:path cacontology-recruitment:facilitatedBy ] ;
    sh:targetClass cacontology-recruitment:VictimMediatedRecruitment .

cacontology-recruitment-shapes:VictimSchoolDisclosureShape a sh:NodeShape ;
    rdfs:label "Victim School Disclosure Shape"@en ;
    rdfs:comment "Validation shape for victim school disclosure instances."@en ;
    sh:property [ sh:class cacontology-recruitment:SchoolStaffMember ;
            sh:maxCount 1 ;
            sh:message "School disclosure must specify receiving staff member."@en ;
            sh:minCount 1 ;
            sh:path cacontology-recruitment:receivesReport ] ;
    sh:targetClass cacontology-recruitment:VictimSchoolDisclosure .

cacontology-sentencing:AppellateDispositionShape a sh:NodeShape ;
    rdfs:label "Appellate Disposition Shape"@en ;
    rdfs:comment "Validation shape for appellate dispositions."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "affirmed" "reversed" "vacated" "remanded" "affirmed_in_part_reversed_in_part" "dismissed" "other" ) ;
            sh:maxCount 1 ;
            sh:message "Disposition type must be one of: affirmed, reversed, vacated, remanded, affirmed_in_part_reversed_in_part, dismissed, other."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sentencing:dispositionType ],
        [ sh:message "Appellate disposition should have an rdfs:label."@en ;
            sh:minCount 1 ;
            sh:path rdfs:label ] ;
    sh:targetClass cacontology-sentencing:AppellateDisposition .

cacontology-sentencing:AppellateIssueShape a sh:NodeShape ;
    rdfs:label "Appellate Issue Shape"@en ;
    rdfs:comment "Validation shape for appellate issues (issue → disposition, optional evidence-rule and standard-of-review links)."@en ;
    sh:property [ sh:message "Appellate issue must have an rdfs:label."@en ;
            sh:minCount 1 ;
            sh:path rdfs:label ],
        [ sh:class cacontology-sentencing:AppellateDisposition ;
            sh:message "Appellate issue must link to at least one AppellateDisposition via issueDisposition."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sentencing:issueDisposition ],
        [ sh:class cacontology-sentencing:StandardOfReview ;
            sh:message "appliesStandardOfReview must point to a StandardOfReview."@en ;
            sh:minCount 0 ;
            sh:path cacontology-sentencing:appliesStandardOfReview ],
        [ sh:class cacontology-sentencing:EvidenceRule ;
            sh:message "citesEvidenceRule must point to an EvidenceRule."@en ;
            sh:minCount 0 ;
            sh:path cacontology-sentencing:citesEvidenceRule ] ;
    sh:targetClass cacontology-sentencing:AppellateIssue .

cacontology-sentencing:AppliesEnhancementShape a sh:PropertyShape ;
    sh:class cacontology-sentencing:EnhancementFactor ;
    sh:description "Links guidelines to enhancement factors" ;
    sh:minCount 0 ;
    sh:name "applies enhancement" ;
    sh:path cacontology-sentencing:appliesEnhancement .

cacontology-sentencing:ArraignmentProceeding a owl:Class ;
    rdfs:label "Arraignment Proceeding"@en ;
    rdfs:comment "Initial court appearance where charges are formally read and plea is entered. Modeled as gUFO Event."@en ;
    rdfs:subClassOf cacontology-sentencing:LegalProceeding .

cacontology-sentencing:CSAM_AccessingAndViewing a owl:Class ;
    rdfs:label "CSAM Accessing and Viewing"@en ;
    rdfs:comment "Charge for intentionally accessing and viewing child sexual abuse material. Modeled as gUFO Object."@en ;
    rdfs:subClassOf cacontology-sentencing:CSAM_Possession .

cacontology-sentencing:CSAM_CausingProduction a owl:Class ;
    rdfs:label "CSAM Causing Production"@en ;
    rdfs:comment "Charge for causing or facilitating the production of child sexual abuse material, distinct from direct production. Modeled as gUFO Object."@en ;
    rdfs:subClassOf cacontology-sentencing:CSAM_Production .

cacontology-sentencing:CSAM_Distribution a owl:Class ;
    rdfs:label "CSAM Distribution"@en ;
    rdfs:comment "Charge for distribution of child sexual abuse material. Modeled as gUFO Object."@en ;
    rdfs:subClassOf cacontology-sentencing:FederalCharge .

cacontology-sentencing:CSAM_ReceivingOnCellularDevice a owl:Class ;
    rdfs:label "CSAM Receiving on Cellular Device"@en ;
    rdfs:comment "Charge for receiving child sexual abuse material on cellular phone or mobile device. Modeled as gUFO Object."@en ;
    rdfs:subClassOf cacontology-sentencing:CSAM_Possession .

cacontology-sentencing:CarriageServiceCSAMTransmission a owl:Class ;
    rdfs:label "Carriage Service CSAM Transmission"@en ;
    rdfs:comment "Use of carriage service to cause child abuse material to be transmitted to self, contrary to section 474.22(1)(a)(ii) Criminal Code (Cth). Maximum penalty 15 years imprisonment. Modeled as gUFO Object."@en ;
    rdfs:subClassOf cacontology-sentencing:FederalCharge .

cacontology-sentencing:CarriageServiceIndecentCommunication a owl:Class ;
    rdfs:label "Carriage Service Indecent Communication"@en ;
    rdfs:comment "Use of carriage service to transmit indecent communication to person under 16 years, contrary to section 474.27A Criminal Code (Cth). Maximum penalty 10 years imprisonment. Modeled as gUFO Object."@en ;
    rdfs:subClassOf cacontology-sentencing:FederalCharge .

cacontology-sentencing:CommunityService a owl:Class ;
    rdfs:label "Community Service"@en ;
    rdfs:comment "Sentence requiring unpaid work for community benefit. Modeled as gUFO Object."@en ;
    rdfs:subClassOf cacontology-sentencing:CriminalSentence .

cacontology-sentencing:ComputerSeduceSolicitLureShape a sh:NodeShape ;
    rdfs:label "Computer Seduce Solicit Lure Shape"@en ;
    rdfs:comment "Validation shape for F.S. 847.0135(3) computer solicitation charges."@en,
        "Validation shape for Florida computer lure charges."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "seduce" "solicit" "lure" "entice" "multiple" ) ;
            sh:maxCount 1 ;
            sh:message "Must specify type of solicitation from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sentencing:solicitationType ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:message "May specify the communication platform used."@en ;
            sh:minCount 0 ;
            sh:path cacontology-sentencing:communicationPlatform ],
        [ sh:datatype rdf:langString ;
            sh:maxCount 1 ;
            sh:message "Computer lure charge should have a label."@en ;
            sh:minCount 0 ;
            sh:path rdfs:label ],
        [ sh:datatype xsd:string ;
            sh:in ( "messaging app" "social media" "email" "chat room" "gaming platform" "video chat" "other" ) ;
            sh:maxCount 1 ;
            sh:message "Computer lure method should be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-sentencing:computerLureMethod ] ;
    sh:targetClass cacontology-sentencing:ComputerSeduceSolicitLure .

cacontology-sentencing:ContributingToDelinquencyShape a sh:NodeShape ;
    rdfs:label "Contributing to Delinquency Shape"@en ;
    rdfs:comment "Validation shape for F.S. 827.04 contributing to delinquency charges."@en,
        "Validation shape for Florida contributing to delinquency charges."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "delinquency" "dependency" "both" ) ;
            sh:maxCount 1 ;
            sh:message "Must specify whether contribution was to delinquency, dependency, or both."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sentencing:contributionType ],
        [ sh:datatype rdf:langString ;
            sh:maxCount 1 ;
            sh:message "Contributing charge should have a label."@en ;
            sh:minCount 0 ;
            sh:path rdfs:label ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "May specify if contribution to child delinquency occurred."@en ;
            sh:minCount 0 ;
            sh:path cacontology-sentencing:childDelinquencyContribution ] ;
    sh:targetClass cacontology-sentencing:ContributingToDelinquency .

cacontology-sentencing:ConvictionRecordShape a sh:NodeShape ;
    rdfs:label "Conviction Record Shape"@en ;
    rdfs:comment "Validation shape for conviction record instances."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Conviction record must specify conviction date."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sentencing:convictionDate ],
        [ sh:datatype xsd:string ;
            sh:in ( "jury_verdict" "bench_trial" "plea_agreement" "default_judgment" "summary_conviction" ) ;
            sh:maxCount 1 ;
            sh:message "Conviction record must specify conviction type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sentencing:convictionType ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 100 ;
            sh:message "Conviction record must have between 1 and 100 charges."@en ;
            sh:minCount 1 ;
            sh:minInclusive 1 ;
            sh:path cacontology-sentencing:chargeCount ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 50 ;
            sh:message "Prior convictions must be between 0 and 50."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0 ;
            sh:path cacontology-sentencing:priorConvictions ] ;
    sh:targetClass cacontology-sentencing:ConvictionRecord .

cacontology-sentencing:CriminalFineShape a sh:NodeShape ;
    rdfs:label "Criminal Fine Shape"@en ;
    rdfs:comment "Validation shape for criminal fine instances."@en ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 1000000.0 ;
            sh:message "Fine amount must be between $1 and $1,000,000."@en ;
            sh:minCount 1 ;
            sh:minInclusive 1.0 ;
            sh:path cacontology-sentencing:fineAmount ],
        [ sh:datatype xsd:string ;
            sh:in ( "statutory_fine" "discretionary_fine" "alternative_fine" "cost_of_prosecution" "forfeiture" ) ;
            sh:maxCount 1 ;
            sh:message "Criminal fine must specify fine type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sentencing:fineType ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Criminal fine may specify payment deadline."@en ;
            sh:minCount 0 ;
            sh:path cacontology-sentencing:paymentDeadline ] ;
    sh:targetClass cacontology-sentencing:CriminalFine .

cacontology-sentencing:CriminalSentenceConcurrencyBusinessRule a sh:NodeShape ;
    rdfs:label "Criminal Sentence Concurrency Business Rule"@en ;
    rdfs:comment "Business rule: a sentence MUST NOT be declared concurrent with itself."@en ;
    sh:sparql [ sh:message "A criminal sentence cannot be concurrentWith itself."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-sentencing:concurrentWith $this .
            }
        """ ] ;
    sh:targetClass cacontology-sentencing:CriminalSentence .

cacontology-sentencing:CriminalSentenceShape a sh:NodeShape ;
    rdfs:label "Criminal Sentence Shape"@en ;
    rdfs:comment "Validation shape for criminal sentences, including concurrency semantics for concurrent jail/probation terms (as in the Utah Christensen 2021 sentences)."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "concurrent" "consecutive" "mixed" ) ;
            sh:maxCount 1 ;
            sh:message "Sentence concurrency, when provided, must be one of: concurrent, consecutive, mixed."@en ;
            sh:minCount 0 ;
            sh:path cacontology-sentencing:sentenceConcurrency ],
        [ sh:class cacontology-sentencing:CriminalSentence ;
            sh:message "Sentences linked via concurrentWith must point to other CriminalSentence instances."@en ;
            sh:minCount 0 ;
            sh:path cacontology-sentencing:concurrentWith ] ;
    sh:targetClass cacontology-sentencing:CriminalSentence .

cacontology-sentencing:DataQualityShape a sh:NodeShape ;
    rdfs:label "Data Quality Shape"@en ;
    rdfs:comment "Validates data quality for sentencing outcomes."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Label should be between 5 and 200 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 5 ;
            sh:path rdfs:label ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 1000 ;
            sh:message "Comment should be between 10 and 1000 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 10 ;
            sh:path rdfs:comment ] ;
    sh:targetClass cacontology-sentencing:SentencingOutcome .

cacontology-sentencing:DefendantRole a gufo:Role,
        owl:Class ;
    rdfs:label "Defendant Role"@en ;
    rdfs:comment "Role of individual charged with ICAC crimes. Modeled as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf uco-role:Role ;
    owl:equivalentClass cacontology-gufo:OffenderRole .

cacontology-sentencing:DefenseAttorneyRole a gufo:Role,
        owl:Class ;
    rdfs:label "Defense Attorney Role"@en ;
    rdfs:comment "Role of defense attorney representing ICAC defendants. Modeled as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf uco-role:Role .

cacontology-sentencing:DirectPromotionOfSexualPerformanceShape a sh:NodeShape ;
    rdfs:label "Direct Promotion of Sexual Performance Shape"@en ;
    rdfs:comment "Validation shape for F.S. 827.071(4) promoting sexual performance by a child charges."@en,
        "Validation shape for Florida direct promotion charges."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "direct_promotion" "directing" "producing" "facilitating" ) ;
            sh:maxCount 1 ;
            sh:message "Must specify type of promotion from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sentencing:promotionType ],
        [ sh:datatype rdf:langString ;
            sh:maxCount 1 ;
            sh:message "Direct promotion charge should have a label."@en ;
            sh:minCount 0 ;
            sh:path rdfs:label ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "May specify if sexual performance promotion occurred."@en ;
            sh:minCount 0 ;
            sh:path cacontology-sentencing:sexualPerformancePromotion ] ;
    sh:targetClass cacontology-sentencing:DirectPromotionOfSexualPerformance .

cacontology-sentencing:EnhancementFactorShape a sh:NodeShape ;
    rdfs:label "Enhancement Factor Shape"@en ;
    rdfs:comment "Validation shape for enhancement factor instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "victim_vulnerability" "leadership_role" "use_of_technology" "commercial_purpose" "distribution_scale" "repeat_offender" "violence_threat" ) ;
            sh:maxCount 1 ;
            sh:message "Enhancement factor must specify enhancement type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sentencing:enhancementType ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 10 ;
            sh:message "Enhancement factor must have enhancement value between 1 and 10."@en ;
            sh:minCount 1 ;
            sh:minInclusive 1 ;
            sh:path cacontology-sentencing:enhancementValue ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 500 ;
            sh:message "Enhancement justification must be between 10 and 500 characters."@en ;
            sh:minCount 1 ;
            sh:minLength 10 ;
            sh:path cacontology-sentencing:enhancementJustification ] ;
    sh:targetClass cacontology-sentencing:EnhancementFactor .

cacontology-sentencing:EvidenceRuleShape a sh:NodeShape ;
    rdfs:label "Evidence Rule Shape"@en ;
    rdfs:comment "Validation shape for evidence rules cited in appellate issues."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Evidence rule must include a ruleCitation string (5-200 chars)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path cacontology-sentencing:ruleCitation ],
        [ sh:message "Evidence rule should have an rdfs:label."@en ;
            sh:minCount 1 ;
            sh:path rdfs:label ] ;
    sh:targetClass cacontology-sentencing:EvidenceRule .

cacontology-sentencing:EvidentiaryRuling a owl:Class ;
    rdfs:label "Evidentiary Ruling (Issue)"@en ;
    dcterms:source "United States v. McCormack (9th Cir. 2017) opinion (CourtListener)."@en ;
    rdfs:comment "Appellate issue concerning a trial court evidentiary ruling, including admission/exclusion decisions and related prejudice analysis (e.g., under Federal Rules of Evidence). Modeled as gUFO Object."@en ;
    rdfs:seeAlso <https://www.courtlistener.com/opinion/8700418/united-states-v-mccormack/> ;
    rdfs:subClassOf cacontology-sentencing:AppellateIssue .

cacontology-sentencing:FelonyChargeShape a sh:NodeShape ;
    rdfs:label "Felony Charge Shape"@en ;
    rdfs:comment "Validation shape for felony charge instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "first_degree" "second_degree" "third_degree" "fourth_degree" "unclassified" "capital" ) ;
            sh:maxCount 1 ;
            sh:message "Felony charge must specify felony level from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sentencing:felonyLevel ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Felony charge must specify if it is a violent crime."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sentencing:violentCrime ] ;
    sh:targetClass cacontology-sentencing:FelonyCharge .

cacontology-sentencing:FloridaStateChargeShape a sh:NodeShape ;
    rdfs:label "Florida State Charge Shape"@en ;
    rdfs:comment "Validation shape for Florida state charge instances in ICAC cases."@en,
        "Validation shape for Florida state criminal charges."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:message "Florida state charge must specify Florida Statute reference (e.g., 'F.S. 847.0135')."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sentencing:floridaStatute ;
            sh:pattern "^F\\.S\\. [0-9]+\\.[0-9]+.*$" ],
        [ sh:datatype xsd:string ;
            sh:in ( "capital_felony" "life_felony" "first_degree_felony" "second_degree_felony" "third_degree_felony" "first_degree_misdemeanor" "second_degree_misdemeanor" ) ;
            sh:maxCount 1 ;
            sh:message "Florida charge must specify classification from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sentencing:chargeClassification ],
        [ sh:datatype rdf:langString ;
            sh:maxCount 1 ;
            sh:message "Florida charge should have a label."@en ;
            sh:minCount 0 ;
            sh:path rdfs:label ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:message "Florida statute should follow F.S. format (e.g., 'F.S. 847.0135')."@en ;
            sh:minCount 0 ;
            sh:path cacontology-sentencing:floridaStatute ;
            sh:pattern "^F\\.S\\. [0-9]+\\.[0-9]+.*$" ],
        [ sh:datatype xsd:string ;
            sh:in ( "Capital Felony" "Life Felony" "First Degree Felony" "Second Degree Felony" "Third Degree Felony" "First Degree Misdemeanor" "Second Degree Misdemeanor" ) ;
            sh:maxCount 1 ;
            sh:message "Charge classification must be from the allowed Florida list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-sentencing:chargeClassification ] ;
    sh:targetClass cacontology-sentencing:FloridaStateCharge .

cacontology-sentencing:FollowsGuidelinesShape a sh:PropertyShape ;
    sh:class cacontology-sentencing:SentencingGuidelines ;
    sh:description "Links sentencing to guidelines used" ;
    sh:minCount 0 ;
    sh:name "follows guidelines" ;
    sh:path cacontology-sentencing:followsGuidelines .

cacontology-sentencing:GeorgiaStateChargeShape a sh:NodeShape ;
    rdfs:label "Georgia State Charge Shape"@en ;
    rdfs:comment "Validation shape for Georgia state charge instances in CAC cases."@en ;
    sh:property [ sh:message "Georgia state charge should have an rdfs:label."@en ;
            sh:minCount 1 ;
            sh:path rdfs:label ] ;
    sh:targetClass cacontology-sentencing:GeorgiaStateCharge .

cacontology-sentencing:ImprisonmentSentenceShape a sh:NodeShape ;
    rdfs:label "Imprisonment Sentence Shape"@en ;
    rdfs:comment "Validation shape for imprisonment sentence instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "federal_prison" "state_prison" "county_jail" "minimum_security" "medium_security" "maximum_security" "supermax" ) ;
            sh:maxCount 1 ;
            sh:message "Imprisonment sentence must specify facility type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sentencing:facilityType ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Imprisonment sentence must specify parole eligibility."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sentencing:paroleEligibility ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 50.0 ;
            sh:message "Minimum time served must be between 0 and 50 years."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-sentencing:minimumServed ] ;
    sh:targetClass cacontology-sentencing:ImprisonmentSentence .

cacontology-sentencing:IncludesFineShape a sh:PropertyShape ;
    sh:class cacontology-sentencing:CriminalFine ;
    sh:description "Links sentencing to criminal fine" ;
    sh:minCount 0 ;
    sh:name "includes fine" ;
    sh:path cacontology-sentencing:includesFine .

cacontology-sentencing:IncludesRestitutionShape a sh:PropertyShape ;
    sh:class cacontology-sentencing:RestitutionOrder ;
    sh:description "Links sentencing to restitution order" ;
    sh:minCount 0 ;
    sh:name "includes restitution" ;
    sh:path cacontology-sentencing:includesRestitution .

cacontology-sentencing:JudgeRole a gufo:Role,
        owl:Class ;
    rdfs:label "Judge Role"@en ;
    rdfs:comment "Role of judge presiding over ICAC legal proceedings. Modeled as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf uco-role:Role .

cacontology-sentencing:JudicialSystemSituation a owl:Class ;
    rdfs:label "Judicial System Situation"@en ;
    rdfs:comment "Broader situation involving judicial system processing of ICAC cases. Modeled as gUFO Situation."@en ;
    rdfs:subClassOf gufo:Situation .

cacontology-sentencing:JuryRole a gufo:Role,
        owl:Class ;
    rdfs:label "Jury Role"@en ;
    rdfs:comment "Role of jury members in ICAC trial proceedings. Modeled as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf uco-role:Role .

cacontology-sentencing:LegalChargeShape a sh:NodeShape ;
    rdfs:label "Legal Charge Shape"@en ;
    rdfs:comment "Validation shape for legal charge instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 100 ;
            sh:message "Legal charge must specify statute reference (5-100 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path cacontology-sentencing:statuteReference ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 99.0 ;
            sh:message "Maximum penalty must be between 0 and 99 years."@en ;
            sh:minCount 1 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-sentencing:maximumPenalty ],
        [ sh:datatype xsd:string ;
            sh:in ( "guilty" "not_guilty" "no_contest" "alford_plea" "not_entered" ) ;
            sh:maxCount 1 ;
            sh:message "Plea entered must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-sentencing:pleaEntered ],
        [ sh:datatype xsd:string ;
            sh:in ( "felony" "misdemeanor" "infraction" "violation" "contempt" "federal_crime" ) ;
            sh:maxCount 1 ;
            sh:message "Legal charge must specify charge type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sentencing:chargeType ],
        [ sh:datatype xsd:string ;
            sh:in ( "class_a" "class_b" "class_c" "class_d" "class_e" "unclassified" "capital" ) ;
            sh:maxCount 1 ;
            sh:message "Legal charge must specify charge class from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sentencing:chargeClass ] ;
    sh:targetClass cacontology-sentencing:LegalCharge .

cacontology-sentencing:LegalProceedingShape a sh:NodeShape ;
    rdfs:label "Legal Proceeding Shape"@en ;
    rdfs:comment "Validation shape for legal proceeding instances, including pretrial bail status (e.g., held without bail in the Utah Christensen case)."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "released_on_bail" "held_without_bail" "released_on_own_recognizance" "bail_denied" "bail_revoked" ) ;
            sh:maxCount 1 ;
            sh:message "Bail status, when provided, must be one of: released_on_bail, held_without_bail, released_on_own_recognizance, bail_denied, bail_revoked."@en ;
            sh:minCount 0 ;
            sh:path cacontology-sentencing:bailStatus ] ;
    sh:targetClass cacontology-sentencing:LegalProceeding .

cacontology-sentencing:LifeImprisonmentSentence a owl:Class ;
    rdfs:label "Life Imprisonment Sentence"@en ;
    dcterms:source "United States v. McCormack (9th Cir. 2017) opinion (CourtListener)."@en ;
    rdfs:comment "Prison sentence of life imprisonment (typically without a fixed term duration). Modeled as gUFO Object."@en ;
    rdfs:seeAlso <https://www.courtlistener.com/opinion/8700418/united-states-v-mccormack/> ;
    rdfs:subClassOf cacontology-sentencing:PrisonSentence .

cacontology-sentencing:LiveStreamingOffense a owl:Class ;
    rdfs:label "Live Streaming Offense"@en ;
    rdfs:comment "Offense involving live streaming of child abuse, often carrying severe sentences. Modeled as gUFO Object."@en ;
    rdfs:subClassOf cacontology-sentencing:CommonwealthChildAbuseOffense .

cacontology-sentencing:MandatoryMinimumSentencing a owl:Class ;
    rdfs:label "Mandatory Minimum Sentencing"@en ;
    rdfs:comment "Sentencing under mandatory minimum provisions for Commonwealth child sexual abuse offenses. Modeled as gUFO Object."@en ;
    rdfs:subClassOf cacontology-sentencing:PrisonSentence .

cacontology-sentencing:MonetaryPenalty a owl:Class ;
    rdfs:label "Monetary Penalty"@en ;
    rdfs:comment "Financial penalty including fines, restitution, or forfeiture. Modeled as gUFO Object."@en ;
    rdfs:subClassOf cacontology-sentencing:CriminalSentence .

cacontology-sentencing:OnlineEnticement a owl:Class ;
    rdfs:label "Online Enticement"@en ;
    rdfs:comment "Charge for online enticement of minors for illegal sexual activity. Modeled as gUFO Object."@en ;
    rdfs:subClassOf cacontology-sentencing:FederalCharge .

cacontology-sentencing:PaymentDeadlineValidationShape a sh:NodeShape ;
    rdfs:label "Payment Deadline Validation Shape"@en ;
    rdfs:comment "Validates payment deadline consistency."@en ;
    sh:sparql [ sh:message "Payment deadline should be in the future when specified."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-sentencing:paymentDeadline ?deadline .
                FILTER (?deadline <= NOW())
            }
        """ ] ;
    sh:targetClass cacontology-sentencing:CriminalFine .

cacontology-sentencing:PleaBargaining a owl:Class ;
    rdfs:label "Plea Bargaining"@en ;
    rdfs:comment "Negotiation process between prosecution and defense for plea agreement. Modeled as gUFO Event."@en ;
    rdfs:subClassOf cacontology-sentencing:LegalProceeding .

cacontology-sentencing:PostConvictionPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Post-Conviction Phase"@en ;
    rdfs:comment "Phase after conviction including appeals and compliance. Modeled as anti-rigid gUFO Phase."@en ;
    rdfs:subClassOf cacontology-sentencing:LegalProceeding .

cacontology-sentencing:PreTrialPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Pre-Trial Phase"@en ;
    rdfs:comment "Phase before trial including arraignment and plea bargaining. Modeled as anti-rigid gUFO Phase."@en ;
    rdfs:subClassOf cacontology-sentencing:LegalProceeding .

cacontology-sentencing:ProbationOfficerRole a gufo:Role,
        owl:Class ;
    rdfs:label "Probation Officer Role"@en ;
    rdfs:comment "Role of probation officer supervising ICAC offenders. Modeled as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf uco-role:Role .

cacontology-sentencing:ProbationSentenceShape a sh:NodeShape ;
    rdfs:label "Probation Sentence Shape"@en ;
    rdfs:comment "Validation shape for probation sentence instances."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 50 ;
            sh:message "Probation sentence must have between 1 and 50 conditions."@en ;
            sh:minCount 1 ;
            sh:minInclusive 1 ;
            sh:path cacontology-sentencing:probationConditions ],
        [ sh:datatype xsd:string ;
            sh:in ( "unsupervised" "administrative" "standard" "intensive" "electronic_monitoring" "residential" ) ;
            sh:maxCount 1 ;
            sh:message "Probation sentence must specify supervision level from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sentencing:supervisionLevel ],
        [ sh:datatype xsd:string ;
            sh:in ( "monthly" "bi_weekly" "weekly" "daily" "as_directed" "none" ) ;
            sh:maxCount 1 ;
            sh:message "Probation sentence must specify reporting frequency from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sentencing:reportingFrequency ] ;
    sh:targetClass cacontology-sentencing:ProbationSentence .

cacontology-sentencing:ProfessionalLicenseSurrenderConditionShape a sh:NodeShape ;
    rdfs:label "Professional License Surrender Condition Shape"@en ;
    rdfs:comment "Validation shape for conditions requiring surrender of a professional license."@en ;
    sh:property [ sh:class cacontology-registry:ProfessionalLicense ;
            sh:message "License surrender condition must reference at least one ProfessionalLicense via requiresLicenseSurrender."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sentencing:requiresLicenseSurrender ],
        [ sh:class uco-identity:Person ;
            sh:message "License surrender condition must specify the person it applies to via conditionAppliesToPerson."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sentencing:conditionAppliesToPerson ] ;
    sh:targetClass cacontology-sentencing:ProfessionalLicenseSurrenderCondition .

cacontology-sentencing:ProsecutorRole a gufo:Role,
        owl:Class ;
    rdfs:label "Prosecutor Role"@en ;
    rdfs:comment "Role of prosecutor handling ICAC criminal charges. Modeled as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf uco-role:Role .

cacontology-sentencing:RequiresTreatmentShape a sh:PropertyShape ;
    sh:class cacontology-sentencing:TreatmentOrder ;
    sh:description "Links sentencing to treatment order" ;
    sh:minCount 0 ;
    sh:name "requires treatment" ;
    sh:path cacontology-sentencing:requiresTreatment .

cacontology-sentencing:RestitutionOrderShape a sh:NodeShape ;
    rdfs:label "Restitution Order Shape"@en ;
    rdfs:comment "Validation shape for restitution order instances."@en ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 10000000.0 ;
            sh:message "Restitution amount must be between $1 and $10,000,000."@en ;
            sh:minCount 1 ;
            sh:minInclusive 1.0 ;
            sh:path cacontology-sentencing:restitutionAmount ],
        [ sh:datatype xsd:string ;
            sh:in ( "lump_sum" "monthly_payments" "quarterly_payments" "annual_payments" "income_based" "deferred" ) ;
            sh:maxCount 1 ;
            sh:message "Restitution order must specify payment schedule from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sentencing:paymentSchedule ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 1000 ;
            sh:message "Restitution order must specify victim count between 1 and 1000."@en ;
            sh:minCount 1 ;
            sh:minInclusive 1 ;
            sh:path cacontology-sentencing:victimCount ],
        [ sh:datatype xsd:string ;
            sh:in ( "pending" "current" "delinquent" "completed" "defaulted" "modified" ) ;
            sh:maxCount 1 ;
            sh:message "Payment status must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-sentencing:paymentStatus ] ;
    sh:targetClass cacontology-sentencing:RestitutionOrder .

cacontology-sentencing:RestitutionValidationShape a sh:NodeShape ;
    rdfs:label "Restitution Validation Shape"@en ;
    rdfs:comment "Validates restitution order consistency."@en ;
    sh:sparql [ sh:message "Restitution amount should be reasonable for victim count."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-sentencing:restitutionAmount ?amount ;
                      cacontology-sentencing:victimCount ?victims .
                FILTER (?amount > (?victims * 100000))
            }
        """ ] ;
    sh:targetClass cacontology-sentencing:RestitutionOrder .

cacontology-sentencing:ResultsFromChargeShape a sh:PropertyShape ;
    sh:class cacontology-sentencing:LegalCharge ;
    sh:description "Links sentencing outcome to legal charge" ;
    sh:minCount 1 ;
    sh:name "results from charge" ;
    sh:path cacontology-sentencing:resultsFromCharge .

cacontology-sentencing:SentenceDurationValidationShape a sh:NodeShape ;
    rdfs:label "Sentence Duration Validation Shape"@en ;
    rdfs:comment "Validates sentence duration consistency."@en ;
    sh:sparql [ sh:message "Imprisonment sentences should have duration specified."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-sentencing:sentenceType "imprisonment" .
                FILTER NOT EXISTS {
                    $this cacontology-sentencing:sentenceDuration ?duration .
                }
            }
        """ ] ;
    sh:targetClass cacontology-sentencing:SentencingOutcome .

cacontology-sentencing:SentencingCrossReferenceShape a sh:NodeShape ;
    rdfs:label "Sentencing Cross Reference Shape"@en ;
    rdfs:comment "Validates cross-references between sentencing and related entities."@en ;
    sh:sparql [ sh:message "Sentencing outcome must result from at least one legal charge."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-sentencing:SentencingOutcome .
                FILTER NOT EXISTS {
                    $this cacontology-sentencing:resultsFromCharge ?charge .
                }
            }
        """ ] ;
    sh:targetClass cacontology-sentencing:SentencingOutcome .

cacontology-sentencing:SentencingGuidelinesShape a sh:NodeShape ;
    rdfs:label "Sentencing Guidelines Shape"@en ;
    rdfs:comment "Validation shape for sentencing guidelines instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "federal_guidelines" "state_guidelines" "advisory_guidelines" "mandatory_minimums" "judicial_discretion" ) ;
            sh:maxCount 1 ;
            sh:message "Sentencing guidelines must specify guideline system from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sentencing:guidelineSystem ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 43 ;
            sh:message "Base offense level must be between 1 and 43."@en ;
            sh:minCount 1 ;
            sh:minInclusive 1 ;
            sh:path cacontology-sentencing:baseOffenseLevel ],
        [ sh:datatype xsd:string ;
            sh:in ( "I" "II" "III" "IV" "V" "VI" ) ;
            sh:maxCount 1 ;
            sh:message "Criminal history category must be from I to VI."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sentencing:criminalHistoryCategory ],
        [ sh:datatype xsd:integer ;
            sh:maxCount 1 ;
            sh:maxInclusive 20 ;
            sh:message "Adjustment points must be between -10 and 20."@en ;
            sh:minCount 0 ;
            sh:minInclusive -10 ;
            sh:path cacontology-sentencing:adjustmentPoints ] ;
    sh:targetClass cacontology-sentencing:SentencingGuidelines .

cacontology-sentencing:SentencingHearing a owl:Class ;
    rdfs:label "Sentencing Hearing"@en ;
    rdfs:comment "Court proceeding where sentence is determined and imposed. Modeled as gUFO Event."@en ;
    rdfs:subClassOf cacontology-sentencing:LegalProceeding .

cacontology-sentencing:SentencingOutcomeShape a sh:NodeShape ;
    rdfs:label "Sentencing Outcome Shape"@en ;
    rdfs:comment "Validation shape for sentencing outcome instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "imprisonment" "probation" "suspended_sentence" "community_service" "fine" "restitution" "treatment_order" "mixed_sentence" ) ;
            sh:maxCount 1 ;
            sh:message "Sentencing outcome must specify sentence type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sentencing:sentenceType ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 50.0 ;
            sh:message "Sentence duration must be between 0 and 50 years."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-sentencing:sentenceDuration ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Sentencing outcome must specify sentence date."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sentencing:sentenceDate ],
        [ sh:datatype xsd:string ;
            sh:in ( "federal" "state" "local" "military" "tribal" "international" ) ;
            sh:maxCount 1 ;
            sh:message "Sentencing outcome must specify jurisdiction from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sentencing:jurisdiction ],
        [ sh:datatype xsd:string ;
            sh:in ( "no_appeal" "appeal_pending" "appeal_denied" "appeal_granted" "sentence_modified" "conviction_overturned" ) ;
            sh:maxCount 1 ;
            sh:message "Appeal status must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-sentencing:appealStatus ] ;
    sh:targetClass cacontology-sentencing:SentencingOutcome .

cacontology-sentencing:SentencingPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Sentencing Phase"@en ;
    rdfs:comment "Phase focused on sentencing determination and imposition. Modeled as anti-rigid gUFO Phase."@en ;
    rdfs:subClassOf cacontology-sentencing:LegalProceeding .

cacontology-sentencing:SentencingReasonablenessIssue a owl:Class ;
    rdfs:label "Sentencing Reasonableness Issue"@en ;
    dcterms:source "United States v. McCormack (9th Cir. 2017) opinion (CourtListener)."@en ;
    rdfs:comment "Appellate issue challenging the procedural and/or substantive reasonableness of a sentence (e.g., under 18 U.S.C. § 3553(a)). Modeled as gUFO Object."@en ;
    rdfs:seeAlso <https://www.courtlistener.com/opinion/8700418/united-states-v-mccormack/> ;
    rdfs:subClassOf cacontology-sentencing:AppellateIssue .

cacontology-sentencing:SexTrafficking a owl:Class ;
    rdfs:label "Sex Trafficking"@en ;
    rdfs:comment "Charge for sex trafficking of minors. Modeled as gUFO Object."@en ;
    rdfs:subClassOf cacontology-sentencing:FederalCharge .

cacontology-sentencing:SextortionCharge a owl:Class ;
    rdfs:label "Sextortion Charge"@en ;
    rdfs:comment "Criminal charge specifically related to sextortion involving sexual extortion of children through online blackmail. Modeled as gUFO Object."@en ;
    rdfs:subClassOf cacontology-sentencing:FederalCharge .

cacontology-sentencing:SexualExploitationOfMinorChargeShape a sh:NodeShape ;
    rdfs:label "Sexual Exploitation of a Minor (GA) Charge Shape"@en ;
    rdfs:comment "Validation shape for Georgia sexual exploitation of a minor charge instances."@en ;
    sh:property [ sh:message "Charge instance should have an rdfs:label."@en ;
            sh:minCount 1 ;
            sh:path rdfs:label ] ;
    sh:targetClass cacontology-sentencing:SexualExploitationOfMinorCharge .

cacontology-sentencing:SolicitingExplicitMaterial a owl:Class ;
    rdfs:label "Soliciting Explicit Material"@en ;
    rdfs:comment "Offense of soliciting sexually explicit material from children (e.g., from 10 foreign children via social media). Modeled as gUFO Object."@en ;
    rdfs:subClassOf cacontology-sentencing:CommonwealthChildAbuseOffense .

cacontology-sentencing:StandardOfReviewShape a sh:NodeShape ;
    rdfs:label "Standard of Review Shape"@en ;
    rdfs:comment "Validation shape for standards of review."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "abuse_of_discretion" "de_novo" "clear_error" "plain_error" "substantial_evidence" "reasonableness" "other" ) ;
            sh:maxCount 1 ;
            sh:message "Standard of review type must be one of: abuse_of_discretion, de_novo, clear_error, plain_error, substantial_evidence, reasonableness, other."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sentencing:standardOfReviewType ],
        [ sh:message "Standard of review should have an rdfs:label."@en ;
            sh:minCount 1 ;
            sh:path rdfs:label ] ;
    sh:targetClass cacontology-sentencing:StandardOfReview .

cacontology-sentencing:SufficiencyOfEvidenceIssue a owl:Class ;
    rdfs:label "Sufficiency of Evidence Issue"@en ;
    dcterms:source "United States v. McCormack (9th Cir. 2017) opinion (CourtListener)."@en ;
    rdfs:comment "Appellate issue challenging whether the evidence was sufficient to sustain a conviction under the applicable legal standard. Modeled as gUFO Object."@en ;
    rdfs:seeAlso <https://www.courtlistener.com/opinion/8700418/united-states-v-mccormack/> ;
    rdfs:subClassOf cacontology-sentencing:AppellateIssue .

cacontology-sentencing:SupervisedRelease a owl:Class ;
    rdfs:label "Supervised Release"@en ;
    rdfs:comment "Period of supervision following completion of prison sentence. Modeled as gUFO Object."@en ;
    rdfs:subClassOf cacontology-sentencing:CriminalSentence .

cacontology-sentencing:TemporalValidationShape a sh:NodeShape ;
    rdfs:label "Temporal Validation Shape"@en ;
    rdfs:comment "Validates temporal consistency in conviction records."@en ;
    sh:sparql [ sh:message "Conviction date must be before or equal to sentence date."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-sentencing:convictionDate ?convictionDate .
                ?sentence cacontology-sentencing:resultsFromCharge ?charge ;
                         cacontology-sentencing:sentenceDate ?sentenceDate .
                ?charge cacontology-sentencing:convictionRecord $this .
                FILTER (?convictionDate > ?sentenceDate)
            }
        """ ] ;
    sh:targetClass cacontology-sentencing:ConvictionRecord .

cacontology-sentencing:TraffickingOfPersonsForSexualServitudeChargeShape a sh:NodeShape ;
    rdfs:label "Trafficking of Persons for Sexual Servitude (GA) Charge Shape"@en ;
    rdfs:comment "Validation shape for Georgia trafficking-for-sexual-servitude charge instances."@en ;
    sh:property [ sh:message "Charge instance should have an rdfs:label."@en ;
            sh:minCount 1 ;
            sh:path rdfs:label ] ;
    sh:targetClass cacontology-sentencing:TraffickingOfPersonsForSexualServitudeCharge .

cacontology-sentencing:TravelingToMeetAfterComputerLureShape a sh:NodeShape ;
    rdfs:label "Traveling To Meet After Computer Lure Shape"@en,
        "Traveling to Meet After Computer Lure Shape"@en ;
    rdfs:comment "Validation shape for F.S. 847.0135(4) traveling to meet a minor after computer lure charges."@en,
        "Validation shape for Florida traveling to meet charges."@en ;
    sh:property [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Must specify whether actual travel occurred."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sentencing:travelOccurred ],
        [ sh:datatype xsd:boolean ;
            sh:hasValue true ;
            sh:maxCount 1 ;
            sh:message "Electronic communication must have been used for this charge."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sentencing:electronicCommunicationUsed ],
        [ sh:datatype rdf:langString ;
            sh:maxCount 1 ;
            sh:message "Traveling charge should have a label."@en ;
            sh:minCount 0 ;
            sh:path rdfs:label ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "May specify if travel to the location occurred."@en ;
            sh:minCount 0 ;
            sh:path cacontology-sentencing:travelOccurred ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "May specify if electronic communication was used."@en ;
            sh:minCount 0 ;
            sh:path cacontology-sentencing:electronicCommunicationUsed ] ;
    sh:targetClass cacontology-sentencing:TravelingToMeetAfterComputerLure .

cacontology-sentencing:TreatmentOrderShape a sh:NodeShape ;
    rdfs:label "Treatment Order Shape"@en ;
    rdfs:comment "Validation shape for treatment order instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "psychological_counseling" "sex_offender_treatment" "substance_abuse_treatment" "anger_management" "mental_health_treatment" "cognitive_behavioral_therapy" ) ;
            sh:maxCount 1 ;
            sh:message "Treatment order must specify treatment type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sentencing:treatmentType ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 260.0 ;
            sh:message "Treatment duration must be between 1 and 260 weeks (5 years)."@en ;
            sh:minCount 1 ;
            sh:minInclusive 1.0 ;
            sh:path cacontology-sentencing:treatmentDuration ],
        [ sh:datatype xsd:string ;
            sh:in ( "court_approved" "state_certified" "private_practice" "institutional" "community_based" ) ;
            sh:maxCount 1 ;
            sh:message "Treatment order must specify treatment provider from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sentencing:treatmentProvider ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Treatment order must specify if compliance is required."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sentencing:complianceRequired ] ;
    sh:targetClass cacontology-sentencing:TreatmentOrder .

cacontology-sentencing:TrialPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Trial Phase"@en ;
    rdfs:comment "Active trial phase with proceedings and evidence presentation. Modeled as anti-rigid gUFO Phase."@en ;
    rdfs:subClassOf cacontology-sentencing:LegalProceeding .

cacontology-sentencing:TrialProceeding a owl:Class ;
    rdfs:label "Trial Proceeding"@en ;
    rdfs:comment "Formal trial process with jury or judge determining guilt or innocence. Modeled as gUFO Event."@en ;
    rdfs:subClassOf cacontology-sentencing:LegalProceeding .

cacontology-sentencing:VictimRole a gufo:Role,
        owl:Class ;
    rdfs:label "Victim Role"@en ;
    rdfs:comment "Role of victim in ICAC legal proceedings. Modeled as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf uco-role:Role ;
    owl:equivalentClass cacontology-gufo:VictimRole .

cacontology-sentencing:appliesTo a owl:ObjectProperty ;
    rdfs:label "applies to"@en ;
    rdfs:comment "Links criminal sentence to the charge it addresses."@en ;
    rdfs:domain cacontology-sentencing:CriminalSentence ;
    rdfs:range cacontology-sentencing:CriminalCharge .

cacontology-sentencing:currentPhase a owl:ObjectProperty ;
    rdfs:label "current phase"@en ;
    rdfs:comment "The current active phase of the legal proceeding."@en ;
    rdfs:domain cacontology-sentencing:LegalProceeding ;
    rdfs:range gufo:Phase .

cacontology-sentencing:hasCharge a owl:ObjectProperty ;
    rdfs:label "has charge"@en ;
    rdfs:comment "Links legal proceeding to criminal charges involved."@en ;
    rdfs:domain cacontology-sentencing:LegalProceeding ;
    rdfs:range cacontology-sentencing:CriminalCharge .

cacontology-sentencing:hasLegalPhase a owl:ObjectProperty ;
    rdfs:label "has legal phase"@en ;
    rdfs:comment "Links legal proceeding to its phases."@en ;
    rdfs:domain cacontology-sentencing:LegalProceeding ;
    rdfs:range gufo:Phase .

cacontology-sentencing:hasPhaseBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has phase begin point"@en ;
    rdfs:comment "Temporal begin point for legal phase."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-sentencing:hasPhaseEndPoint a owl:DatatypeProperty ;
    rdfs:label "has phase end point"@en ;
    rdfs:comment "Temporal end point for legal phase."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-sentencing:hasProceedingBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has proceeding begin point"@en ;
    rdfs:comment "Temporal begin point for legal proceeding."@en ;
    rdfs:domain cacontology-sentencing:LegalProceeding ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-sentencing:hasProceedingEndPoint a owl:DatatypeProperty ;
    rdfs:label "has proceeding end point"@en ;
    rdfs:comment "Temporal end point for legal proceeding."@en ;
    rdfs:domain cacontology-sentencing:LegalProceeding ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-sentencing:hasRole a owl:ObjectProperty ;
    rdfs:label "has role"@en ;
    rdfs:comment "Links individual to their role in legal proceeding."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range gufo:Role .

cacontology-sentencing:hasRoleBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has role begin point"@en ;
    rdfs:comment "Temporal begin point for legal role."@en ;
    rdfs:domain gufo:Role ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-sentencing:hasRoleEndPoint a owl:DatatypeProperty ;
    rdfs:label "has role end point"@en ;
    rdfs:comment "Temporal end point for legal role."@en ;
    rdfs:domain gufo:Role ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-sentencing:hasSentenceBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has sentence begin point"@en ;
    rdfs:comment "Temporal begin point for sentence implementation."@en ;
    rdfs:domain cacontology-sentencing:CriminalSentence ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-sentencing:hasSentenceEndPoint a owl:DatatypeProperty ;
    rdfs:label "has sentence end point"@en ;
    rdfs:comment "Temporal end point for sentence completion."@en ;
    rdfs:domain cacontology-sentencing:CriminalSentence ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-sentencing:involvesChargeCount a owl:DatatypeProperty ;
    rdfs:label "involves charge count"@en ;
    rdfs:comment "Number of charges involved in legal situation."@en ;
    rdfs:domain cacontology-sentencing:LegalCaseSituation ;
    rdfs:range xsd:integer .

cacontology-sentencing:involvesParticipantCount a owl:DatatypeProperty ;
    rdfs:label "involves participant count"@en ;
    rdfs:comment "Number of participants involved in legal situation."@en ;
    rdfs:domain gufo:Situation ;
    rdfs:range xsd:integer .

cacontology-sentencing:participatesInProceeding a owl:ObjectProperty ;
    rdfs:label "participates in proceeding"@en ;
    rdfs:comment "Links role to legal proceeding participated in."@en ;
    rdfs:domain gufo:Role ;
    rdfs:range cacontology-sentencing:LegalProceeding .

cacontology-sentencing:phaseDuration a owl:DatatypeProperty ;
    rdfs:label "phase duration"@en ;
    rdfs:comment "Duration of legal phase."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:duration .

cacontology-sentencing:proceedingDuration a owl:DatatypeProperty ;
    rdfs:label "proceeding duration"@en ;
    rdfs:comment "Duration of legal proceeding from start to completion."@en ;
    rdfs:domain cacontology-sentencing:LegalProceeding ;
    rdfs:range xsd:duration .

cacontology-sentencing:raisesIssue a owl:ObjectProperty ;
    rdfs:label "raises issue"@en ;
    rdfs:comment "Links an appeal process to an appellate issue raised for review."@en ;
    rdfs:domain cacontology-sentencing:AppealProcess ;
    rdfs:range cacontology-sentencing:AppellateIssue .

cacontology-sentencing:resultsSentence a owl:ObjectProperty ;
    rdfs:label "results sentence"@en ;
    rdfs:comment "Links legal proceeding to resulting criminal sentence."@en ;
    rdfs:domain cacontology-sentencing:LegalProceeding ;
    rdfs:range cacontology-sentencing:CriminalSentence .

cacontology-sentencing:roleDuration a owl:DatatypeProperty ;
    rdfs:label "role duration"@en ;
    rdfs:comment "Duration of individual's legal role."@en ;
    rdfs:domain gufo:Role ;
    rdfs:range xsd:duration .

cacontology-sentencing:situationComplexity a owl:DatatypeProperty ;
    rdfs:label "situation complexity"@en ;
    rdfs:comment "Complexity level of legal situation (1-5 scale)."@en ;
    rdfs:domain gufo:Situation ;
    rdfs:range xsd:integer .

cacontology-sentencing:transitionsToPhase a owl:ObjectProperty ;
    rdfs:label "transitions to phase"@en ;
    rdfs:comment "Links one legal phase to the next phase in sequence."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range gufo:Phase .

cacontology-registry:AddressHistory a owl:Class ;
    rdfs:label "Address History"@en ;
    rdfs:comment "Historical record of registered addresses."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-registry:AddressVerificationCrossReferenceShape a sh:NodeShape ;
    rdfs:label "Address Verification Cross Reference Shape"@en ;
    rdfs:comment "Validates that registered offenders have current address information."@en ;
    sh:sparql [ sh:message "Registered sex offender must have at least one registered address."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-registry:RegisteredSexOffender .
                FILTER NOT EXISTS {
                    $this cacontology-registry:residesAt ?address .
                    ?address a cacontology-registry:RegisteredAddress .
                }
            }
        """ ] ;
    sh:targetClass cacontology-registry:RegisteredSexOffender .

cacontology-registry:AgeValidationShape a sh:NodeShape ;
    rdfs:label "Age Validation Shape"@en ;
    rdfs:comment "Validates age-related constraints for registered offenders."@en ;
    sh:sparql [ sh:message "Offender must be at least 18 years old at time of registration."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-registry:dateOfBirth ?dob ;
                      cacontology-registry:hasRegistrationRecord ?record .
                ?record cacontology-registry:registrationDate ?regDate .
                BIND(YEAR(?regDate) - YEAR(?dob) AS ?age)
                FILTER (?age < 18)
            }
        """ ] ;
    sh:targetClass cacontology-registry:RegisteredSexOffender .

cacontology-registry:CommunityNotification a owl:Class ;
    rdfs:label "Community Notification"@en ;
    rdfs:comment "Notification to community about registered sex offender."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-registry:ComplianceViolationShape a sh:NodeShape ;
    rdfs:label "Compliance Violation Shape"@en ;
    rdfs:comment "Validation shape for compliance violation instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 1000 ;
            sh:message "Violation must have a description (10-1000 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 10 ;
            sh:path uco-core:description ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Violation must specify occurrence time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ],
        [ sh:datatype xsd:string ;
            sh:in ( "failure_to_register" "false_information" "late_update" "residency_restriction_violation" ) ;
            sh:maxCount 1 ;
            sh:message "Violation category, when provided, must be one of: failure_to_register, false_information, late_update, residency_restriction_violation."@en ;
            sh:minCount 0 ;
            sh:path cacontology-registry:violationCategory ] ;
    sh:targetClass cacontology-registry:ComplianceViolation .

cacontology-registry:ContactRestriction a owl:Class ;
    rdfs:label "Contact Restriction"@en ;
    rdfs:comment "Restriction on contact with certain individuals or groups."@en ;
    rdfs:subClassOf cacontology-registry:RegistrationRestriction .

cacontology-registry:ConvictingOffenseShape a sh:NodeShape ;
    rdfs:label "Convicting Offense Shape"@en ;
    rdfs:comment "Validation shape for convicting offense instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 1000 ;
            sh:message "Offense must have a description (10-1000 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 10 ;
            sh:path cacontology-registry:offenseDescription ],
        [ sh:datatype xsd:date ;
            sh:maxCount 1 ;
            sh:message "Offense must specify conviction date."@en ;
            sh:minCount 1 ;
            sh:path cacontology-registry:convictionDate ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 100 ;
            sh:message "Sentence length should be 1-100 characters when specified."@en ;
            sh:minCount 0 ;
            sh:minLength 1 ;
            sh:path cacontology-registry:sentenceLength ] ;
    sh:targetClass cacontology-registry:ConvictingOffense .

cacontology-registry:CourtOrder a owl:Class ;
    rdfs:label "Court Order"@en ;
    rdfs:comment "Court order mandating sex offender registration."@en ;
    rdfs:subClassOf uco-observable:ObservableObject .

cacontology-registry:DataQualityShape a sh:NodeShape ;
    rdfs:label "Data Quality Shape"@en ;
    rdfs:comment "Validates data quality for registry entities."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Creation time should be specified when available."@en ;
            sh:minCount 0 ;
            sh:path uco-core:createdTime ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Modification time should be specified when available."@en ;
            sh:minCount 0 ;
            sh:path uco-core:modifiedTime ] ;
    sh:targetClass cacontology-registry:ConvictingOffense,
        cacontology-registry:RegisteredSexOffender,
        cacontology-registry:RegistrationRecord .

cacontology-registry:EducationInformationShape a sh:NodeShape ;
    rdfs:label "Education Information Shape"@en ;
    rdfs:comment "Validation shape for education information instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Education must specify institution name (2-200 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 2 ;
            sh:path uco-core:name ] ;
    sh:targetClass cacontology-registry:EducationInformation .

cacontology-registry:EmploymentInformationShape a sh:NodeShape ;
    rdfs:label "Employment Information Shape"@en ;
    rdfs:comment "Validation shape for employment information instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Employment must specify employer name (2-200 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 2 ;
            sh:path uco-core:name ],
        [ sh:datatype xsd:date ;
            sh:maxCount 1 ;
            sh:message "Employment may specify start date."@en ;
            sh:minCount 0 ;
            sh:path uco-core:startTime ] ;
    sh:targetClass cacontology-registry:EmploymentInformation .

cacontology-registry:EmploymentRestriction a owl:Class ;
    rdfs:label "Employment Restriction"@en ;
    rdfs:comment "Restriction on types of employment."@en ;
    rdfs:subClassOf cacontology-registry:RegistrationRestriction .

cacontology-registry:FailureToRegisterOffense a owl:Class ;
    rdfs:label "Failure to Register Offense"@en ;
    rdfs:comment "Criminal offense for failing to register or update required information in a sex offender registry. Typically serves as a registry-triggering or enhancing offense for compliance analytics."@en ;
    rdfs:subClassOf cacontology-registry:ConvictingOffense .

cacontology-registry:FalseInformationRegistrationOffense a owl:Class ;
    rdfs:label "False Information Registration Offense"@en ;
    rdfs:comment "Criminal offense for knowingly providing false or misleading information in connection with sex offender registration (e.g., false address, contact information, or online identifiers)."@en ;
    rdfs:subClassOf cacontology-registry:ConvictingOffense .

cacontology-registry:GeographicRestriction a owl:Class ;
    rdfs:label "Geographic Restriction"@en ;
    rdfs:comment "Geographic area where offender is restricted from being."@en ;
    rdfs:subClassOf cacontology-registry:RegistrationRestriction .

cacontology-registry:IdentifyingMark a owl:Class ;
    rdfs:label "Identifying Mark"@en ;
    rdfs:comment "Distinctive physical mark (scar, tattoo, birthmark) for identification."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-registry:InternetInformation a owl:Class ;
    rdfs:label "Internet Information"@en ;
    rdfs:comment "Internet-related information for registered sex offender."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-registry:InternetRestriction a owl:Class ;
    rdfs:label "Internet Restriction"@en ;
    rdfs:comment "Restriction on internet use or online activities."@en ;
    rdfs:subClassOf cacontology-registry:RegistrationRestriction .

cacontology-registry:InternetServiceProvider a owl:Class ;
    rdfs:label "Internet Service Provider"@en ;
    rdfs:comment "Internet service provider used by registered sex offender."@en ;
    rdfs:subClassOf uco-identity:Organization .

cacontology-registry:NotificationTier a owl:Class ;
    rdfs:label "Notification Tier"@en ;
    rdfs:comment "Classification tier determining level of community notification required."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-registry:OffenderProfileShape a sh:NodeShape ;
    rdfs:label "Offender Profile Shape"@en ;
    rdfs:comment "Validation shape for offender profile instances."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Profile must specify creation time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:createdTime ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Profile may specify last update time."@en ;
            sh:minCount 0 ;
            sh:path cacontology-registry:lastUpdate ] ;
    sh:targetClass cacontology-registry:OffenderProfile .

cacontology-registry:OffenderRegistrationCrossReferenceShape a sh:NodeShape ;
    rdfs:label "Offender Registration Cross Reference Shape"@en ;
    rdfs:comment "Validates that registered offenders have required registration records."@en ;
    sh:sparql [ sh:message "Registered sex offender must have at least one registration record."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-registry:RegisteredSexOffender .
                FILTER NOT EXISTS {
                    $this cacontology-registry:hasRegistrationRecord ?record .
                    ?record a cacontology-registry:RegistrationRecord .
                }
            }
        """ ] ;
    sh:targetClass cacontology-registry:RegisteredSexOffender .

cacontology-registry:OffenseClassification a owl:Class ;
    rdfs:label "Offense Classification"@en ;
    rdfs:comment "Classification of sexual offense (felony/misdemeanor, degree, special categories)."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-registry:Photograph a owl:Class ;
    rdfs:label "Photograph"@en ;
    rdfs:comment "Official photograph of registered sex offender."@en ;
    rdfs:subClassOf uco-observable:ObservableObject .

cacontology-registry:PhysicalDescriptionShape a sh:NodeShape ;
    rdfs:label "Physical Description Shape"@en ;
    rdfs:comment "Validation shape for physical description instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:message "Height must be in format X'XX\" or XXX cm when specified."@en ;
            sh:minCount 0 ;
            sh:path cacontology-registry:height ;
            sh:pattern "^[0-9]'[0-9]{1,2}\"$|^[0-9]{2,3} cm$" ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:message "Weight must be in format XXX lbs or XXX kg when specified."@en ;
            sh:minCount 0 ;
            sh:path cacontology-registry:weight ;
            sh:pattern "^[0-9]{2,3} lbs$|^[0-9]{2,3} kg$" ],
        [ sh:datatype xsd:string ;
            sh:in ( "brown" "blue" "green" "hazel" "gray" "black" "unknown" ) ;
            sh:maxCount 1 ;
            sh:message "Eye color must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-registry:eyeColor ],
        [ sh:datatype xsd:string ;
            sh:in ( "black" "brown" "blonde" "red" "gray" "white" "bald" "unknown" ) ;
            sh:maxCount 1 ;
            sh:message "Hair color must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-registry:hairColor ],
        [ sh:datatype xsd:string ;
            sh:in ( "white" "black" "hispanic" "asian" "native_american" "pacific_islander" "other" "unknown" ) ;
            sh:maxCount 1 ;
            sh:message "Race must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-registry:race ] ;
    sh:targetClass cacontology-registry:PhysicalDescription .

cacontology-registry:PrimaryResidenceShape a sh:NodeShape ;
    rdfs:label "Primary Residence Shape"@en ;
    rdfs:comment "Validation shape for primary residence instances."@en ;
    sh:property [ sh:datatype xsd:date ;
            sh:maxCount 1 ;
            sh:message "Primary residence must specify start date."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ] ;
    sh:targetClass cacontology-registry:PrimaryResidence .

cacontology-registry:PublicWebsite a owl:Class ;
    rdfs:label "Public Website"@en ;
    rdfs:comment "Public website for searching sex offender registry information."@en ;
    rdfs:subClassOf uco-observable:ObservableObject .

cacontology-registry:RecidivismPostRegistrationBusinessRule a sh:NodeShape ;
    rdfs:label "Recidivism Post-Registration Business Rule"@en ;
    rdfs:comment "Business rule: a recidivist sex offender SHOULD have at least one postRegistrationEvent linked to post-registration abuse/CSAM incidents."@en ;
    sh:sparql [ sh:message "Recidivist sex offenders should have at least one postRegistrationEvent representing post-registration abuse or CSAM incidents."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-registry:RecidivistSexOffender .
                FILTER NOT EXISTS {
                    $this cacontology-registry:postRegistrationEvent ?event .
                }
            }
        """ ] ;
    sh:targetClass cacontology-registry:RecidivistSexOffender .

cacontology-registry:RecidivistSexOffenderShape a sh:NodeShape ;
    rdfs:label "Recidivist Sex Offender Shape"@en ;
    rdfs:comment "Validation shape for recidivist sex offenders, ensuring post-registration offending events can be linked for analytics (e.g., Utah Christensen Garfield County CSAM case)."@en ;
    sh:property [ sh:class cacontology:ChildSexualAbuseEvent ;
            sh:message "Post-registration events must be modeled as ChildSexualAbuseEvent (or subclasses) when present."@en ;
            sh:minCount 0 ;
            sh:path cacontology-registry:postRegistrationEvent ] ;
    sh:targetClass cacontology-registry:RecidivistSexOffender .

cacontology-registry:RegisteredAddressShape a sh:NodeShape ;
    rdfs:label "Registered Address Shape"@en ;
    rdfs:comment "Validation shape for registered address instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Address must have a street (5-200 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path uco-location:street ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 100 ;
            sh:message "Address must have a city (2-100 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 2 ;
            sh:path uco-location:city ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 50 ;
            sh:message "Address must have a state (2-50 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 2 ;
            sh:path uco-location:state ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:message "Postal code must be in format XXXXX or XXXXX-XXXX."@en ;
            sh:minCount 1 ;
            sh:path uco-location:postalCode ;
            sh:pattern "^[0-9]{5}(-[0-9]{4})?$" ] ;
    sh:targetClass cacontology-registry:RegisteredAddress .

cacontology-registry:RegisteredSexOffenderShape a sh:NodeShape ;
    rdfs:label "Registered Sex Offender Shape"@en ;
    rdfs:comment "Validation shape for registered sex offender instances."@en ;
    sh:property [ sh:class cacontology-registry:SexOffenderRegistry ;
            sh:message "Offender must be registered in at least one registry."@en ;
            sh:minCount 1 ;
            sh:path cacontology-registry:registeredIn ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 100 ;
            sh:message "Offender must have a full name (2-100 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 2 ;
            sh:path cacontology-registry:fullName ],
        [ sh:datatype xsd:date ;
            sh:maxCount 1 ;
            sh:message "Offender must have a date of birth."@en ;
            sh:minCount 1 ;
            sh:path cacontology-registry:dateOfBirth ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:message "SSN must follow format XXX-XX-XXXX when provided."@en ;
            sh:minCount 0 ;
            sh:path cacontology-registry:socialSecurityNumber ;
            sh:pattern "^[0-9]{3}-[0-9]{2}-[0-9]{4}$" ],
        [ sh:datatype xsd:string ;
            sh:in ( "Male" "Female" "Unknown" ) ;
            sh:maxCount 1 ;
            sh:message "Sex must be Male, Female, or Unknown."@en ;
            sh:minCount 1 ;
            sh:path cacontology-registry:sex ] ;
    sh:targetClass cacontology-registry:RegisteredSexOffender .

cacontology-registry:RegistrationAlert a owl:Class ;
    rdfs:label "Registration Alert"@en ;
    rdfs:comment "Alert generated by registry system (non-compliance, address change, etc.)."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-registry:RegistrationDateValidationShape a sh:NodeShape ;
    rdfs:label "Registration Date Validation Shape"@en ;
    rdfs:comment "Validates that registration dates are logical and consistent."@en ;
    sh:sparql [ sh:message "Registration date must be after conviction date."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-registry:RegistrationRecord ;
                      cacontology-registry:registrationDate ?regDate ;
                      cacontology-registry:basedOnOffense ?offense .
                ?offense cacontology-registry:convictionDate ?convDate .
                FILTER (?regDate < ?convDate)
            }
        """ ],
        [ sh:message "Expiration date must be after registration date when specified."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-registry:registrationDate ?regDate ;
                      cacontology-registry:expirationDate ?expDate .
                FILTER (?expDate <= ?regDate)
            }
        """ ] ;
    sh:targetClass cacontology-registry:RegistrationRecord .

cacontology-registry:RegistrationFrequencyValidationShape a sh:NodeShape ;
    rdfs:label "Registration Frequency Validation Shape"@en ;
    rdfs:comment "Validates registration frequency requirements based on tier."@en ;
    sh:sparql [ sh:message "Tier 1 offenders should register annually."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-registry:tier 1 ;
                      cacontology-registry:registrationFrequency ?freq .
                FILTER (?freq != "annual")
            }
        """ ],
        [ sh:message "Tier 2 offenders should register semi-annually."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-registry:tier 2 ;
                      cacontology-registry:registrationFrequency ?freq .
                FILTER (?freq != "semi-annual")
            }
        """ ],
        [ sh:message "Tier 3 offenders should register quarterly."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-registry:tier 3 ;
                      cacontology-registry:registrationFrequency ?freq .
                FILTER (?freq != "quarterly")
            }
        """ ] ;
    sh:targetClass cacontology-registry:RegistrationRecord .

cacontology-registry:RegistrationOffenseCrossReferenceShape a sh:NodeShape ;
    rdfs:label "Registration Offense Cross Reference Shape"@en ;
    rdfs:comment "Validates that registration records are based on convicting offenses."@en ;
    sh:sparql [ sh:message "Registration record must be based on at least one convicting offense."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-registry:RegistrationRecord .
                FILTER NOT EXISTS {
                    $this cacontology-registry:basedOnOffense ?offense .
                    ?offense a cacontology-registry:ConvictingOffense .
                }
            }
        """ ] ;
    sh:targetClass cacontology-registry:RegistrationRecord .

cacontology-registry:RegistrationRecordShape a sh:NodeShape ;
    rdfs:label "Registration Record Shape"@en ;
    rdfs:comment "Validation shape for registration record instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 50 ;
            sh:message "Registration record must have a registration number (5-50 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path cacontology-registry:registrationNumber ],
        [ sh:datatype xsd:date ;
            sh:maxCount 1 ;
            sh:message "Registration record must specify registration date."@en ;
            sh:minCount 1 ;
            sh:path cacontology-registry:registrationDate ],
        [ sh:datatype xsd:date ;
            sh:maxCount 1 ;
            sh:message "Registration record may specify expiration date."@en ;
            sh:minCount 0 ;
            sh:path cacontology-registry:expirationDate ],
        [ sh:datatype xsd:integer ;
            sh:maxCount 1 ;
            sh:maxInclusive 3 ;
            sh:message "Registration tier must be 1, 2, or 3."@en ;
            sh:minCount 1 ;
            sh:minInclusive 1 ;
            sh:path cacontology-registry:tier ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Registration record must specify if lifetime registration is required."@en ;
            sh:minCount 1 ;
            sh:path cacontology-registry:lifetimeRegistration ] ;
    sh:targetClass cacontology-registry:RegistrationRecord .

cacontology-registry:RegistrationStatusShape a sh:NodeShape ;
    rdfs:label "Registration Status Shape"@en ;
    rdfs:comment "Validation shape for registration status instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "active" "inactive" "non_compliant" "delinquent" "absconded" "deceased" "incarcerated" ) ;
            sh:maxCount 1 ;
            sh:message "Registration status must be from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path uco-core:name ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Status must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ] ;
    sh:targetClass cacontology-registry:RegistrationStatus .

cacontology-registry:RegistryOfficer a owl:Class ;
    rdfs:label "Registry Officer"@en ;
    rdfs:comment "Officer responsible for sex offender registration management."@en ;
    rdfs:subClassOf uco-role:Role .

cacontology-registry:RegistrySystem a owl:Class ;
    rdfs:label "Registry System"@en ;
    rdfs:comment "Information system used to manage sex offender registry."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-registry:SexOffenderRegistryShape a sh:NodeShape ;
    rdfs:label "Sex Offender Registry Shape"@en ;
    rdfs:comment "Validation shape for sex offender registry instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Registry must have a name (5-200 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path uco-core:name ],
        [ sh:class uco-identity:Organization ;
            sh:maxCount 1 ;
            sh:message "Registry must specify managing organization."@en ;
            sh:minCount 1 ;
            sh:path cacontology-registry:managedBy ] ;
    sh:targetClass cacontology-registry:SexOffenderRegistry .

cacontology-registry:SocialMediaAccount a owl:Class ;
    rdfs:label "Social Media Account"@en ;
    rdfs:comment "Social media account belonging to registered sex offender."@en ;
    rdfs:subClassOf cacontology-registry:OnlineIdentifier .

cacontology-registry:TemporalValidationShape a sh:NodeShape ;
    rdfs:label "Temporal Validation Shape"@en ;
    rdfs:comment "Validates temporal consistency for registry actions and records."@en ;
    sh:sparql [ sh:message "Start time must be before end time when both are specified."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this uco-core:startTime ?start ;
                      uco-core:endTime ?end .
                FILTER (?start >= ?end)
            }
        """ ] ;
    sh:targetClass cacontology-registry:RegistrationRecord,
        cacontology-registry:RegistrationUpdate,
        cacontology-registry:VerificationCheck .

cacontology-registry:TemporaryAddress a owl:Class ;
    rdfs:label "Temporary Address"@en ;
    rdfs:comment "Temporary address where offender will be residing."@en ;
    rdfs:subClassOf cacontology-registry:RegisteredAddress .

cacontology-registry:VehicleInformationShape a sh:NodeShape ;
    rdfs:label "Vehicle Information Shape"@en ;
    rdfs:comment "Validation shape for vehicle information instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 50 ;
            sh:message "Vehicle must specify make (2-50 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 2 ;
            sh:path uco-observable:make ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 50 ;
            sh:message "Vehicle must specify model (1-50 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 1 ;
            sh:path uco-observable:model ],
        [ sh:datatype xsd:integer ;
            sh:maxCount 1 ;
            sh:maxInclusive 2030 ;
            sh:message "Vehicle year must be between 1900 and 2030 when specified."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1900 ;
            sh:path uco-observable:year ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 15 ;
            sh:message "License plate should be 2-15 characters when specified."@en ;
            sh:minCount 0 ;
            sh:minLength 2 ;
            sh:path uco-observable:licensePlate ] ;
    sh:targetClass cacontology-registry:VehicleInformation .

cacontology-registry:VerificationCheckShape a sh:NodeShape ;
    rdfs:label "Verification Check Shape"@en ;
    rdfs:comment "Validation shape for verification check instances."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Verification check must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ],
        [ sh:class uco-identity:Person ;
            sh:maxCount 1 ;
            sh:message "Verification check must specify performing officer."@en ;
            sh:minCount 1 ;
            sh:path uco-action:performer ] ;
    sh:targetClass cacontology-registry:VerificationCheck .

cacontology-registry:VictimInformationShape a sh:NodeShape ;
    rdfs:label "Victim Information Shape"@en ;
    rdfs:comment "Validation shape for victim information instances."@en ;
    sh:property [ sh:datatype xsd:integer ;
            sh:maxCount 1 ;
            sh:maxInclusive 25 ;
            sh:message "Victim age must be between 0 and 25 when specified."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0 ;
            sh:path cacontology-registry:victimAge ],
        [ sh:datatype xsd:integer ;
            sh:maxCount 1 ;
            sh:message "Victim count must be at least 1 when specified."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1 ;
            sh:path cacontology-registry:victimCount ],
        [ sh:datatype xsd:string ;
            sh:in ( "stranger" "acquaintance" "family_member" "authority_figure" "romantic_partner" "unknown" ) ;
            sh:maxCount 1 ;
            sh:message "Victim relationship must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-registry:victimRelationship ] ;
    sh:targetClass cacontology-registry:VictimInformation .

cacontology-registry:WorkLocationShape a sh:NodeShape ;
    rdfs:label "Work Location Shape"@en ;
    rdfs:comment "Validation shape for work location instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Work location must have a name (2-200 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 2 ;
            sh:path uco-core:name ] ;
    sh:targetClass cacontology-registry:WorkLocation .

cacontology-registry:ageAcknowledgmentMethod a owl:DatatypeProperty ;
    rdfs:label "age acknowledgment method"@en ;
    rdfs:comment "Method by which offender acknowledged victim's age (verbal, written, direct_question)."@en ;
    rdfs:domain cacontology-registry:AgeAwareExploitation ;
    rdfs:range xsd:string .

cacontology-registry:arrestTiming a owl:DatatypeProperty ;
    rdfs:label "arrest timing"@en ;
    rdfs:comment "Timing of arrest in relation to compliance activity (arrival, during, departure)."@en ;
    rdfs:domain cacontology-registry:ComplianceBasedArrest ;
    rdfs:range xsd:string .

cacontology-registry:attendsSchool a owl:ObjectProperty ;
    rdfs:label "attends school"@en ;
    rdfs:comment "Educational institution where offender is enrolled."@en ;
    rdfs:domain cacontology-registry:RegisteredSexOffender ;
    rdfs:range cacontology-registry:SchoolLocation .

cacontology-registry:basedOnOffense a owl:ObjectProperty ;
    rdfs:label "based on offense"@en ;
    rdfs:comment "Criminal offense that triggered registration requirement."@en ;
    rdfs:domain cacontology-registry:RegistrationRecord ;
    rdfs:range cacontology-registry:ConvictingOffense .

cacontology-registry:complianceType a owl:DatatypeProperty ;
    rdfs:label "compliance type"@en ;
    rdfs:comment "Type of compliance activity used for arrest coordination (annual_review, quarterly_check, address_update)."@en ;
    rdfs:domain cacontology-registry:ComplianceBasedArrest ;
    rdfs:range xsd:string .

cacontology-registry:contentTypesReceived a owl:DatatypeProperty ;
    rdfs:label "content types received"@en ;
    rdfs:comment "Types of explicit content solicited and received from victim."@en ;
    rdfs:domain cacontology-registry:BidirectionalContentExchange ;
    rdfs:range xsd:string .

cacontology-registry:contentTypesSent a owl:DatatypeProperty ;
    rdfs:label "content types sent"@en ;
    rdfs:comment "Types of explicit content sent to victim (text, images, audio, video)."@en ;
    rdfs:domain cacontology-registry:BidirectionalContentExchange ;
    rdfs:range xsd:string .

cacontology-registry:coordinatedWithCompliance a owl:ObjectProperty ;
    rdfs:label "coordinated with compliance"@en ;
    rdfs:comment "Links investigation to compliance-based arrest coordination."@en ;
    rdfs:domain uco-action:Action ;
    rdfs:range cacontology-registry:ComplianceBasedArrest .

cacontology-registry:coordinatesBetweenAgencies a owl:ObjectProperty ;
    rdfs:label "coordinates between agencies"@en ;
    rdfs:comment "Links investigation to agencies coordinating across state boundaries."@en ;
    rdfs:domain cacontology-registry:CrossStateDigitalInvestigation ;
    rdfs:range uco-identity:Organization .

cacontology-registry:coordinationTimeframe a owl:DatatypeProperty ;
    rdfs:label "coordination timeframe"@en ;
    rdfs:comment "Timeframe in days between investigation completion and compliance-based arrest."@en ;
    rdfs:domain cacontology-registry:ComplianceScheduleCoordination ;
    rdfs:range xsd:decimal .

cacontology-registry:crossesStates a owl:ObjectProperty ;
    rdfs:label "crosses states"@en ;
    rdfs:comment "Links cross-state recidivism to states involved."@en ;
    rdfs:domain cacontology-registry:CrossStateRecidivism ;
    rdfs:range uco-location:Location .

cacontology-registry:demonstratesAgeAwareness a owl:ObjectProperty ;
    rdfs:label "demonstrates age awareness"@en ;
    rdfs:comment "Links exploitation pattern to age-aware criminal activity."@en ;
    rdfs:domain cacontology-registry:DigitalRecidivismPattern ;
    rdfs:range cacontology-registry:AgeAwareExploitation .

cacontology-registry:employedAt a owl:ObjectProperty ;
    rdfs:label "employed at"@en ;
    rdfs:comment "Location where offender is employed."@en ;
    rdfs:domain cacontology-registry:RegisteredSexOffender ;
    rdfs:range cacontology-registry:WorkLocation .

cacontology-registry:executedAt a owl:ObjectProperty ;
    rdfs:label "executed at"@en ;
    rdfs:comment "Links search warrant to registered address where it was executed."@en ;
    rdfs:domain cacontology-registry:OffenderDeviceSearchWarrant ;
    rdfs:range cacontology-registry:RegisteredAddress .

cacontology-registry:executedDuring a owl:ObjectProperty ;
    rdfs:label "executed during"@en ;
    rdfs:comment "Links arrest to specific compliance activity during which it was executed."@en ;
    rdfs:domain cacontology-registry:RegistrationReviewArrest ;
    rdfs:range cacontology-registry:AnnualRegistrationReview .

cacontology-registry:exhibitsRecidivism a owl:ObjectProperty ;
    rdfs:label "exhibits recidivism"@en ;
    rdfs:comment "Links registered offender to recidivist classification."@en ;
    rdfs:domain cacontology-registry:RegisteredSexOffender ;
    rdfs:range cacontology-registry:RecidivistSexOffender .

cacontology-registry:exploitationDurationMonths a owl:DatatypeProperty ;
    rdfs:label "exploitation duration months"@en ;
    rdfs:comment "Duration of digital exploitation in months."@en ;
    rdfs:domain cacontology-registry:DigitalRecidivismPattern ;
    rdfs:range xsd:decimal .

cacontology-registry:hasAlias a owl:ObjectProperty ;
    rdfs:label "has alias"@en ;
    rdfs:comment "Known alias used by registered sex offender."@en ;
    rdfs:domain cacontology-registry:RegisteredSexOffender ;
    rdfs:range cacontology-registry:Alias .

cacontology-registry:hasCompliance a owl:ObjectProperty ;
    rdfs:label "has compliance"@en ;
    rdfs:comment "Compliance history for registered sex offender."@en ;
    rdfs:domain cacontology-registry:RegisteredSexOffender ;
    rdfs:range cacontology-registry:ComplianceHistory .

cacontology-registry:hasOnlineIdentifier a owl:ObjectProperty ;
    rdfs:label "has online identifier"@en ;
    rdfs:comment "Online identifier used by registered sex offender."@en ;
    rdfs:domain cacontology-registry:RegisteredSexOffender ;
    rdfs:range cacontology-registry:OnlineIdentifier .

cacontology-registry:hasProfile a owl:ObjectProperty ;
    rdfs:label "has profile"@en ;
    rdfs:comment "Offender profile containing comprehensive information."@en ;
    rdfs:domain cacontology-registry:RegisteredSexOffender ;
    rdfs:range cacontology-registry:OffenderProfile .

cacontology-registry:hasRegistrationRecord a owl:ObjectProperty ;
    rdfs:label "has registration record"@en ;
    rdfs:comment "Official registration record for offender."@en ;
    rdfs:domain cacontology-registry:RegisteredSexOffender ;
    rdfs:range cacontology-registry:RegistrationRecord .

cacontology-registry:involvesBidirectionalExchange a owl:ObjectProperty ;
    rdfs:label "involves bidirectional exchange"@en ;
    rdfs:comment "Links high-volume exploitation to bidirectional content exchange."@en ;
    rdfs:domain cacontology-registry:HighVolumeDigitalExploitation ;
    rdfs:range cacontology-registry:BidirectionalContentExchange .

cacontology-registry:involvesHighVolumeExploitation a owl:ObjectProperty ;
    rdfs:label "involves high volume exploitation"@en ;
    rdfs:comment "Links pattern to high-volume communication exploitation."@en ;
    rdfs:domain cacontology-registry:DigitalRecidivismPattern ;
    rdfs:range cacontology-registry:HighVolumeDigitalExploitation .

cacontology-registry:involvesPattern a owl:ObjectProperty ;
    rdfs:label "involves pattern"@en ;
    rdfs:comment "Links recidivist offender to digital exploitation pattern."@en ;
    rdfs:domain cacontology-registry:RecidivistSexOffender ;
    rdfs:range cacontology-registry:DigitalRecidivismPattern .

cacontology-registry:lifetimeSupervision a owl:DatatypeProperty ;
    rdfs:label "lifetime supervision"@en ;
    rdfs:comment "Whether lifetime supervised release is required."@en ;
    rdfs:domain cacontology-registry:RecidivistSexOffender ;
    rdfs:range xsd:boolean .

cacontology-registry:mandatoryMinimumYears a owl:DatatypeProperty ;
    rdfs:label "mandatory minimum years"@en ;
    rdfs:comment "Mandatory minimum sentence in years for recidivist offense."@en ;
    rdfs:domain cacontology-registry:RecidivistSexOffender ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-registry:maximumSentenceYears a owl:DatatypeProperty ;
    rdfs:label "maximum sentence years"@en ;
    rdfs:comment "Maximum sentence exposure (years or life)."@en ;
    rdfs:domain cacontology-registry:RecidivistSexOffender ;
    rdfs:range xsd:string .

cacontology-registry:messageCount a owl:DatatypeProperty ;
    rdfs:label "message count"@en ;
    rdfs:comment "Total number of messages sent in digital exploitation."@en ;
    rdfs:domain cacontology-registry:HighVolumeDigitalExploitation ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-registry:ownsVehicle a owl:ObjectProperty ;
    rdfs:label "owns vehicle"@en ;
    rdfs:comment "Vehicle owned or operated by offender."@en ;
    rdfs:domain cacontology-registry:RegisteredSexOffender ;
    rdfs:range cacontology-registry:RegisteredVehicle .

cacontology-registry:priorConvictionCount a owl:DatatypeProperty ;
    rdfs:label "prior conviction count"@en ;
    rdfs:comment "Number of prior sexual offense convictions."@en ;
    rdfs:domain cacontology-registry:RecidivistSexOffender ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-registry:recidivismPattern a owl:DatatypeProperty ;
    rdfs:label "recidivism pattern"@en ;
    rdfs:comment "Pattern of recidivism (escalation, similar_mo, cross_jurisdictional)."@en ;
    rdfs:domain cacontology-registry:CrossStateRecidivism ;
    rdfs:range xsd:string .

cacontology-registry:recoversEvidence a owl:ObjectProperty ;
    rdfs:label "recovers evidence"@en ;
    rdfs:comment "Links forensic examination to multi-modal digital evidence recovered."@en ;
    rdfs:domain cacontology-registry:VictimDeviceForensics ;
    rdfs:range cacontology-registry:MultiModalDigitalEvidence .

cacontology-registry:registrationFrequency a owl:DatatypeProperty ;
    rdfs:label "registration frequency"@en ;
    rdfs:comment "Required frequency of registration updates (annual, quarterly, monthly)."@en ;
    rdfs:domain cacontology-registry:RegistrationRequirement ;
    rdfs:range xsd:string .

cacontology-registry:residesAt a owl:ObjectProperty ;
    rdfs:label "resides at"@en ;
    rdfs:comment "Current registered address of offender."@en ;
    rdfs:domain cacontology-registry:RegisteredSexOffender ;
    rdfs:range cacontology-registry:RegisteredAddress .

cacontology-registry:sentenceServed a owl:DatatypeProperty ;
    rdfs:label "sentence served"@en ;
    rdfs:comment "Sentence served for prior conviction before reoffending."@en ;
    rdfs:domain cacontology-registry:RecidivistSexOffender ;
    rdfs:range xsd:string .

cacontology-registry:subjectToRestriction a owl:ObjectProperty ;
    rdfs:label "subject to restriction"@en ;
    rdfs:comment "Restriction imposed on registered sex offender."@en ;
    rdfs:domain cacontology-registry:RegisteredSexOffender ;
    rdfs:range cacontology-registry:RegistrationRestriction .

cacontology-registry:targetsCrossState a owl:ObjectProperty ;
    rdfs:label "targets cross state"@en ;
    rdfs:comment "Links investigation to cross-state victim targeting."@en ;
    rdfs:domain cacontology-registry:CrossStateDigitalInvestigation ;
    rdfs:range uco-identity:Person .

cacontology-registry:triggersInvestigation a owl:ObjectProperty ;
    rdfs:label "triggers investigation"@en ;
    rdfs:comment "Links recidivist activity to cross-state digital investigation."@en ;
    rdfs:domain cacontology-registry:RecidivistSexOffender ;
    rdfs:range cacontology-registry:CrossStateDigitalInvestigation .

cacontology-registry:verifiedBy a owl:ObjectProperty ;
    rdfs:label "verified by"@en ;
    rdfs:comment "Verification check confirming registration information."@en ;
    rdfs:domain cacontology-registry:RegistrationRecord ;
    rdfs:range cacontology-registry:VerificationCheck .

cacontology-registry:victimAgeAcknowledged a owl:DatatypeProperty ;
    rdfs:label "victim age acknowledged"@en ;
    rdfs:comment "Age of victim that offender explicitly acknowledged."@en ;
    rdfs:domain cacontology-registry:AgeAwareExploitation ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-registry:yearsBetweenOffenses a owl:DatatypeProperty ;
    rdfs:label "years between offenses"@en ;
    rdfs:comment "Years between release from prior offense and new offense."@en ;
    rdfs:domain cacontology-registry:RecidivistSexOffender ;
    rdfs:range xsd:decimal .

cacontology-sextortion:AdditionalContentDemand a owl:Class ;
    rdfs:label "Additional Content Demand"@en ;
    rdfs:comment "Demand for more graphic content or additional intimate images."@en ;
    rdfs:subClassOf cacontology-sextortion:ExtortionDemand .

cacontology-sextortion:AgeDeceptionSextortion a owl:Class ;
    rdfs:label "Age Deception Sextortion"@en ;
    rdfs:comment "Sextortion incident involving offender lying about their age when interacting with children (e.g., posing as juvenile)."@en ;
    rdfs:subClassOf cacontology-sextortion:SextortionIncident .

cacontology-sextortion:AgeDeceptionShape a sh:NodeShape ;
    rdfs:label "Age Deception Shape"@en ;
    rdfs:comment "Validation shape for age deception instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "peer_impersonation" "adult_impersonation" "age_ambiguity" "false_profile" "stolen_identity" "fictional_persona" ) ;
            sh:maxCount 1 ;
            sh:message "Age deception must specify deception type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sextortion:deceptionType ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 25 ;
            sh:message "Claimed age must be between 10 and 25 years."@en ;
            sh:minCount 0 ;
            sh:minInclusive 10 ;
            sh:path cacontology-sextortion:claimedAge ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 80 ;
            sh:message "Actual age must be between 18 and 80 years."@en ;
            sh:minCount 0 ;
            sh:minInclusive 18 ;
            sh:path cacontology-sextortion:actualAge ],
        [ sh:datatype xsd:string ;
            sh:in ( "ineffective" "partially_effective" "effective" "highly_effective" "completely_convincing" ) ;
            sh:maxCount 1 ;
            sh:message "Deception effectiveness must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-sextortion:deceptionEffectiveness ] ;
    sh:targetClass cacontology-sextortion:AgeDeception .

cacontology-sextortion:AgeDeceptionValidationShape a sh:NodeShape ;
    rdfs:label "Age Deception Validation Shape"@en ;
    rdfs:comment "Validates age deception consistency."@en ;
    sh:sparql [ sh:message "Claimed age should be lower than actual age in age deception."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-sextortion:claimedAge ?claimed ;
                      cacontology-sextortion:actualAge ?actual .
                FILTER (?claimed >= ?actual)
            }
        """ ] ;
    sh:targetClass cacontology-sextortion:AgeDeception .

cacontology-sextortion:ComplianceDurationValidationShape a sh:NodeShape ;
    rdfs:label "Compliance Duration Validation Shape"@en ;
    rdfs:comment "Validates compliance duration consistency."@en ;
    sh:sparql [ sh:message "Immediate compliance should have short duration."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-sextortion:complianceLevel "immediate" ;
                      cacontology-sextortion:complianceDuration ?duration .
                FILTER (?duration > 7.0)
            }
        """ ] ;
    sh:targetClass cacontology-sextortion:ComplianceResponse .

cacontology-sextortion:ComplianceResponseShape a sh:NodeShape ;
    rdfs:label "Compliance Response Shape"@en ;
    rdfs:comment "Validation shape for compliance response instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "partial" "full" "reluctant" "immediate" "delayed" "conditional" ) ;
            sh:maxCount 1 ;
            sh:message "Compliance response must specify compliance level from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sextortion:complianceLevel ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 365.0 ;
            sh:message "Compliance duration must be between 0 and 365 days."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-sextortion:complianceDuration ] ;
    sh:targetClass cacontology-sextortion:ComplianceResponse .

cacontology-sextortion:ContactListThreat a owl:Class ;
    rdfs:label "Contact List Threat"@en ;
    rdfs:comment "Threat to send intimate images to victim's contact list."@en ;
    rdfs:subClassOf cacontology-sextortion:SharingThreat .

cacontology-sextortion:DataQualityShape a sh:NodeShape ;
    rdfs:label "Data Quality Shape"@en ;
    rdfs:comment "Validates data quality for sextortion incidents."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Label should be between 5 and 200 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 5 ;
            sh:path rdfs:label ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 1000 ;
            sh:message "Comment should be between 10 and 1000 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 10 ;
            sh:path rdfs:comment ] ;
    sh:targetClass cacontology-sextortion:SextortionIncident .

cacontology-sextortion:DemandMessage a owl:Class ;
    rdfs:label "Demand Message"@en ;
    rdfs:comment "Message making specific demands backed by threats."@en ;
    rdfs:subClassOf cacontology-sextortion:SextortionCommunication .

cacontology-sextortion:DisappearingMessageFeature a owl:Class ;
    rdfs:label "Disappearing Message Feature"@en ;
    rdfs:comment "Platform feature where messages automatically delete after viewing."@en ;
    rdfs:subClassOf uco-observable:ObservableObject .

cacontology-sextortion:DoxxingThreatShape a sh:NodeShape ;
    rdfs:label "Doxxing Threat Shape"@en ;
    rdfs:comment "Validation shape for doxxing threat mechanisms."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:hasValue "doxxing" ;
            sh:maxCount 1 ;
            sh:message "DoxxingThreat must have threatType 'doxxing'."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sextortion:threatType ] ;
    sh:targetClass cacontology-sextortion:DoxxingThreat .

cacontology-sextortion:EmotionalManipulation a owl:Class ;
    rdfs:label "Emotional Manipulation"@en ;
    rdfs:comment "Use of emotional tactics (false love, friendship, etc.) to control victim."@en ;
    rdfs:subClassOf cacontology-sextortion:ManipulationTactic .

cacontology-sextortion:EscalationPatternShape a sh:NodeShape ;
    rdfs:label "Escalation Pattern Shape"@en ;
    rdfs:comment "Validation shape for escalation pattern instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "demand_escalation" "threat_escalation" "frequency_escalation" "scope_escalation" "violence_escalation" "exposure_escalation" ) ;
            sh:maxCount 1 ;
            sh:message "Escalation pattern must specify escalation type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sextortion:escalationType ],
        [ sh:datatype xsd:string ;
            sh:in ( "non_compliance" "resistance" "delay" "partial_compliance" "reporting_threat" "blocking" "time_passage" ) ;
            sh:maxCount 1 ;
            sh:message "Escalation trigger must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-sextortion:escalationTrigger ],
        [ sh:datatype xsd:string ;
            sh:in ( "gradual" "moderate" "rapid" "immediate" "explosive" ) ;
            sh:maxCount 1 ;
            sh:message "Escalation pattern must specify escalation speed from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sextortion:escalationSpeed ] ;
    sh:targetClass cacontology-sextortion:EscalationPattern .

cacontology-sextortion:ExtortionPhase a owl:Class ;
    rdfs:label "Extortion Phase"@en ;
    rdfs:comment "Final phase involving threats and blackmail using obtained images."@en ;
    rdfs:subClassOf cacontology-sextortion:SextortionProgression .

cacontology-sextortion:ExtortionTacticsShape a sh:NodeShape ;
    rdfs:label "Extortion Tactics Shape"@en ;
    rdfs:comment "Validation shape for extortion tactics instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "screenshot_threat" "social_media_sharing_threat" "family_contact_threat" "school_contact_threat" "public_exposure_threat" "escalating_demands" "time_pressure" ) ;
            sh:maxCount 1 ;
            sh:message "Extortion tactics must specify tactic type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sextortion:tacticType ],
        [ sh:datatype xsd:string ;
            sh:in ( "vague" "specific" "detailed" "explicit" "graphic" "personalized" ) ;
            sh:maxCount 1 ;
            sh:message "Extortion tactics must specify threat specificity from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sextortion:threatSpecificity ],
        [ sh:datatype xsd:string ;
            sh:in ( "low" "moderate" "high" "very_high" "demonstrated" "proven" ) ;
            sh:maxCount 1 ;
            sh:message "Threat credibility must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-sextortion:threatCredibility ] ;
    sh:targetClass cacontology-sextortion:ExtortionTactics .

cacontology-sextortion:FalseProfileCreation a owl:Class ;
    rdfs:label "False Profile Creation"@en ;
    rdfs:comment "Creating fake profiles on platforms with false age and personal information."@en ;
    rdfs:subClassOf cacontology-sextortion:IdentityImpersonation .

cacontology-sextortion:FinancialDemandValidationShape a sh:NodeShape ;
    rdfs:label "Financial Demand Validation Shape"@en ;
    rdfs:comment "Validates financial sextortion demands."@en ;
    sh:sparql [ sh:message "Financial sextortion should specify payment method when demand amount is specified."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-sextortion:demandAmount ?amount .
                FILTER (?amount > 0)
                FILTER NOT EXISTS {
                    $this cacontology-sextortion:paymentMethod ?method .
                }
            }
        """ ] ;
    sh:targetClass cacontology-sextortion:FinancialSextortion .

cacontology-sextortion:FinancialSextortionShape a sh:NodeShape ;
    rdfs:label "Financial Sextortion Shape"@en ;
    rdfs:comment "Validation shape for financial sextortion instances."@en ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 100000.0 ;
            sh:message "Demand amount must be between $1 and $100,000."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1.0 ;
            sh:path cacontology-sextortion:demandAmount ],
        [ sh:datatype xsd:string ;
            sh:in ( "gift_cards" "cryptocurrency" "wire_transfer" "cash_app" "venmo" "paypal" "bank_transfer" "prepaid_cards" ) ;
            sh:maxCount 1 ;
            sh:message "Payment method must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-sextortion:paymentMethod ],
        [ sh:datatype xsd:string ;
            sh:in ( "one_time" "weekly" "monthly" "irregular" "escalating" "continuous" ) ;
            sh:maxCount 1 ;
            sh:message "Payment frequency must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-sextortion:paymentFrequency ] ;
    sh:targetClass cacontology-sextortion:FinancialSextortion .

cacontology-sextortion:FollowsEscalationPatternShape a sh:PropertyShape ;
    sh:class cacontology-sextortion:EscalationPattern ;
    sh:description "Links sextortion to escalation patterns observed" ;
    sh:minCount 0 ;
    sh:name "follows escalation pattern" ;
    sh:path cacontology-sextortion:followsEscalationPattern .

cacontology-sextortion:ImageAcquisitionPhase a owl:Class ;
    rdfs:label "Image Acquisition Phase"@en ;
    rdfs:comment "Phase where intimate images are obtained from victims."@en ;
    rdfs:subClassOf cacontology-sextortion:SextortionProgression .

cacontology-sextortion:ImageSharingFeature a owl:Class ;
    rdfs:label "Image Sharing Feature"@en ;
    rdfs:comment "Platform feature enabling image sharing in private conversations."@en ;
    rdfs:subClassOf uco-observable:ObservableObject .

cacontology-sextortion:InitialDeceptionPhase a owl:Class ;
    rdfs:label "Initial Deception Phase"@en ;
    rdfs:comment "First phase involving age deception and false identity establishment."@en ;
    rdfs:subClassOf cacontology-sextortion:SextortionProgression .

cacontology-sextortion:InstantMessagingSextortion a owl:Class ;
    rdfs:label "Instant Messaging Sextortion"@en ;
    rdfs:comment "Sextortion conducted through instant messaging platforms with direct private communication."@en ;
    rdfs:subClassOf cacontology-sextortion:SextortionIncident .

cacontology-sextortion:InternationalCoordinationShape a sh:NodeShape ;
    rdfs:label "International Coordination Shape"@en ;
    rdfs:comment "Validation shape for international coordination instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "bilateral" "multilateral" "regional" "global" "ad_hoc" "formal_treaty" ) ;
            sh:maxCount 1 ;
            sh:message "International coordination must specify coordination type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sextortion:coordinationType ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 50 ;
            sh:message "International coordination must involve between 2 and 50 countries."@en ;
            sh:minCount 1 ;
            sh:minInclusive 2 ;
            sh:path cacontology-sextortion:countriesInvolved ],
        [ sh:datatype xsd:string ;
            sh:in ( "poor" "limited" "moderate" "good" "excellent" "exemplary" ) ;
            sh:maxCount 1 ;
            sh:message "Coordination effectiveness must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-sextortion:coordinationEffectiveness ] ;
    sh:targetClass cacontology-sextortion:InternationalCoordination .

cacontology-sextortion:InvolvesAgeDeceptionShape a sh:PropertyShape ;
    sh:class cacontology-sextortion:AgeDeception ;
    sh:description "Links sextortion to age deception tactics used" ;
    sh:minCount 0 ;
    sh:name "involves age deception" ;
    sh:path cacontology-sextortion:involvesAgeDeception .

cacontology-sextortion:PeerImpersonationShape a sh:NodeShape ;
    rdfs:label "Peer Impersonation Shape"@en ;
    rdfs:comment "Validation shape for peer impersonation instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "fake_profile" "stolen_photos" "age_appropriate_language" "shared_interests" "school_references" "peer_network_infiltration" ) ;
            sh:maxCount 1 ;
            sh:message "Peer impersonation must specify impersonation method from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sextortion:impersonationMethod ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:message "Target age group must be in format like '12-14', '15', 'teens', or 'pre_teens'."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sextortion:targetAgeGroup ;
            sh:pattern "^[0-9]+-[0-9]+$|^[0-9]+$|^teens$|^pre_teens$" ] ;
    sh:targetClass cacontology-sextortion:PeerImpersonation .

cacontology-sextortion:PersonalMeetingDemand a owl:Class ;
    rdfs:label "Personal Meeting Demand"@en ;
    rdfs:comment "Demand for in-person meeting or physical contact."@en ;
    rdfs:subClassOf cacontology-sextortion:ExtortionDemand .

cacontology-sextortion:PrivateMessagingFeature a owl:Class ;
    rdfs:label "Private Messaging Feature"@en ;
    rdfs:comment "Platform feature enabling private direct communication."@en ;
    rdfs:subClassOf uco-observable:ObservableObject .

cacontology-sextortion:ProgressiveEscalationShape a sh:NodeShape ;
    rdfs:label "Progressive Escalation Shape"@en ;
    rdfs:comment "Validation shape for progressive escalation instances."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 10 ;
            sh:message "Progressive escalation must have between 2 and 10 escalation stages."@en ;
            sh:minCount 1 ;
            sh:minInclusive 2 ;
            sh:path cacontology-sextortion:escalationStages ],
        [ sh:datatype xsd:string ;
            sh:in ( "linear" "exponential" "irregular" "cyclical" "stepped" ) ;
            sh:maxCount 1 ;
            sh:message "Progressive escalation must specify stage progression from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sextortion:stageProgression ] ;
    sh:targetClass cacontology-sextortion:ProgressiveEscalation .

cacontology-sextortion:PropertyDestructionThreatShape a sh:NodeShape ;
    rdfs:label "Property Destruction Threat Shape"@en ;
    rdfs:comment "Validation shape for property destruction threat mechanisms."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:hasValue "property_destruction" ;
            sh:maxCount 1 ;
            sh:message "PropertyDestructionThreat must have threatType 'property_destruction'."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sextortion:threatType ] ;
    sh:targetClass cacontology-sextortion:PropertyDestructionThreat .

cacontology-sextortion:RefusalResponse a owl:Class ;
    rdfs:label "Refusal Response"@en ;
    rdfs:comment "Victim refuses demands triggering threat escalation (as in WA case)."@en ;
    rdfs:subClassOf cacontology-sextortion:VictimResponse .

cacontology-sextortion:ReportingResponse a owl:Class ;
    rdfs:label "Reporting Response"@en ;
    rdfs:comment "Victim reports incident to authorities or trusted adults."@en ;
    rdfs:subClassOf cacontology-sextortion:VictimResponse .

cacontology-sextortion:RequiresInternationalCoordinationShape a sh:PropertyShape ;
    sh:class cacontology-sextortion:InternationalCoordination ;
    sh:description "Links sextortion to international coordination needs" ;
    sh:minCount 0 ;
    sh:name "requires international coordination" ;
    sh:path cacontology-sextortion:requiresInternationalCoordination .

cacontology-sextortion:ResistanceResponseShape a sh:NodeShape ;
    rdfs:label "Resistance Response Shape"@en ;
    rdfs:comment "Validation shape for resistance response instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "blocking" "reporting" "threatening_legal_action" "seeking_help" "counter_threats" "ignoring" "confrontation" ) ;
            sh:maxCount 1 ;
            sh:message "Resistance response must specify resistance method from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sextortion:resistanceMethod ],
        [ sh:datatype xsd:string ;
            sh:in ( "ineffective" "partially_effective" "effective" "highly_effective" "completely_successful" ) ;
            sh:maxCount 1 ;
            sh:message "Resistance effectiveness must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-sextortion:resistanceEffectiveness ] ;
    sh:targetClass cacontology-sextortion:ResistanceResponse .

cacontology-sextortion:SadisticSextortionShape a sh:NodeShape ;
    rdfs:label "Sadistic Sextortion Shape"@en ;
    rdfs:comment "Validation shape for sadistic sextortion incidents."@en ;
    sh:property [ sh:class cacontology-sextortion:ThreatMechanism ;
            sh:message "Sadistic sextortion must employ at least one threat mechanism."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sextortion:employsThreat ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:message "Sadistic sextortion must specify victim count."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sextortion:victimCount ],
        [ sh:message "Sadistic sextortion must include at least one sadistic threat subtype (self-harm/violence/destruction/doxxing/swatting)."@en ;
            sh:path cacontology-sextortion:employsThreat ;
            sh:qualifiedMinCount 1 ;
            sh:qualifiedValueShape [ sh:or ( [ sh:class cacontology-sextortion:SelfHarmThreat ] [ sh:class cacontology-sextortion:ViolenceThreat ] [ sh:class cacontology-sextortion:PropertyDestructionThreat ] [ sh:class cacontology-sextortion:DoxxingThreat ] [ sh:class cacontology-sextortion:SwattingThreat ] ) ] ] ;
    sh:targetClass cacontology-sextortion:SadisticSextortion .

cacontology-sextortion:ScreenshotThreatShape a sh:NodeShape ;
    rdfs:label "Screenshot Threat Shape"@en ;
    rdfs:comment "Validation shape for screenshot threat instances."@en ;
    sh:property [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Screenshot threat must specify if screenshot evidence exists."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sextortion:screenshotEvidence ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 100 ;
            sh:message "Screenshot count must be between 1 and 100 when specified."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1 ;
            sh:path cacontology-sextortion:screenshotCount ] ;
    sh:targetClass cacontology-sextortion:ScreenshotThreat .

cacontology-sextortion:SelfHarmThreatShape a sh:NodeShape ;
    rdfs:label "Self-Harm Threat Shape"@en ;
    rdfs:comment "Validation shape for self-harm threat mechanisms."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:hasValue "self_harm" ;
            sh:maxCount 1 ;
            sh:message "SelfHarmThreat must have threatType 'self_harm'."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sextortion:threatType ] ;
    sh:targetClass cacontology-sextortion:SelfHarmThreat .

cacontology-sextortion:SextortionCrossReferenceShape a sh:NodeShape ;
    rdfs:label "Sextortion Cross Reference Shape"@en ;
    rdfs:comment "Validates cross-references between sextortion and related entities."@en ;
    sh:sparql [ sh:message "Sextortion incident should have at least one victim or extortion tactic."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-sextortion:SextortionIncident .
                FILTER NOT EXISTS {
                    { $this cacontology-sextortion:targetsVictim ?victim } UNION
                    { $this cacontology-sextortion:usesExtortionTactics ?tactic }
                }
            }
        """ ] ;
    sh:targetClass cacontology-sextortion:SextortionIncident .

cacontology-sextortion:SextortionIncidentShape a sh:NodeShape ;
    rdfs:label "Sextortion Incident Shape"@en ;
    rdfs:comment "Validation shape for sextortion incident instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "image_based" "video_based" "live_streaming" "financial_extortion" "social_media_threat" "peer_impersonation" "adult_impersonation" ) ;
            sh:maxCount 1 ;
            sh:message "Sextortion incident must specify incident type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sextortion:incidentType ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 365.0 ;
            sh:message "Incident duration must be between 0 and 365 days."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-sextortion:incidentDuration ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 100 ;
            sh:message "Sextortion incident must specify victim count between 1 and 100."@en ;
            sh:minCount 1 ;
            sh:minInclusive 1 ;
            sh:path cacontology-sextortion:victimCount ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Sextortion incident may have a start time."@en ;
            sh:minCount 0 ;
            sh:path uco-core:startTime ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Sextortion incident may have an end time."@en ;
            sh:minCount 0 ;
            sh:path uco-core:endTime ],
        [ sh:datatype xsd:string ;
            sh:in ( "low" "moderate" "high" "severe" "extreme" "critical" ) ;
            sh:maxCount 1 ;
            sh:message "Sextortion incident must specify severity level from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sextortion:severityLevel ] ;
    sh:targetClass cacontology-sextortion:SextortionIncident .

cacontology-sextortion:SexualSolicitationPhase a owl:Class ;
    rdfs:label "Sexual Solicitation Phase"@en ;
    rdfs:comment "Phase involving sexually explicit conversations and image solicitation."@en ;
    rdfs:subClassOf cacontology-sextortion:SextortionProgression .

cacontology-sextortion:SilentVictimization a owl:Class ;
    rdfs:label "Silent Victimization"@en ;
    rdfs:comment "Victim does not report due to shame, fear, or manipulation."@en ;
    rdfs:subClassOf cacontology-sextortion:VictimResponse .

cacontology-sextortion:SocialMediaSextortion a owl:Class ;
    rdfs:label "Social Media Sextortion"@en ;
    rdfs:comment "Sextortion conducted through social media platforms and networks."@en ;
    rdfs:subClassOf cacontology-sextortion:SextortionIncident .

cacontology-sextortion:SocialMediaSharingThreatShape a sh:NodeShape ;
    rdfs:label "Social Media Sharing Threat Shape"@en ;
    rdfs:comment "Validation shape for social media sharing threat instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Target platforms must be specified (3-200 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 3 ;
            sh:path cacontology-sextortion:targetPlatforms ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Social media sharing threat may specify contact list access."@en ;
            sh:minCount 0 ;
            sh:path cacontology-sextortion:contactListAccess ] ;
    sh:targetClass cacontology-sextortion:SocialMediaSharingThreat .

cacontology-sextortion:SwattingThreatShape a sh:NodeShape ;
    rdfs:label "Swatting Threat Shape"@en ;
    rdfs:comment "Validation shape for swatting threat mechanisms."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:hasValue "swatting" ;
            sh:maxCount 1 ;
            sh:message "SwattingThreat must have threatType 'swatting'."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sextortion:threatType ] ;
    sh:targetClass cacontology-sextortion:SwattingThreat .

cacontology-sextortion:TargetsVictimShape a sh:PropertyShape ;
    sh:class uco-identity:Person ;
    sh:description "Links sextortion to victim being targeted" ;
    sh:minCount 0 ;
    sh:name "targets victim" ;
    sh:path cacontology-sextortion:targetsVictim .

cacontology-sextortion:TemporalValidationShape a sh:NodeShape ;
    rdfs:label "Temporal Validation Shape"@en ;
    rdfs:comment "Validates temporal consistency in sextortion incidents."@en ;
    sh:sparql [ sh:message "Start time must be before end time when both are specified."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this uco-core:startTime ?start ;
                      uco-core:endTime ?end .
                FILTER (?start >= ?end)
            }
        """ ] ;
    sh:targetClass cacontology-sextortion:SextortionIncident .

cacontology-sextortion:ThreatMessage a owl:Class ;
    rdfs:label "Threat Message"@en ;
    rdfs:comment "Message containing explicit threats about sharing images."@en ;
    rdfs:subClassOf cacontology-sextortion:SextortionCommunication .

cacontology-sextortion:TriggersVictimResponseShape a sh:PropertyShape ;
    sh:class cacontology-sextortion:VictimResponse ;
    sh:description "Links sextortion to victim response patterns" ;
    sh:minCount 0 ;
    sh:name "triggers victim response" ;
    sh:path cacontology-sextortion:triggersVictimResponse .

cacontology-sextortion:TrustBuildingPhase a owl:Class ;
    rdfs:label "Trust Building Phase"@en ;
    rdfs:comment "Phase focused on building trust and rapport with victim."@en ;
    rdfs:subClassOf cacontology-sextortion:SextortionProgression .

cacontology-sextortion:UsesExtortionTacticsShape a sh:PropertyShape ;
    sh:class cacontology-sextortion:ExtortionTactics ;
    sh:description "Links sextortion to extortion tactics employed" ;
    sh:minCount 0 ;
    sh:name "uses extortion tactics" ;
    sh:path cacontology-sextortion:usesExtortionTactics .

cacontology-sextortion:VictimIsolation a owl:Class ;
    rdfs:label "Victim Isolation"@en ;
    rdfs:comment "Tactics to isolate victim from support systems and reporting mechanisms."@en ;
    rdfs:subClassOf cacontology-sextortion:ManipulationTactic .

cacontology-sextortion:VictimResponseShape a sh:NodeShape ;
    rdfs:label "Victim Response Shape"@en ;
    rdfs:comment "Validation shape for victim response instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "compliance" "resistance" "negotiation" "reporting" "blocking" "withdrawal" "escalation" "seeking_help" ) ;
            sh:maxCount 1 ;
            sh:message "Victim response must specify response type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sextortion:responseType ],
        [ sh:datatype xsd:string ;
            sh:in ( "immediate" "within_hours" "within_days" "delayed" "no_response" ) ;
            sh:maxCount 1 ;
            sh:message "Response speed must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-sextortion:responseSpeed ],
        [ sh:datatype xsd:string ;
            sh:in ( "minimal" "moderate" "significant" "severe" "traumatic" "devastating" ) ;
            sh:maxCount 1 ;
            sh:message "Emotional impact must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-sextortion:emotionalImpact ] ;
    sh:targetClass cacontology-sextortion:VictimResponse .

cacontology-sextortion:ViolenceThreatShape a sh:NodeShape ;
    rdfs:label "Violence Threat Shape"@en ;
    rdfs:comment "Validation shape for violence threat mechanisms."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:hasValue "violence" ;
            sh:maxCount 1 ;
            sh:message "ViolenceThreat must have threatType 'violence'."@en ;
            sh:minCount 1 ;
            sh:path cacontology-sextortion:threatType ] ;
    sh:targetClass cacontology-sextortion:ViolenceThreat .

cacontology-sextortion:analyzesDevice a owl:ObjectProperty ;
    rdfs:label "analyzes device"@en ;
    rdfs:comment "Links forensic analysis to devices examined."@en ;
    rdfs:domain cacontology-sextortion:DeviceForensicAnalysis ;
    rdfs:range uco-observable:DigitalDevice .

cacontology-sextortion:conductsOnPlatform a owl:ObjectProperty ;
    rdfs:label "conducts on platform"@en ;
    rdfs:comment "Links sextortion incident to digital platform used."@en ;
    rdfs:domain cacontology-sextortion:SextortionIncident ;
    rdfs:range cacontology-sextortion:InstantMessagingPlatform .

cacontology-sextortion:containsCommunication a owl:ObjectProperty ;
    rdfs:label "contains communication"@en ;
    rdfs:comment "Links sextortion incident to communications involved."@en ;
    rdfs:domain cacontology-sextortion:SextortionIncident ;
    rdfs:range cacontology-sextortion:SextortionCommunication .

cacontology-sextortion:conversationCount a owl:DatatypeProperty ;
    rdfs:label "conversation count"@en ;
    rdfs:comment "Number of separate conversations identified in investigation."@en ;
    rdfs:domain cacontology-sextortion:ConversationReconstruction ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-sextortion:conversationLength a owl:DatatypeProperty ;
    rdfs:label "conversation length"@en ;
    rdfs:comment "Length of conversation in number of messages exchanged."@en ;
    rdfs:domain cacontology-sextortion:SextortionCommunication ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-sextortion:demandType a owl:DatatypeProperty ;
    rdfs:label "demand type"@en ;
    rdfs:comment "Type of demand made (money, gift cards, more content, meeting)."@en ;
    rdfs:domain cacontology-sextortion:ExtortionDemand ;
    rdfs:range xsd:string .

cacontology-sextortion:deviceCount a owl:DatatypeProperty ;
    rdfs:label "device count"@en ;
    rdfs:comment "Number of devices seized for forensic examination (e.g., mobile phone and desktop)."@en ;
    rdfs:domain cacontology-sextortion:DeviceForensicAnalysis ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-sextortion:evidenceRecovered a owl:DatatypeProperty ;
    rdfs:label "evidence recovered"@en ;
    rdfs:comment "Whether evidence was successfully recovered from devices."@en ;
    rdfs:domain cacontology-sextortion:DeviceForensicAnalysis ;
    rdfs:range xsd:boolean .

cacontology-sextortion:explicitnessLevel a owl:DatatypeProperty ;
    rdfs:label "explicitness level"@en ;
    rdfs:comment "Level of sexual explicitness (suggestive, explicit, graphic)."@en ;
    rdfs:domain cacontology-sextortion:SexuallyExplicitConversation ;
    rdfs:range xsd:string .

cacontology-sextortion:falsePersonaType a owl:DatatypeProperty ;
    rdfs:label "false persona type"@en ;
    rdfs:comment "Type of false persona used (peer, romantic interest, authority figure)."@en ;
    rdfs:domain cacontology-sextortion:IdentityImpersonation ;
    rdfs:range xsd:string .

cacontology-sextortion:followsProgression a owl:ObjectProperty ;
    rdfs:label "follows progression"@en ;
    rdfs:comment "Links incident to its progression pattern."@en ;
    rdfs:domain cacontology-sextortion:SextortionIncident ;
    rdfs:range cacontology-sextortion:SextortionProgression .

cacontology-sextortion:giftCardType a owl:DatatypeProperty ;
    rdfs:label "gift card type"@en ;
    rdfs:comment "Type of gift cards demanded (iTunes, Steam, Amazon, etc.)."@en ;
    rdfs:domain cacontology-sextortion:GiftCardDemand ;
    rdfs:range xsd:string .

cacontology-sextortion:identifiesVictim a owl:ObjectProperty ;
    rdfs:label "identifies victim"@en ;
    rdfs:comment "Links victim identification process to identified victims."@en ;
    rdfs:domain cacontology-sextortion:VictimIdentification ;
    rdfs:range uco-identity:Person .

cacontology-sextortion:imageType a owl:DatatypeProperty ;
    rdfs:label "image type"@en ;
    rdfs:comment "Type of images solicited (clothed, suggestive, nude, explicit)."@en ;
    rdfs:domain cacontology-sextortion:ImageSolicitationMessage ;
    rdfs:range xsd:string .

cacontology-sextortion:investigatedBy a owl:ObjectProperty ;
    rdfs:label "investigated by"@en ;
    rdfs:comment "Links sextortion incident to investigation process."@en ;
    rdfs:domain cacontology-sextortion:SextortionIncident ;
    rdfs:range cacontology-sextortion:SextortionInvestigation .

cacontology-sextortion:involvesDeception a owl:ObjectProperty ;
    rdfs:label "involves deception"@en ;
    rdfs:comment "Links sextortion incident to deception tactics used."@en ;
    rdfs:domain cacontology-sextortion:SextortionIncident ;
    rdfs:range cacontology-sextortion:AgeDeceptionTactic .

cacontology-sextortion:makesDemand a owl:ObjectProperty ;
    rdfs:label "makes demand"@en ;
    rdfs:comment "Links incident to extortion demands made."@en ;
    rdfs:domain cacontology-sextortion:SextortionIncident ;
    rdfs:range cacontology-sextortion:ExtortionDemand .

cacontology-sextortion:monetaryAmount a owl:DatatypeProperty ;
    rdfs:label "monetary amount"@en ;
    rdfs:comment "Amount of money demanded in extortion."@en ;
    rdfs:domain cacontology-sextortion:MonetaryDemand ;
    rdfs:range xsd:decimal .

cacontology-sextortion:nextPhase a owl:ObjectProperty ;
    rdfs:label "next phase"@en ;
    rdfs:comment "Links progression phase to the next phase in sequence."@en ;
    rdfs:domain cacontology-sextortion:SextortionProgression ;
    rdfs:range cacontology-sextortion:SextortionProgression .

cacontology-sextortion:previousPhase a owl:ObjectProperty ;
    rdfs:label "previous phase"@en ;
    rdfs:comment "Links progression phase to the previous phase in sequence."@en ;
    rdfs:domain cacontology-sextortion:SextortionProgression ;
    rdfs:range cacontology-sextortion:SextortionProgression .

cacontology-sextortion:progressionStage a owl:DatatypeProperty ;
    rdfs:label "progression stage"@en ;
    rdfs:comment "Current stage in sextortion progression (1-5)."@en ;
    rdfs:domain cacontology-sextortion:SextortionProgression ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-sextortion:providesEvidence a owl:ObjectProperty ;
    rdfs:label "provides evidence"@en ;
    rdfs:comment "Links sextortion investigation to evidence provided for prosecution."@en ;
    rdfs:domain cacontology-sextortion:SextortionInvestigation ;
    rdfs:range uco-observable:ObservableObject .

cacontology-sextortion:reconstructsConversation a owl:ObjectProperty ;
    rdfs:label "reconstructs conversation"@en ;
    rdfs:comment "Links investigation to conversations reconstructed."@en ;
    rdfs:domain cacontology-sextortion:ConversationReconstruction ;
    rdfs:range cacontology-sextortion:SextortionCommunication .

cacontology-sextortion:resultsinCharge a owl:ObjectProperty ;
    rdfs:label "results in charge"@en ;
    rdfs:comment "Links sextortion incident to resulting criminal charges."@en ;
    rdfs:domain cacontology-sextortion:SextortionIncident ;
    rdfs:range uco-observable:ObservableObject .

cacontology-sextortion:threatFollowThrough a owl:DatatypeProperty ;
    rdfs:label "threat follow through"@en ;
    rdfs:comment "Whether offender followed through on threats."@en ;
    rdfs:domain cacontology-sextortion:ThreatMechanism ;
    rdfs:range xsd:boolean .

cacontology-sextortion:triggersPhase a owl:ObjectProperty ;
    rdfs:label "triggers phase"@en ;
    rdfs:comment "Links victim response to the phase it triggers."@en ;
    rdfs:domain cacontology-sextortion:VictimResponse ;
    rdfs:range cacontology-sextortion:SextortionProgression .

cacontology-sextortion:usesManipulation a owl:ObjectProperty ;
    rdfs:label "uses manipulation"@en ;
    rdfs:comment "Links incident to manipulation tactics employed."@en ;
    rdfs:domain cacontology-sextortion:SextortionIncident ;
    rdfs:range cacontology-sextortion:ManipulationTactic .

cacontology-sextortion:utilizesFeature a owl:ObjectProperty ;
    rdfs:label "utilizes feature"@en ;
    rdfs:comment "Links incident to platform features exploited."@en ;
    rdfs:domain cacontology-sextortion:SextortionIncident ;
    rdfs:range uco-observable:ObservableObject .

cacontology-sextortion:victimAgeGroup a owl:DatatypeProperty ;
    rdfs:label "victim age group"@en ;
    rdfs:comment "Age group of victims (e.g., 'under 16', 'teens', 'preteens')."@en ;
    rdfs:domain cacontology-sextortion:SextortionIncident ;
    rdfs:range xsd:string .

cacontology-soe:HostsCoercionShowShape a sh:PropertyShape ;
    sh:class cacontology-soe:LivestreamedCoercionShow ;
    sh:description "Links an SOE network to a coercion show instance" ;
    sh:minCount 0 ;
    sh:name "hosts coercion show" ;
    sh:path cacontology-soe:hostsCoercionShow .

cacontology-soe:LivestreamedCoercionShowShape a sh:NodeShape ;
    rdfs:label "Livestreamed Coercion Show Shape"@en ;
    rdfs:comment "Validation shape for livestreamed coercion show event instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 300 ;
            sh:message "Livestreamed coercion show must have an rdfs:label (3-300 chars)."@en ;
            sh:minCount 1 ;
            sh:minLength 3 ;
            sh:path rdfs:label ],
        [ sh:datatype xsd:string ;
            sh:in ( "watch_party" "cut_show" "cut_stage" "stage" ) ;
            sh:maxCount 1 ;
            sh:message "coercionShowType must be one of: watch_party, cut_show, cut_stage, stage."@en ;
            sh:minCount 1 ;
            sh:path cacontology-soe:coercionShowType ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Livestreamed coercion show may have startTime."@en ;
            sh:minCount 0 ;
            sh:path uco-action:startTime ] ;
    sh:targetClass cacontology-soe:LivestreamedCoercionShow .

cacontology-soe:SadisticOnlineExploitationNetworkShape a sh:NodeShape ;
    rdfs:label "Sadistic Online Exploitation Network Shape"@en ;
    rdfs:comment "Validation shape for SOE network/community instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 300 ;
            sh:message "SOE network must have an rdfs:label (3-300 chars)."@en ;
            sh:minCount 1 ;
            sh:minLength 3 ;
            sh:path rdfs:label ],
        [ sh:datatype xsd:string ;
            sh:maxCount 5 ;
            sh:maxLength 50 ;
            sh:message "communitySlangTerm must be a short string (1-50 chars)."@en ;
            sh:minCount 0 ;
            sh:minLength 1 ;
            sh:path cacontology-soe:communitySlangTerm ] ;
    sh:targetClass cacontology-soe:SadisticOnlineExploitationNetwork .

cacontology-specialized:AffiliateEngagementMetricsShape a sh:NodeShape ;
    rdfs:label "Affiliate Engagement Metrics Shape"@en ;
    rdfs:comment "Validation shape for affiliate engagement metrics instances."@en ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Affiliate engagement score must be between 0.0 and 1.0."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-specialized:affiliateEngagementScore ] ;
    sh:targetClass cacontology-specialized:AffiliateEngagementMetrics .

cacontology-specialized:AffiliateJointOperationShape a sh:NodeShape ;
    rdfs:label "Affiliate Joint Operation Shape"@en ;
    rdfs:comment "Validation shape for affiliate joint operation instances."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Affiliate joint operation must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 1000 ;
            sh:message "Joint operation count must be between 1 and 1000 when specified."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1 ;
            sh:path cacontology-specialized:jointOperationCount ] ;
    sh:targetClass cacontology-specialized:AffiliateJointOperation .

cacontology-specialized:AffiliateNetworkCoordinationShape a sh:NodeShape ;
    rdfs:label "Affiliate Network Coordination Shape"@en ;
    rdfs:comment "Validation shape for affiliate network coordination instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "weekly" "monthly" "quarterly" "semi-annual" "annual" ) ;
            sh:maxCount 1 ;
            sh:message "Coordination meeting frequency must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-specialized:coordinationMeetingFrequency ] ;
    sh:targetClass cacontology-specialized:AffiliateNetworkCoordination .

cacontology-specialized:AffiliateOrganizationValidationShape a sh:NodeShape ;
    rdfs:label "Affiliate Organization Validation Shape"@en ;
    rdfs:comment "Validates affiliate organization relationships and status."@en ;
    sh:sparql [ sh:message "Active affiliate organizations should have resource sharing or support relationships."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-specialized:ICACAffiliateOrganization ;
                      cacontology-specialized:affiliationStatus "active" .
                FILTER NOT EXISTS {
                    { $this cacontology-specialized:receivesResourceFrom ?sharing } UNION
                    { $this cacontology-specialized:receivesSupportFrom ?support } UNION
                    { $this cacontology-specialized:participatesInJointOperation ?operation }
                }
            }
        """ ] ;
    sh:targetClass cacontology-specialized:ICACAffiliateOrganization .

cacontology-specialized:AffiliatePerformanceAssessmentShape a sh:NodeShape ;
    rdfs:label "Affiliate Performance Assessment Shape"@en ;
    rdfs:comment "Validation shape for affiliate performance assessment instances."@en ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Performance score must be between 0.0 and 1.0."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-specialized:performanceScore ] ;
    sh:targetClass cacontology-specialized:AffiliatePerformanceAssessment .

cacontology-specialized:AffiliateResourceAllocationShape a sh:NodeShape ;
    rdfs:label "Affiliate Resource Allocation Shape"@en ;
    rdfs:comment "Validation shape for affiliate resource allocation instances."@en ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 720.0 ;
            sh:message "Resource allocation response time must be between 1 and 720 hours (30 days)."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1.0 ;
            sh:path cacontology-specialized:resourceAllocationResponseTime ] ;
    sh:targetClass cacontology-specialized:AffiliateResourceAllocation .

cacontology-specialized:AffiliateResourceLibraryShape a sh:NodeShape ;
    rdfs:label "Affiliate Resource Library Shape"@en ;
    rdfs:comment "Validation shape for affiliate resource library instances."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 100000 ;
            sh:message "Resource library size must be between 0 and 100000."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0 ;
            sh:path cacontology-specialized:resourceLibrarySize ] ;
    sh:targetClass cacontology-specialized:AffiliateResourceLibrary .

cacontology-specialized:AnalystRole a gufo:Role,
        owl:Class ;
    rdfs:label "Analyst Role"@en ;
    rdfs:comment "Role of analyst supporting specialized unit operations. Modeled as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf uco-role:Role .

cacontology-specialized:ChildRescueUnitShape a sh:NodeShape ;
    rdfs:label "Child Rescue Unit Shape"@en ;
    rdfs:comment "Validation shape for child rescue unit instances."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 10000 ;
            sh:message "Rescue operations count must be between 0 and 10000."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0 ;
            sh:path cacontology-specialized:rescueOperationsCount ] ;
    sh:targetClass cacontology-specialized:ChildRescueUnit .

cacontology-specialized:CollegeParkBarrack a owl:Class ;
    rdfs:label "College Park Barrack"@en ;
    rdfs:comment "Maryland State Police College Park Barrack supporting computer crimes investigations. Modeled as gUFO Organization."@en ;
    rdfs:subClassOf cacontology-specialized:StatePoliceBarrack .

cacontology-specialized:CommunityEngagementK9 a owl:Class ;
    rdfs:label "Community Engagement K9"@en ;
    rdfs:comment "K9 utilized for community outreach and educational programs. Modeled as gUFO Organization."@en ;
    rdfs:subClassOf cacontology-specialized:K9DetectionProgram .

cacontology-specialized:CommunityOutreachProgramShape a sh:NodeShape ;
    rdfs:label "Community Outreach Program Shape"@en ;
    rdfs:comment "Validation shape for community outreach program instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 100 ;
            sh:message "Community outreach program must have a label (5-100 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path rdfs:label ],
        [ sh:datatype xsd:integer ;
            sh:maxCount 1 ;
            sh:maxInclusive 1000 ;
            sh:message "Event count must be between 0 and 1000."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0 ;
            sh:path cacontology-specialized:eventCount ] ;
    sh:targetClass cacontology-specialized:CommunityOutreachProgram .

cacontology-specialized:CoordinatedArrest a owl:Class ;
    rdfs:label "Coordinated Arrest"@en ;
    rdfs:comment "Arrest coordinated as part of larger operation. Modeled as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-specialized:CriticalIncidentDebriefing a owl:Class ;
    rdfs:label "Critical Incident Debriefing"@en ;
    rdfs:comment "Structured debriefing process following traumatic incidents. Modeled as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-specialized:DataQualityShape a sh:NodeShape ;
    rdfs:label "Data Quality Shape"@en ;
    rdfs:comment "Validates data quality for specialized units entities."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Label should be between 5 and 200 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 5 ;
            sh:path rdfs:label ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 1000 ;
            sh:message "Comment should be between 10 and 1000 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 10 ;
            sh:path rdfs:comment ] ;
    sh:targetClass cacontology-specialized:CommunityOutreachProgram,
        cacontology-specialized:ICACAffiliateOrganization,
        cacontology-specialized:K9DetectionProgram,
        cacontology-specialized:OfficerWellnessProgram,
        cacontology-specialized:SpecializedInvestigativeUnit .

cacontology-specialized:DetectionDogShape a sh:NodeShape ;
    rdfs:label "Detection Dog Shape"@en ;
    rdfs:comment "Validation shape for detection dog instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 50 ;
            sh:message "Detection dog must have a name (2-50 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 2 ;
            sh:path uco-core:name ],
        [ sh:class cacontology-specialized:TripleThreatCapability ;
            sh:message "Detection dog capabilities must be valid TripleThreatCapability instances."@en ;
            sh:minCount 0 ;
            sh:path cacontology-specialized:hasCapability ] ;
    sh:targetClass cacontology-specialized:DetectionDog .

cacontology-specialized:DeviceDetection a owl:Class ;
    rdfs:label "Device Detection"@en ;
    rdfs:comment "Detection of electronic storage devices during search operations. Modeled as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-specialized:DigitalForensicsUnit a owl:Class ;
    rdfs:label "Digital Forensics Unit"@en ;
    rdfs:comment "Unit specialized in digital forensics analysis. Modeled as gUFO Organization."@en ;
    rdfs:subClassOf cacontology-specialized:SpecializedInvestigativeUnit .

cacontology-specialized:ElectronicStorageDeviceK9 a owl:Class ;
    rdfs:label "Electronic Storage Device K9"@en ;
    rdfs:comment "K9 trained to detect electronic storage devices during search operations. Modeled as gUFO Organization."@en ;
    rdfs:subClassOf cacontology-specialized:K9DetectionProgram .

cacontology-specialized:EmergencyResponseCoordinationShape a sh:NodeShape ;
    rdfs:label "Emergency Response Coordination Shape"@en ;
    rdfs:comment "Validation shape for emergency response coordination instances."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Emergency response coordination must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 1440.0 ;
            sh:message "Emergency response time must be between 1 and 1440 minutes (24 hours)."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1.0 ;
            sh:path cacontology-specialized:emergencyResponseTime ] ;
    sh:targetClass cacontology-specialized:EmergencyResponseCoordination .

cacontology-specialized:HighVolumeOperationsUnitShape a sh:NodeShape ;
    rdfs:label "High Volume Operations Unit Shape"@en ;
    rdfs:comment "Validation shape for high volume operations unit instances."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 10000 ;
            sh:message "High volume unit operational capacity must be between 100 and 10000."@en ;
            sh:minCount 1 ;
            sh:minInclusive 100 ;
            sh:path cacontology-specialized:operationalCapacity ] ;
    sh:targetClass cacontology-specialized:HighVolumeOperationsUnit .

cacontology-specialized:ICACAffiliateOrganizationShape a sh:NodeShape ;
    rdfs:label "CAC Affiliate Organization Shape"@en ;
    rdfs:comment "Validation shape for ICAC affiliate organization instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Affiliate organization must have a name (5-200 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path uco-core:name ],
        [ sh:datatype xsd:string ;
            sh:in ( "primary" "secondary" "associate" "partner" ) ;
            sh:maxCount 1 ;
            sh:message "Affiliation level must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-specialized:affiliationLevel ],
        [ sh:datatype xsd:string ;
            sh:in ( "active" "inactive" "pending" "suspended" ) ;
            sh:maxCount 1 ;
            sh:message "Affiliation status must be from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-specialized:affiliationStatus ],
        [ sh:datatype xsd:string ;
            sh:in ( "high" "medium" "low" "recipient-only" ) ;
            sh:maxCount 1 ;
            sh:message "Resource contribution level must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-specialized:resourceContributionLevel ] ;
    sh:targetClass cacontology-specialized:ICACAffiliateOrganization .

cacontology-specialized:InterAffiliateResourceSharingShape a sh:NodeShape ;
    rdfs:label "Inter-Affiliate Resource Sharing Shape"@en ;
    rdfs:comment "Validation shape for inter-affiliate resource sharing instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "daily" "weekly" "monthly" "quarterly" "annual" "as_needed" ) ;
            sh:maxCount 1 ;
            sh:message "Resource sharing frequency must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-specialized:resourceSharingFrequency ] ;
    sh:targetClass cacontology-specialized:InterAffiliateResourceSharing .

cacontology-specialized:InteragencyOperationSituation a owl:Class ;
    rdfs:label "Interagency Operation Situation"@en ;
    rdfs:comment "Situation involving operations across multiple agencies and jurisdictions. Modeled as gUFO Situation."@en ;
    rdfs:subClassOf gufo:Situation .

cacontology-specialized:K9DetectionProgramShape a sh:NodeShape ;
    rdfs:label "K9 Detection Program Shape"@en ;
    rdfs:comment "Validation shape for K9 detection program instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 100 ;
            sh:message "K9 detection program must have a label (5-100 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path rdfs:label ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 500 ;
            sh:message "K9 detection program comment should be 10-500 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 10 ;
            sh:path rdfs:comment ] ;
    sh:targetClass cacontology-specialized:K9DetectionProgram .

cacontology-specialized:K9Officer a gufo:Role,
        owl:Class ;
    rdfs:label "K9 Officer"@en ;
    rdfs:comment "Law enforcement officer handling and working with detection dogs. Modeled as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf uco-role:Role .

cacontology-specialized:K9OperationCrossReferenceShape a sh:NodeShape ;
    rdfs:label "K9 Operation Cross Reference Shape"@en ;
    rdfs:comment "Validates cross-references between K9 operations and related entities."@en ;
    sh:sparql [ sh:message "K9 search operation should have an associated detection dog."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-specialized:K9SearchOperation .
                FILTER NOT EXISTS {
                    ?dog cacontology-specialized:assistsInSearch $this .
                }
            }
        """ ] ;
    sh:targetClass cacontology-specialized:K9SearchOperation .

cacontology-specialized:K9SearchOperationShape a sh:NodeShape ;
    rdfs:label "K9 Search Operation Shape"@en ;
    rdfs:comment "Validation shape for K9 search operation instances."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "K9 search operation must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "K9 search operation may specify end time."@en ;
            sh:minCount 0 ;
            sh:path uco-core:endTime ],
        [ sh:datatype xsd:integer ;
            sh:maxCount 1 ;
            sh:maxInclusive 100 ;
            sh:message "Search warrants executed must be between 0 and 100."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0 ;
            sh:path cacontology-specialized:searchWarrantsExecuted ] ;
    sh:targetClass cacontology-specialized:K9SearchOperation .

cacontology-specialized:K9TrainingProgram a owl:Class ;
    rdfs:label "K9 Training Program"@en ;
    rdfs:comment "Training program for K9 units and handlers. Modeled as gUFO Organization."@en ;
    rdfs:subClassOf gufo:Organization,
        uco-core:UcoObject .

cacontology-specialized:MarylandStatePoliceComputerCrimesUnit a owl:Class ;
    rdfs:label "Maryland State Police Computer Crimes Unit"@en ;
    rdfs:comment "Maryland State Police unit coordinating the Maryland Internet Crimes Against Children Task Force. Modeled as gUFO Organization."@en ;
    rdfs:subClassOf cacontology-specialized:StatePoliceComputerCrimesUnit .

cacontology-specialized:MentalHealthSupport a owl:Class ;
    rdfs:label "Mental Health Support"@en ;
    rdfs:comment "Mental health services and support for officers dealing with traumatic content. Modeled as gUFO Organization."@en ;
    rdfs:subClassOf cacontology-specialized:OfficerWellnessProgram .

cacontology-specialized:MultiJurisdictionalOperation a owl:Class ;
    rdfs:label "Multi-Jurisdictional Operation"@en ;
    rdfs:comment "Operation involving multiple jurisdictions and agencies. Modeled as gUFO Event."@en ;
    rdfs:subClassOf cacontology-specialized:NamedOperation .

cacontology-specialized:MultiUnitCoordinationSituation a owl:Class ;
    rdfs:label "Multi-Unit Coordination Situation"@en ;
    rdfs:comment "Complex situation involving coordination between multiple specialized units. Modeled as gUFO Situation."@en ;
    rdfs:subClassOf gufo:Situation .

cacontology-specialized:NamedOperationShape a sh:NodeShape ;
    rdfs:label "Named Operation Shape"@en ;
    rdfs:comment "Validation shape for named operation instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 100 ;
            sh:message "Named operation must have a name (5-100 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path uco-core:name ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Named operation must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Named operation may specify end time."@en ;
            sh:minCount 0 ;
            sh:path uco-core:endTime ],
        [ sh:datatype xsd:integer ;
            sh:maxCount 1 ;
            sh:maxInclusive 10000 ;
            sh:message "Arrest count must be between 0 and 10000."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0 ;
            sh:path cacontology-specialized:arrestCount ] ;
    sh:targetClass cacontology-specialized:NamedOperation .

cacontology-specialized:OfficerWellnessProgramShape a sh:NodeShape ;
    rdfs:label "Officer Wellness Program Shape"@en ;
    rdfs:comment "Validation shape for officer wellness program instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 100 ;
            sh:message "Officer wellness program must have a label (5-100 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path rdfs:label ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 1000 ;
            sh:message "Program description should be 10-1000 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 10 ;
            sh:path uco-core:description ] ;
    sh:targetClass cacontology-specialized:OfficerWellnessProgram .

cacontology-specialized:OngoingAbuseInvestigationShape a sh:NodeShape ;
    rdfs:label "Ongoing Abuse Investigation Shape"@en ;
    rdfs:comment "Validation shape for ongoing abuse investigation instances."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Ongoing abuse investigation must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 1000 ;
            sh:message "Children in ongoing abuse must be between 0 and 1000."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0 ;
            sh:path cacontology-specialized:childrenInOngoingAbuse ] ;
    sh:targetClass cacontology-specialized:OngoingAbuseInvestigation .

cacontology-specialized:OperationEvaluationPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Operation Evaluation Phase"@en ;
    rdfs:comment "Phase of post-operation analysis and evaluation. Modeled as anti-rigid gUFO Phase."@en ;
    rdfs:subClassOf cacontology-specialized:NamedOperation .

cacontology-specialized:OperationExecutionPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Operation Execution Phase"@en ;
    rdfs:comment "Phase of active operation execution. Modeled as anti-rigid gUFO Phase."@en ;
    rdfs:subClassOf cacontology-specialized:NamedOperation .

cacontology-specialized:OperationMetrics a owl:Class ;
    rdfs:label "Operation Metrics"@en ;
    rdfs:comment "Metrics and performance data for specialized operations. Modeled as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-specialized:OperationPlanningPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Operation Planning Phase"@en ;
    rdfs:comment "Phase of operation planning and preparation. Modeled as anti-rigid gUFO Phase."@en ;
    rdfs:subClassOf cacontology-specialized:NamedOperation .

cacontology-specialized:OperationSafeOnlineSummer a owl:Class ;
    rdfs:label "Operation Safe Online Summer"@en ;
    rdfs:comment "National operation across 61 ICAC Task Forces during summer months. Modeled as gUFO Event."@en ;
    rdfs:subClassOf cacontology-specialized:NamedOperation .

cacontology-specialized:OperationUnhinged a owl:Class ;
    rdfs:label "Operation Unhinged"@en ;
    rdfs:comment "Specific operation conducted by Idaho ICAC resulting in 12 arrests. Modeled as gUFO Event."@en ;
    rdfs:subClassOf cacontology-specialized:NamedOperation .

cacontology-specialized:PeerSupport a owl:Class ;
    rdfs:label "Peer Support"@en ;
    rdfs:comment "Peer-to-peer support programs for ICAC personnel. Modeled as gUFO Organization."@en ;
    rdfs:subClassOf cacontology-specialized:OfficerWellnessProgram .

cacontology-specialized:PrinceGeorgesCountyPolice a owl:Class ;
    rdfs:label "Prince George's County Police"@en ;
    rdfs:comment "Prince George's County Police Department supporting Maryland State Police computer crimes investigations. Modeled as gUFO Organization."@en ;
    rdfs:subClassOf cacontology-specialized:CountyPoliceSupport .

cacontology-specialized:ProfessionalTrainingEventShape a sh:NodeShape ;
    rdfs:label "Professional Training Event Shape"@en ;
    rdfs:comment "Validation shape for professional training event instances."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Professional training event must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ],
        [ sh:datatype xsd:integer ;
            sh:maxCount 1 ;
            sh:maxInclusive 1000 ;
            sh:message "Professionals trained must be between 1 and 1000 when specified."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1 ;
            sh:path cacontology-specialized:professionalsTrained ] ;
    sh:targetClass cacontology-specialized:ProfessionalTrainingEvent .

cacontology-specialized:RapidResponseTeamShape a sh:NodeShape ;
    rdfs:label "Rapid Response Team Shape"@en ;
    rdfs:comment "Validation shape for rapid response team instances."@en ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 24.0 ;
            sh:message "Rapid response time must be between 0.25 and 24 hours."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.25 ;
            sh:path cacontology-specialized:rapidResponseTime ] ;
    sh:targetClass cacontology-specialized:RapidResponseTeam .

cacontology-specialized:SafetyEducationEventShape a sh:NodeShape ;
    rdfs:label "Safety Education Event Shape"@en ;
    rdfs:comment "Validation shape for safety education event instances."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Safety education event must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ],
        [ sh:datatype xsd:integer ;
            sh:maxCount 1 ;
            sh:maxInclusive 10000 ;
            sh:message "Attendee count must be between 1 and 10000 when specified."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1 ;
            sh:path cacontology-specialized:attendeeCount ] ;
    sh:targetClass cacontology-specialized:SafetyEducationEvent .

cacontology-specialized:SeasonalCyberTipPatternShape a sh:NodeShape ;
    rdfs:label "Seasonal Cyber Tip Pattern Shape"@en ;
    rdfs:comment "Validation shape for seasonal cyber tip pattern instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "increased_activity" "school_break" "vacation_period" "holiday_season" "exam_period" ) ;
            sh:maxCount 1 ;
            sh:message "Cyber tip pattern type must be from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-specialized:cyberTipPatternType ] ;
    sh:targetClass cacontology-specialized:SeasonalCyberTipPattern .

cacontology-specialized:SeasonalOperationsUnitShape a sh:NodeShape ;
    rdfs:label "Seasonal Operations Unit Shape"@en ;
    rdfs:comment "Validation shape for seasonal operations unit instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "spring_break" "summer" "school_year_end" "winter_break" "back_to_school" ) ;
            sh:maxCount 1 ;
            sh:message "Operation season must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-specialized:operationSeason ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:message "Operation months must be in format 'Month-Month' (e.g., 'March-May')."@en ;
            sh:minCount 0 ;
            sh:path cacontology-specialized:operationMonths ;
            sh:pattern "^[A-Za-z]+-[A-Za-z]+$" ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Seasonal effectiveness must be between 0.0 and 1.0."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-specialized:seasonalEffectiveness ] ;
    sh:targetClass cacontology-specialized:SeasonalOperationsUnit .

cacontology-specialized:SeasonalTimingValidationShape a sh:NodeShape ;
    rdfs:label "Seasonal Timing Validation Shape"@en ;
    rdfs:comment "Validates seasonal operation timing consistency."@en ;
    sh:sparql [ sh:message "Seasonal operations should have consistent season and month specifications."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-specialized:operationSeason "spring_break" ;
                      cacontology-specialized:operationMonths ?months .
                FILTER (!REGEX(?months, "March|April|May", "i"))
            }
        """ ] ;
    sh:targetClass cacontology-specialized:SeasonalOperationsUnit .

cacontology-specialized:SpecializedCapabilitySituation a owl:Class ;
    rdfs:label "Specialized Capability Situation"@en ;
    rdfs:comment "Situation requiring deployment of specialized unit capabilities. Modeled as gUFO Situation."@en ;
    rdfs:subClassOf gufo:Situation .

cacontology-specialized:SpecializedInvestigativeUnitShape a sh:NodeShape ;
    rdfs:label "Specialized Investigative Unit Shape"@en ;
    rdfs:comment "Validation shape for specialized investigative unit instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 100 ;
            sh:message "Specialized unit must have a name (5-100 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path uco-core:name ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 1000 ;
            sh:message "Operational capacity must be between 1 and 1000 when specified."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1 ;
            sh:path cacontology-specialized:operationalCapacity ] ;
    sh:targetClass cacontology-specialized:SpecializedInvestigativeUnit .

cacontology-specialized:SpecializedOperatorRole a gufo:Role,
        owl:Class ;
    rdfs:label "Specialized Operator Role"@en ;
    rdfs:comment "Role of specialized operator within unit. Modeled as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf uco-role:Role .

cacontology-specialized:SpecializedUnitOperationShape a sh:NodeShape ;
    rdfs:label "Specialized Unit Operation Shape"@en ;
    rdfs:comment "Validates that specialized units participate in operations."@en ;
    sh:sparql [ sh:message "Specialized investigative unit should participate in at least one operation."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-specialized:SpecializedInvestigativeUnit .
                FILTER NOT EXISTS {
                    $this cacontology-specialized:participatesInOperation ?operation .
                }
            }
        """ ] ;
    sh:targetClass cacontology-specialized:SpecializedInvestigativeUnit .

cacontology-specialized:StressManagement a owl:Class ;
    rdfs:label "Stress Management"@en ;
    rdfs:comment "Programs and techniques for managing work-related stress. Modeled as gUFO Organization."@en ;
    rdfs:subClassOf cacontology-specialized:OfficerWellnessProgram .

cacontology-specialized:TacticalUnit a owl:Class ;
    rdfs:label "Tactical Unit"@en ;
    rdfs:comment "Unit handling high-risk tactical operations. Modeled as gUFO Organization."@en ;
    rdfs:subClassOf cacontology-specialized:SpecializedInvestigativeUnit .

cacontology-specialized:TechnicalSpecialistRole a gufo:Role,
        owl:Class ;
    rdfs:label "Technical Specialist Role"@en ;
    rdfs:comment "Role of technical specialist providing specialized capabilities. Modeled as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf uco-role:Role .

cacontology-specialized:TemporalValidationShape a sh:NodeShape ;
    rdfs:label "Temporal Validation Shape"@en ;
    rdfs:comment "Validates temporal consistency for operations and events."@en ;
    sh:sparql [ sh:message "Start time must be before end time when both are specified."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this uco-core:startTime ?start ;
                      uco-core:endTime ?end .
                FILTER (?start >= ?end)
            }
        """ ] ;
    sh:targetClass cacontology-specialized:AffiliateJointOperation,
        cacontology-specialized:EmergencyResponseCoordination,
        cacontology-specialized:K9SearchOperation,
        cacontology-specialized:NamedOperation,
        cacontology-specialized:OngoingAbuseInvestigation,
        cacontology-specialized:ProfessionalTrainingEvent,
        cacontology-specialized:SafetyEducationEvent .

cacontology-specialized:TherapyDogShape a sh:NodeShape ;
    rdfs:label "Therapy Dog Shape"@en ;
    rdfs:comment "Validation shape for therapy dog instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 50 ;
            sh:message "Therapy dog must have a name (2-50 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 2 ;
            sh:path uco-core:name ],
        [ sh:class uco-identity:Person ;
            sh:message "Therapy dog must provide wellness support to at least one person."@en ;
            sh:minCount 1 ;
            sh:path cacontology-specialized:providesWellnessSupport ] ;
    sh:targetClass cacontology-specialized:TherapyDog .

cacontology-specialized:UndercoverUnit a owl:Class ;
    rdfs:label "Undercover Unit"@en ;
    rdfs:comment "Unit conducting undercover operations. Modeled as gUFO Organization."@en ;
    rdfs:subClassOf cacontology-specialized:SpecializedInvestigativeUnit .

cacontology-specialized:UnitCommanderRole a gufo:Role,
        owl:Class ;
    rdfs:label "Unit Commander Role"@en ;
    rdfs:comment "Role of commanding officer for specialized unit. Modeled as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf uco-role:Role .

cacontology-specialized:UnitDeploymentPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Unit Deployment Phase"@en ;
    rdfs:comment "Phase when specialized unit is deployed for operations. Modeled as anti-rigid gUFO Phase."@en ;
    rdfs:subClassOf cacontology-specialized:SpecializedInvestigativeUnit .

cacontology-specialized:UnitMaintenancePhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Unit Maintenance Phase"@en ;
    rdfs:comment "Phase for equipment maintenance and unit readiness. Modeled as anti-rigid gUFO Phase."@en ;
    rdfs:subClassOf cacontology-specialized:SpecializedInvestigativeUnit .

cacontology-specialized:UnitTrainingPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Unit Training Phase"@en ;
    rdfs:comment "Phase focused on specialized unit training and preparation. Modeled as anti-rigid gUFO Phase."@en ;
    rdfs:subClassOf cacontology-specialized:SpecializedInvestigativeUnit .

cacontology-specialized:VictimServicesUnit a owl:Class ;
    rdfs:label "Victim Services Unit"@en ;
    rdfs:comment "Unit providing specialized victim services and support. Modeled as gUFO Organization."@en ;
    rdfs:subClassOf cacontology-specialized:SpecializedInvestigativeUnit .

cacontology-specialized:WellnessCheckShape a sh:NodeShape ;
    rdfs:label "Wellness Check Shape"@en ;
    rdfs:comment "Validation shape for wellness check instances."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Wellness check must specify when it was conducted."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ],
        [ sh:class uco-identity:Person ;
            sh:maxCount 1 ;
            sh:message "Wellness check must specify who performed it."@en ;
            sh:minCount 1 ;
            sh:path uco-action:performer ] ;
    sh:targetClass cacontology-specialized:WellnessCheck .

cacontology-specialized:WellnessProgramCrossReferenceShape a sh:NodeShape ;
    rdfs:label "Wellness Program Cross Reference Shape"@en ;
    rdfs:comment "Validates cross-references for officer wellness programs."@en ;
    sh:sparql [ sh:message "Officer wellness program should have associated wellness checks or support activities."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-specialized:OfficerWellnessProgram .
                FILTER NOT EXISTS {
                    { ?check a cacontology-specialized:WellnessCheck } UNION
                    { ?support a cacontology-specialized:MentalHealthSupport } UNION
                    { ?therapy a cacontology-specialized:TherapyDog }
                }
            }
        """ ] ;
    sh:targetClass cacontology-specialized:OfficerWellnessProgram .

cacontology-specialized:hasOperationBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has operation begin point"@en ;
    rdfs:comment "Temporal begin point for named operation."@en ;
    rdfs:domain cacontology-specialized:NamedOperation ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-specialized:hasOperationEndPoint a owl:DatatypeProperty ;
    rdfs:label "has operation end point"@en ;
    rdfs:comment "Temporal end point for named operation."@en ;
    rdfs:domain cacontology-specialized:NamedOperation ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-specialized:hasPhaseBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has phase begin point"@en ;
    rdfs:comment "Temporal begin point for operational phase."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-specialized:hasPhaseEndPoint a owl:DatatypeProperty ;
    rdfs:label "has phase end point"@en ;
    rdfs:comment "Temporal end point for operational phase."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-specialized:hasRoleBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has role begin point"@en ;
    rdfs:comment "Temporal begin point for specialized role."@en ;
    rdfs:domain gufo:Role ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-specialized:hasRoleEndPoint a owl:DatatypeProperty ;
    rdfs:label "has role end point"@en ;
    rdfs:comment "Temporal end point for specialized role."@en ;
    rdfs:domain gufo:Role ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-specialized:hasUnitBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has unit begin point"@en ;
    rdfs:comment "Temporal begin point for specialized unit operation."@en ;
    rdfs:domain cacontology-specialized:SpecializedInvestigativeUnit ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-specialized:hasUnitEndPoint a owl:DatatypeProperty ;
    rdfs:label "has unit end point"@en ;
    rdfs:comment "Temporal end point for specialized unit operation."@en ;
    rdfs:domain cacontology-specialized:SpecializedInvestigativeUnit ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-specialized:operationDuration a owl:DatatypeProperty ;
    rdfs:label "operation duration"@en ;
    rdfs:comment "Duration of named operation."@en ;
    rdfs:domain cacontology-specialized:NamedOperation ;
    rdfs:range xsd:duration .

cacontology-specialized:phaseDuration a owl:DatatypeProperty ;
    rdfs:label "phase duration"@en ;
    rdfs:comment "Duration of operational phase."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:duration .

cacontology-specialized:roleDuration a owl:DatatypeProperty ;
    rdfs:label "role duration"@en ;
    rdfs:comment "Duration of specialized role."@en ;
    rdfs:domain gufo:Role ;
    rdfs:range xsd:duration .

cacontology-specialized:unitDuration a owl:DatatypeProperty ;
    rdfs:label "unit duration"@en ;
    rdfs:comment "Duration of specialized unit operation."@en ;
    rdfs:domain cacontology-specialized:SpecializedInvestigativeUnit ;
    rdfs:range xsd:duration .

cacontology-stranger:AbductionCrossReferenceShape a sh:NodeShape ;
    rdfs:label "Abduction Cross Reference Shape"@en ;
    rdfs:comment "Validates cross-references between abduction and related entities."@en ;
    sh:sparql [ sh:message "Stranger abduction must involve abductor and use method."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-stranger:StrangerAbduction .
                FILTER NOT EXISTS {
                    $this cacontology-stranger:involvesAbductor ?abductor ;
                          cacontology-stranger:usesMethod ?method .
                }
            }
        """ ] ;
    sh:targetClass cacontology-stranger:StrangerAbduction .

cacontology-stranger:AbductionMethodShape a sh:NodeShape ;
    rdfs:label "Abduction Method Shape"@en ;
    rdfs:comment "Validation shape for abduction method instances."@en ;
    sh:property [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Abduction method must specify if weapon was involved."@en ;
            sh:minCount 1 ;
            sh:path cacontology-stranger:weaponInvolved ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Abduction method must specify if vehicle was used."@en ;
            sh:minCount 1 ;
            sh:path cacontology-stranger:vehicleUsed ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 10 ;
            sh:message "Number of accomplices must be between 0 and 10."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0 ;
            sh:path cacontology-stranger:accomplices ],
        [ sh:datatype xsd:string ;
            sh:in ( "physical_force" "deception" "enticement" "threat" "weapon_use" "vehicle_abduction" "walk_away" ) ;
            sh:maxCount 1 ;
            sh:message "Abduction method must specify method type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-stranger:methodType ],
        [ sh:datatype xsd:string ;
            sh:in ( "none" "minimal" "moderate" "significant" "extreme" "lethal" ) ;
            sh:maxCount 1 ;
            sh:message "Force level must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-stranger:forceLevel ] ;
    sh:targetClass cacontology-stranger:AbductionMethod .

cacontology-stranger:AbductorProfileShape a sh:NodeShape ;
    rdfs:label "Abductor Profile Shape"@en ;
    rdfs:comment "Validation shape for abductor profile instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "behavioral_profile" "demographic_profile" "psychological_profile" "criminal_profile" "composite_profile" ) ;
            sh:maxCount 1 ;
            sh:message "Abductor profile must specify profile type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-stranger:profileType ],
        [ sh:datatype xsd:string ;
            sh:in ( "under_18" "18_25" "26_35" "36_45" "46_55" "56_65" "over_65" "unknown" ) ;
            sh:maxCount 1 ;
            sh:message "Age range must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-stranger:ageRange ],
        [ sh:datatype xsd:string ;
            sh:in ( "male" "female" "unknown" "other" ) ;
            sh:maxCount 1 ;
            sh:message "Gender profile must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-stranger:genderProfile ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Abductor profile may specify if criminal history exists."@en ;
            sh:minCount 0 ;
            sh:path cacontology-stranger:criminalHistory ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 50 ;
            sh:message "Prior offenses must be between 0 and 50."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0 ;
            sh:path cacontology-stranger:priorOffenses ],
        [ sh:datatype xsd:string ;
            sh:in ( "antisocial_personality" "sexual_deviance" "substance_abuse" "mental_illness" "impulse_control" "multiple_factors" ) ;
            sh:maxCount 1 ;
            sh:message "Psychological factors must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-stranger:psychologicalFactors ] ;
    sh:targetClass cacontology-stranger:AbductorProfile .

cacontology-stranger:ActivatesAlertShape a sh:PropertyShape ;
    sh:class cacontology-stranger:AmberAlert ;
    sh:description "Links abduction to Amber Alert" ;
    sh:maxCount 1 ;
    sh:minCount 0 ;
    sh:name "activates alert" ;
    sh:path cacontology-stranger:activatesAlert .

cacontology-stranger:AlertCriteriaShape a sh:NodeShape ;
    rdfs:label "Alert Criteria Shape"@en ;
    rdfs:comment "Validation shape for alert criteria instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "age_criteria" "abduction_confirmed" "danger_criteria" "description_available" "time_criteria" "jurisdiction_criteria" ) ;
            sh:maxCount 1 ;
            sh:message "Alert criteria must specify criteria type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-stranger:criteriaType ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Alert criteria must specify if criteria is met."@en ;
            sh:minCount 1 ;
            sh:path cacontology-stranger:criteriaMet ],
        [ sh:datatype xsd:string ;
            sh:in ( "confirmed" "probable" "possible" "unverified" "disputed" ) ;
            sh:maxCount 1 ;
            sh:message "Alert criteria must specify verification level from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-stranger:verificationLevel ] ;
    sh:targetClass cacontology-stranger:AlertCriteria .

cacontology-stranger:AmberAlertShape a sh:NodeShape ;
    rdfs:label "Amber Alert Shape"@en ;
    rdfs:comment "Validation shape for Amber Alert instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "local" "regional" "statewide" "multi_state" "national" "international" ) ;
            sh:maxCount 1 ;
            sh:message "Amber Alert must specify alert level from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-stranger:alertLevel ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Amber Alert must specify activation time."@en ;
            sh:minCount 1 ;
            sh:path cacontology-stranger:activationTime ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Amber Alert may specify deactivation time."@en ;
            sh:minCount 0 ;
            sh:path cacontology-stranger:deactivationTime ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 720.0 ;
            sh:message "Alert duration must be between 0.1 and 720 hours (30 days)."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.1 ;
            sh:path cacontology-stranger:alertDuration ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 50 ;
            sh:message "Amber Alert must use between 1 and 50 distribution channels."@en ;
            sh:minCount 1 ;
            sh:minInclusive 1 ;
            sh:path cacontology-stranger:distributionChannels ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 10000 ;
            sh:message "Public response count must be between 0 and 10000."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0 ;
            sh:path cacontology-stranger:publicResponse ] ;
    sh:targetClass cacontology-stranger:AmberAlert .

cacontology-stranger:AmberAlertTimingShape a sh:NodeShape ;
    rdfs:label "Amber Alert Timing Shape"@en ;
    rdfs:comment "Validates Amber Alert timing consistency."@en ;
    sh:sparql [ sh:message "Alert activation time must be before deactivation time when both are specified."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-stranger:activationTime ?activation ;
                      cacontology-stranger:deactivationTime ?deactivation .
                FILTER (?activation >= ?deactivation)
            }
        """ ] ;
    sh:targetClass cacontology-stranger:AmberAlert .

cacontology-stranger:AmberAlertValidationShape a sh:NodeShape ;
    rdfs:label "Amber Alert Validation Shape"@en ;
    rdfs:comment "Validates Amber Alert activation criteria."@en ;
    sh:sparql [ sh:message "Amber Alert must meet all required criteria before activation."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-stranger:AmberAlert ;
                      cacontology-stranger:meetsAlertCriteria ?criteria .
                ?criteria cacontology-stranger:criteriaMet false .
            }
        """ ] ;
    sh:targetClass cacontology-stranger:AmberAlert .

cacontology-stranger:BehavioralProfileShape a sh:NodeShape ;
    rdfs:label "Behavioral Profile Shape"@en ;
    rdfs:comment "Validation shape for behavioral profile instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "deception" "force" "enticement" "authority_figure" "assistance_ruse" "direct_approach" ) ;
            sh:maxCount 1 ;
            sh:message "Behavioral profile must specify approach method from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-stranger:approachMethod ],
        [ sh:datatype xsd:string ;
            sh:in ( "friendly" "authoritative" "threatening" "manipulative" "silent" "erratic" ) ;
            sh:maxCount 1 ;
            sh:message "Communication style must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-stranger:communicationStyle ],
        [ sh:datatype xsd:string ;
            sh:in ( "highly_organized" "organized" "mixed" "disorganized" "chaotic" ) ;
            sh:maxCount 1 ;
            sh:message "Behavioral profile must specify organization level from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-stranger:organizationLevel ] ;
    sh:targetClass cacontology-stranger:BehavioralProfile .

cacontology-stranger:DataQualityShape a sh:NodeShape ;
    rdfs:label "Data Quality Shape"@en ;
    rdfs:comment "Validates data quality for stranger abductions."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Label should be between 5 and 200 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 5 ;
            sh:path rdfs:label ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 1000 ;
            sh:message "Comment should be between 10 and 1000 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 10 ;
            sh:path rdfs:comment ] ;
    sh:targetClass cacontology-stranger:StrangerAbduction .

cacontology-stranger:GroundSearchShape a sh:NodeShape ;
    rdfs:label "Ground Search Shape"@en ;
    rdfs:comment "Validation shape for ground search instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "grid_search" "line_search" "spiral_search" "zone_search" "hasty_search" "containment_search" ) ;
            sh:maxCount 1 ;
            sh:message "Ground search must specify search pattern from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-stranger:searchPattern ],
        [ sh:datatype xsd:string ;
            sh:in ( "urban" "suburban" "rural" "wilderness" "forest" "desert" "mountainous" "coastal" ) ;
            sh:maxCount 1 ;
            sh:message "Ground search must specify terrain type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-stranger:terrainType ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 50 ;
            sh:message "Number of canine units must be between 0 and 50."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0 ;
            sh:path cacontology-stranger:canineUnits ] ;
    sh:targetClass cacontology-stranger:GroundSearch .

cacontology-stranger:InvolvesAbductorShape a sh:PropertyShape ;
    sh:class cacontology-stranger:AbductorProfile ;
    sh:description "Links abduction to abductor profile" ;
    sh:maxCount 1 ;
    sh:minCount 1 ;
    sh:name "involves abductor" ;
    sh:path cacontology-stranger:involvesAbductor .

cacontology-stranger:MeetsAlertCriteriaShape a sh:PropertyShape ;
    sh:class cacontology-stranger:AlertCriteria ;
    sh:description "Links Amber Alert to criteria" ;
    sh:minCount 1 ;
    sh:name "meets alert criteria" ;
    sh:path cacontology-stranger:meetsAlertCriteria .

cacontology-stranger:OpportunisticAbductionShape a sh:NodeShape ;
    rdfs:label "Opportunistic Abduction Shape"@en ;
    rdfs:comment "Validation shape for opportunistic abduction instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "isolated_victim" "lack_of_supervision" "vulnerable_situation" "environmental_factor" "timing_factor" "distraction" ) ;
            sh:maxCount 1 ;
            sh:message "Opportunistic abduction must specify opportunity factor from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-stranger:opportunityFactor ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Opportunistic abduction must specify if it was impulsive in nature."@en ;
            sh:minCount 1 ;
            sh:path cacontology-stranger:impulsiveNature ] ;
    sh:targetClass cacontology-stranger:OpportunisticAbduction .

cacontology-stranger:PredatoryAbductionShape a sh:NodeShape ;
    rdfs:label "Predatory Abduction Shape"@en ;
    rdfs:comment "Validation shape for predatory abduction instances."@en ;
    sh:property [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Predatory abduction must specify if hunting behavior was observed."@en ;
            sh:minCount 1 ;
            sh:path cacontology-stranger:huntingBehavior ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 720.0 ;
            sh:message "Surveillance period must be between 0.1 and 720 hours (30 days)."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.1 ;
            sh:path cacontology-stranger:surveillancePeriod ],
        [ sh:datatype xsd:string ;
            sh:in ( "specific_criteria" "random_selection" "convenience" "vulnerability_based" "proximity_based" ) ;
            sh:maxCount 1 ;
            sh:message "Predatory abduction must specify victim selection method from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-stranger:victimSelection ] ;
    sh:targetClass cacontology-stranger:PredatoryAbduction .

cacontology-stranger:RecoveryTimingShape a sh:NodeShape ;
    rdfs:label "Recovery Timing Shape"@en ;
    rdfs:comment "Validates victim recovery timing consistency."@en ;
    sh:sparql [ sh:message "Recovery time should be after abduction time."@en ;
            sh:select """
            SELECT $this
            WHERE {
                ?abduction cacontology-stranger:resultsInRecovery $this ;
                          cacontology-stranger:abductionTime ?abductionTime .
                $this cacontology-stranger:recoveryTime ?recoveryTime .
                FILTER (?recoveryTime <= ?abductionTime)
            }
        """ ] ;
    sh:targetClass cacontology-stranger:VictimRecovery .

cacontology-stranger:RequiresRescueShape a sh:PropertyShape ;
    sh:class cacontology-stranger:RescueOperation ;
    sh:description "Links recovery to rescue operation" ;
    sh:maxCount 1 ;
    sh:minCount 0 ;
    sh:name "requires rescue" ;
    sh:path cacontology-stranger:requiresRescue .

cacontology-stranger:RescueOperationShape a sh:NodeShape ;
    rdfs:label "Rescue Operation Shape"@en ;
    rdfs:comment "Validation shape for rescue operation instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "tactical_rescue" "negotiated_release" "stealth_operation" "coordinated_assault" "emergency_response" "planned_operation" ) ;
            sh:maxCount 1 ;
            sh:message "Rescue operation must specify operation type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-stranger:operationType ],
        [ sh:datatype xsd:string ;
            sh:in ( "low_risk" "moderate_risk" "high_risk" "extreme_risk" "unknown_risk" ) ;
            sh:maxCount 1 ;
            sh:message "Rescue operation must specify risk assessment from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-stranger:riskAssessment ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 20 ;
            sh:message "Number of specialized units must be between 0 and 20."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0 ;
            sh:path cacontology-stranger:specializedUnits ] ;
    sh:targetClass cacontology-stranger:RescueOperation .

cacontology-stranger:ResultsInRecoveryShape a sh:PropertyShape ;
    sh:class cacontology-stranger:VictimRecovery ;
    sh:description "Links abduction to victim recovery" ;
    sh:maxCount 1 ;
    sh:minCount 0 ;
    sh:name "results in recovery" ;
    sh:path cacontology-stranger:resultsInRecovery .

cacontology-stranger:SearchEffectivenessShape a sh:NodeShape ;
    rdfs:label "Search Effectiveness Shape"@en ;
    rdfs:comment "Validates search operation resource allocation."@en ;
    sh:sparql [ sh:message "Large search operations should have adequate personnel."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-stranger:searchRadius ?radius ;
                      cacontology-stranger:personnelCount ?personnel .
                FILTER (?radius > 50.0 && ?personnel < 20)
            }
        """ ] ;
    sh:targetClass cacontology-stranger:SearchOperation .

cacontology-stranger:SearchOperationShape a sh:NodeShape ;
    rdfs:label "Search Operation Shape"@en ;
    rdfs:comment "Validation shape for search operation instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "ground_search" "air_search" "water_search" "urban_search" "wilderness_search" "multi_domain_search" ) ;
            sh:maxCount 1 ;
            sh:message "Search operation must specify search type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-stranger:searchType ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 1000.0 ;
            sh:message "Search radius must be between 0.1 and 1000 kilometers."@en ;
            sh:minCount 1 ;
            sh:minInclusive 0.1 ;
            sh:path cacontology-stranger:searchRadius ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 8760.0 ;
            sh:message "Search duration must be between 1 and 8760 hours (1 year)."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1.0 ;
            sh:path cacontology-stranger:searchDuration ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 1000 ;
            sh:message "Search operation must have between 1 and 1000 personnel."@en ;
            sh:minCount 1 ;
            sh:minInclusive 1 ;
            sh:path cacontology-stranger:personnelCount ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 100 ;
            sh:message "Search operation must deploy between 1 and 100 resources."@en ;
            sh:minCount 1 ;
            sh:minInclusive 1 ;
            sh:path cacontology-stranger:resourcesDeployed ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Search operation must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Search operation may specify end time."@en ;
            sh:minCount 0 ;
            sh:path uco-core:endTime ] ;
    sh:targetClass cacontology-stranger:SearchOperation .

cacontology-stranger:SearchTimingShape a sh:NodeShape ;
    rdfs:label "Search Timing Shape"@en ;
    rdfs:comment "Validates search operation timing."@en ;
    sh:sparql [ sh:message "Search start time must be before end time when both are specified."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this uco-core:startTime ?start ;
                      uco-core:endTime ?end .
                FILTER (?start >= ?end)
            }
        """ ] ;
    sh:targetClass cacontology-stranger:SearchOperation .

cacontology-stranger:StrangerAbductionShape a sh:NodeShape ;
    rdfs:label "Stranger Abduction Shape"@en ;
    rdfs:comment "Validation shape for stranger abduction instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "opportunistic" "predatory" "planned" "random" "targeted" "crime_of_opportunity" ) ;
            sh:maxCount 1 ;
            sh:message "Stranger abduction must specify abduction type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-stranger:abductionType ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 17 ;
            sh:message "Victim age must be between 0 and 17 years."@en ;
            sh:minCount 1 ;
            sh:minInclusive 0 ;
            sh:path cacontology-stranger:victimAge ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Stranger abduction must specify abduction time."@en ;
            sh:minCount 1 ;
            sh:path cacontology-stranger:abductionTime ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Stranger abduction must specify reported time."@en ;
            sh:minCount 1 ;
            sh:path cacontology-stranger:reportedTime ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 168.0 ;
            sh:message "Response time must be between 0.1 and 168 hours (1 week)."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.1 ;
            sh:path cacontology-stranger:responseTime ],
        [ sh:datatype xsd:string ;
            sh:in ( "critical" "high" "medium" "low" "unknown" ) ;
            sh:maxCount 1 ;
            sh:message "Stranger abduction must specify risk level from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-stranger:riskLevel ],
        [ sh:datatype xsd:string ;
            sh:in ( "public_space" "school_area" "residential_area" "commercial_area" "transportation_hub" "recreational_area" "remote_location" ) ;
            sh:maxCount 1 ;
            sh:message "Stranger abduction must specify abduction location type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-stranger:abductionLocation ] ;
    sh:targetClass cacontology-stranger:StrangerAbduction .

cacontology-stranger:TemporalValidationShape a sh:NodeShape ;
    rdfs:label "Temporal Validation Shape"@en ;
    rdfs:comment "Validates temporal consistency in stranger abductions."@en ;
    sh:sparql [ sh:message "Abduction time must be before or equal to reported time."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-stranger:abductionTime ?abduction ;
                      cacontology-stranger:reportedTime ?reported .
                FILTER (?abduction > ?reported)
            }
        """ ] ;
    sh:targetClass cacontology-stranger:StrangerAbduction .

cacontology-stranger:TriggersSearchShape a sh:PropertyShape ;
    sh:class cacontology-stranger:SearchOperation ;
    sh:description "Links abduction to search operations" ;
    sh:minCount 0 ;
    sh:name "triggers search" ;
    sh:path cacontology-stranger:triggersSearch .

cacontology-stranger:UsesMethodShape a sh:PropertyShape ;
    sh:class cacontology-stranger:AbductionMethod ;
    sh:description "Links abduction to method used" ;
    sh:maxCount 1 ;
    sh:minCount 1 ;
    sh:name "uses method" ;
    sh:path cacontology-stranger:usesMethod .

cacontology-stranger:VehicleAbductionShape a sh:NodeShape ;
    rdfs:label "Vehicle Abduction Shape"@en ;
    rdfs:comment "Validation shape for vehicle abduction instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "sedan" "suv" "truck" "van" "motorcycle" "commercial_vehicle" "unknown" ) ;
            sh:maxCount 1 ;
            sh:message "Vehicle abduction must specify vehicle type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-stranger:vehicleType ],
        [ sh:datatype xsd:string ;
            sh:in ( "white" "black" "gray" "silver" "red" "blue" "green" "yellow" "brown" "other" "unknown" ) ;
            sh:maxCount 1 ;
            sh:message "Vehicle color must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-stranger:vehicleColor ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Vehicle abduction must specify if license plate information is available."@en ;
            sh:minCount 1 ;
            sh:path cacontology-stranger:licensePlateInfo ] ;
    sh:targetClass cacontology-stranger:VehicleAbduction .

cacontology-stranger:VictimRecoveryShape a sh:NodeShape ;
    rdfs:label "Victim Recovery Shape"@en ;
    rdfs:comment "Validation shape for victim recovery instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "safe_recovery" "rescue_operation" "self_escape" "release_by_abductor" "discovery_by_public" "law_enforcement_recovery" ) ;
            sh:maxCount 1 ;
            sh:message "Victim recovery must specify recovery type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-stranger:recoveryType ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Victim recovery must specify recovery time."@en ;
            sh:minCount 1 ;
            sh:path cacontology-stranger:recoveryTime ],
        [ sh:datatype xsd:string ;
            sh:in ( "original_location" "nearby_location" "distant_location" "different_jurisdiction" "different_state" "different_country" ) ;
            sh:maxCount 1 ;
            sh:message "Victim recovery must specify recovery location type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-stranger:recoveryLocation ],
        [ sh:datatype xsd:string ;
            sh:in ( "unharmed" "minor_injuries" "significant_injuries" "critical_condition" "deceased" "unknown" ) ;
            sh:maxCount 1 ;
            sh:message "Victim recovery must specify victim condition from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-stranger:victimCondition ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Victim recovery must specify if medical attention was required."@en ;
            sh:minCount 1 ;
            sh:path cacontology-stranger:medicalAttention ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 8760.0 ;
            sh:message "Captivity duration must be between 0.1 and 8760 hours (1 year)."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.1 ;
            sh:path cacontology-stranger:captivityDuration ] ;
    sh:targetClass cacontology-stranger:VictimRecovery .

cacontology-street:AgeVulnerabilityIndicatorShape a sh:NodeShape ;
    rdfs:label "Age Vulnerability Indicator Shape"@en ;
    rdfs:comment "Validation shape for age vulnerability indicator instances."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 18 ;
            sh:message "Apparent age must be between 0 and 18 years."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0 ;
            sh:path cacontology-street:apparentAge ] ;
    sh:targetClass cacontology-street:AgeVulnerabilityIndicator .

cacontology-street:AlcoholFacilitationShape a sh:NodeShape ;
    rdfs:label "Alcohol Facilitation Shape"@en ;
    rdfs:comment "Validation shape for alcohol facilitation instances."@en ;
    sh:targetClass cacontology-street:AlcoholFacilitation .

cacontology-street:AssessesVulnerabilityShape a sh:PropertyShape ;
    sh:class cacontology-street:StreetVulnerabilityAssessment ;
    sh:description "Links trafficker to vulnerability assessment of potential victim" ;
    sh:minCount 0 ;
    sh:name "assesses vulnerability" ;
    sh:path cacontology-street:assessesVulnerability .

cacontology-street:BehavioralVulnerabilityIndicatorShape a sh:NodeShape ;
    rdfs:label "Behavioral Vulnerability Indicator Shape"@en ;
    rdfs:comment "Validation shape for behavioral vulnerability indicator instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:message "Distress indicators may be specified."@en ;
            sh:minCount 0 ;
            sh:path cacontology-street:distressIndicators ] ;
    sh:targetClass cacontology-street:BehavioralVulnerabilityIndicator .

cacontology-street:BodySellingPropositionShape a sh:NodeShape ;
    rdfs:label "Body Selling Proposition Shape"@en ;
    rdfs:comment "Validation shape for body selling proposition instances."@en ;
    sh:targetClass cacontology-street:BodySellingProposition .

cacontology-street:CasualConversationApproachShape a sh:NodeShape ;
    rdfs:label "Casual Conversation Approach Shape"@en ;
    rdfs:comment "Validation shape for casual conversation approach instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:message "Conversation topic may be specified."@en ;
            sh:minCount 0 ;
            sh:path cacontology-street:conversationTopic ] ;
    sh:targetClass cacontology-street:CasualConversationApproach .

cacontology-street:CommercialDistrictShape a sh:NodeShape ;
    rdfs:label "Commercial District Shape"@en ;
    rdfs:comment "Validation shape for commercial district instances."@en ;
    sh:targetClass cacontology-street:CommercialDistrict .

cacontology-street:DataQualityShape a sh:NodeShape ;
    rdfs:label "Data Quality Shape"@en ;
    rdfs:comment "Validates data quality for street-based recruitment."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Label should be between 5 and 200 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 5 ;
            sh:path rdfs:label ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 1000 ;
            sh:message "Comment should be between 10 and 1000 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 10 ;
            sh:path rdfs:comment ] ;
    sh:targetClass cacontology-street:StreetBasedRecruitment .

cacontology-street:DelayedReportingShape a sh:NodeShape ;
    rdfs:label "Delayed Reporting Shape"@en ;
    rdfs:comment "Validation shape for delayed reporting instances."@en ;
    sh:targetClass cacontology-street:DelayedReporting .

cacontology-street:DemographicTargetingShape a sh:NodeShape ;
    rdfs:label "Demographic Targeting Shape"@en ;
    rdfs:comment "Validation shape for demographic targeting instances."@en ;
    sh:targetClass cacontology-street:DemographicTargeting .

cacontology-street:DigitalFollowUpShape a sh:NodeShape ;
    rdfs:label "Digital Follow Up Shape"@en ;
    rdfs:comment "Validation shape for digital follow-up instances."@en ;
    sh:targetClass cacontology-street:DigitalFollowUp .

cacontology-street:DigitalToPhysicalBridgeShape a sh:NodeShape ;
    rdfs:label "Digital to Physical Bridge Shape"@en ;
    rdfs:comment "Validation shape for digital to physical bridge instances."@en ;
    sh:targetClass cacontology-street:DigitalToPhysicalBridge .

cacontology-street:DirectSolicitationApproachShape a sh:NodeShape ;
    rdfs:label "Direct Solicitation Approach Shape"@en ;
    rdfs:comment "Validation shape for direct solicitation approach instances."@en ;
    sh:targetClass cacontology-street:DirectSolicitationApproach .

cacontology-street:DirectTraffickingPropositionShape a sh:NodeShape ;
    rdfs:label "Direct Trafficking Proposition Shape"@en ;
    rdfs:comment "Validation shape for direct trafficking proposition instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "stripping" "prostitution" "body_selling" ) ;
            sh:maxCount 1 ;
            sh:message "Proposition type must be stripping, prostitution, or body_selling."@en ;
            sh:minCount 0 ;
            sh:path cacontology-street:propositionType ],
        [ sh:datatype xsd:string ;
            sh:in ( "subtle" "direct" "explicit" ) ;
            sh:maxCount 1 ;
            sh:message "Explicitness level must be subtle, direct, or explicit."@en ;
            sh:minCount 0 ;
            sh:path cacontology-street:explicitnessLevel ] ;
    sh:targetClass cacontology-street:DirectTraffickingProposition .

cacontology-street:DisclosureToAuthoritiesShape a sh:NodeShape ;
    rdfs:label "Disclosure to Authorities Shape"@en ;
    rdfs:comment "Validation shape for disclosure to authorities instances."@en ;
    sh:targetClass cacontology-street:DisclosureToAuthorities .

cacontology-street:DocumentsRecruitmentShape a sh:PropertyShape ;
    sh:class cacontology-street:StreetBasedRecruitment ;
    sh:description "Links evidence to street recruitment activity it documents" ;
    sh:minCount 0 ;
    sh:name "documents recruitment" ;
    sh:path cacontology-street:documentsRecruitment .

cacontology-street:DrugFacilitatedVulnerabilityShape a sh:NodeShape ;
    rdfs:label "Drug Facilitated Vulnerability Shape"@en ;
    rdfs:comment "Validation shape for drug-facilitated vulnerability instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "offered" "forced" "shared" ) ;
            sh:maxCount 1 ;
            sh:message "Administration method must be offered, forced, or shared."@en ;
            sh:minCount 0 ;
            sh:path cacontology-street:administrationMethod ] ;
    sh:targetClass cacontology-street:DrugFacilitatedVulnerability .

cacontology-street:EconomicIncentivePresentationShape a sh:NodeShape ;
    rdfs:label "Economic Incentive Presentation Shape"@en ;
    rdfs:comment "Validation shape for economic incentive presentation instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:message "Economic incentive may be specified."@en ;
            sh:minCount 0 ;
            sh:path cacontology-street:economicIncentive ] ;
    sh:targetClass cacontology-street:EconomicIncentivePresentation .

cacontology-street:EscalatesToShape a sh:PropertyShape ;
    sh:class cacontology-street:DirectTraffickingProposition ;
    sh:description "Links initial contact to trafficking proposition escalation" ;
    sh:minCount 0 ;
    sh:name "escalates to" ;
    sh:path cacontology-street:escalatesTo .

cacontology-street:EscalationTimelineValidationShape a sh:NodeShape ;
    rdfs:label "Escalation Timeline Validation Shape"@en ;
    rdfs:comment "Validates temporal consistency in rapid escalation recruitment."@en ;
    sh:sparql [ sh:message "Rapid escalation recruitment should have escalation timeframe less than 24 hours."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-street:RapidEscalationRecruitment ;
                      cacontology-street:escalationTimeframe ?timeframe .
                FILTER (?timeframe >= 24.0)
            }
        """ ] ;
    sh:targetClass cacontology-street:RapidEscalationRecruitment .

cacontology-street:EscapeAttemptShape a sh:NodeShape ;
    rdfs:label "Escape Attempt Shape"@en ;
    rdfs:comment "Validation shape for escape attempt instances."@en ;
    sh:targetClass cacontology-street:EscapeAttempt .

cacontology-street:ExhibitsIndicatorShape a sh:PropertyShape ;
    sh:class cacontology-street:VulnerabilityIndicator ;
    sh:description "Links victim to vulnerability indicator they exhibit" ;
    sh:minCount 0 ;
    sh:name "exhibits indicator" ;
    sh:path cacontology-street:exhibitsIndicator .

cacontology-street:ExplicitCommercialOfferShape a sh:NodeShape ;
    rdfs:label "Explicit Commercial Offer Shape"@en ;
    rdfs:comment "Validation shape for explicit commercial offer instances."@en ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:message "Money amount mentioned must be a non-negative decimal value."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-street:moneyAmountMentioned ] ;
    sh:targetClass cacontology-street:ExplicitCommercialOffer .

cacontology-street:ExploitsVulnerabilityShape a sh:PropertyShape ;
    sh:class cacontology-street:VulnerabilityIndicator ;
    sh:description "Links recruitment to vulnerability being exploited" ;
    sh:minCount 0 ;
    sh:name "exploits vulnerability" ;
    sh:path cacontology-street:exploitsVulnerability .

cacontology-street:FacilitatesTransitionShape a sh:PropertyShape ;
    sh:class cacontology-street:LocationTransition ;
    sh:description "Links transportation method to location transition" ;
    sh:minCount 0 ;
    sh:name "facilitates transition" ;
    sh:path cacontology-street:facilitatesTransition .

cacontology-street:FacilitatesWithSubstanceShape a sh:PropertyShape ;
    sh:class uco-observable:ObservableObject ;
    sh:description "Links recruitment to substance used for facilitation" ;
    sh:minCount 0 ;
    sh:name "facilitates with substance" ;
    sh:path cacontology-street:facilitatesWithSubstance .

cacontology-street:FollowUpTimingValidationShape a sh:NodeShape ;
    rdfs:label "Follow Up Timing Validation Shape"@en ;
    rdfs:comment "Validates follow-up timing consistency."@en ;
    sh:sparql [ sh:message "Follow-up delay should be reasonable (less than 30 days)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-street:PostContactReinforcement ;
                      cacontology-street:followUpDelay ?delay .
                FILTER (?delay >= 720.0)
            }
        """ ] ;
    sh:targetClass cacontology-street:PostContactReinforcement .

cacontology-street:FollowsUpWithShape a sh:PropertyShape ;
    sh:class cacontology-street:PostContactReinforcement ;
    sh:description "Links trafficker to follow-up contact with victim" ;
    sh:minCount 0 ;
    sh:name "follows up with" ;
    sh:path cacontology-street:followsUpWith .

cacontology-street:FoodOfferApproachShape a sh:NodeShape ;
    rdfs:label "Food Offer Approach Shape"@en ;
    rdfs:comment "Validation shape for food offer approach instances."@en ;
    sh:targetClass cacontology-street:FoodOfferApproach .

cacontology-street:HelpOfferApproachShape a sh:NodeShape ;
    rdfs:label "Help Offer Approach Shape"@en ;
    rdfs:comment "Validation shape for help offer approach instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "phone_charging" "food" "ride" "shelter" ) ;
            sh:maxCount 1 ;
            sh:message "Help offer type must be phone_charging, food, ride, or shelter."@en ;
            sh:minCount 0 ;
            sh:path cacontology-street:helpOfferType ] ;
    sh:targetClass cacontology-street:HelpOfferApproach .

cacontology-street:HelpSeekingBehaviorShape a sh:NodeShape ;
    rdfs:label "Help Seeking Behavior Shape"@en ;
    rdfs:comment "Validation shape for help seeking behavior instances."@en ;
    sh:targetClass cacontology-street:HelpSeekingBehavior .

cacontology-street:HighTrafficAreaShape a sh:NodeShape ;
    rdfs:label "High Traffic Area Shape"@en ;
    rdfs:comment "Validation shape for high traffic area instances."@en ;
    sh:targetClass cacontology-street:HighTrafficArea .

cacontology-street:HighwayLocationShape a sh:NodeShape ;
    rdfs:label "Highway Location Shape"@en ;
    rdfs:comment "Validation shape for highway location instances."@en ;
    sh:targetClass cacontology-street:HighwayLocation .

cacontology-street:ImmediateExploitationAttemptShape a sh:NodeShape ;
    rdfs:label "Immediate Exploitation Attempt Shape"@en ;
    rdfs:comment "Validation shape for immediate exploitation attempt instances."@en ;
    sh:targetClass cacontology-street:ImmediateExploitationAttempt .

cacontology-street:ImmediateIsolationShape a sh:NodeShape ;
    rdfs:label "Immediate Isolation Shape"@en ;
    rdfs:comment "Validation shape for immediate isolation instances."@en ;
    sh:targetClass cacontology-street:ImmediateIsolation .

cacontology-street:ImmediateReportingShape a sh:NodeShape ;
    rdfs:label "Immediate Reporting Shape"@en ;
    rdfs:comment "Validation shape for immediate reporting instances."@en ;
    sh:targetClass cacontology-street:ImmediateReporting .

cacontology-street:ImpairmentExploitationShape a sh:NodeShape ;
    rdfs:label "Impairment Exploitation Shape"@en ;
    rdfs:comment "Validation shape for impairment exploitation instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "mild" "moderate" "severe" ) ;
            sh:maxCount 1 ;
            sh:message "Impairment level must be mild, moderate, or severe."@en ;
            sh:minCount 0 ;
            sh:path cacontology-street:impairmentLevel ] ;
    sh:targetClass cacontology-street:ImpairmentExploitation .

cacontology-street:InitialStreetContactShape a sh:NodeShape ;
    rdfs:label "Initial Street Contact Shape"@en ;
    rdfs:comment "Validation shape for initial street contact instances."@en ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:message "Contact duration must be a non-negative decimal value in minutes."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-street:contactDuration ],
        [ sh:datatype xsd:string ;
            sh:in ( "help_offer" "casual_conversation" "direct_solicitation" ) ;
            sh:maxCount 1 ;
            sh:message "Approach method must be help_offer, casual_conversation, or direct_solicitation."@en ;
            sh:minCount 0 ;
            sh:path cacontology-street:approachMethod ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:message "Initial contact location may be specified."@en ;
            sh:minCount 0 ;
            sh:path cacontology-street:initialContactLocation ] ;
    sh:targetClass cacontology-street:InitialStreetContact .

cacontology-street:InitiatesContactShape a sh:PropertyShape ;
    sh:class cacontology-street:InitialStreetContact ;
    sh:description "Links trafficker to initial street contact with victim" ;
    sh:minCount 0 ;
    sh:name "initiates contact" ;
    sh:path cacontology-street:initiatesContact .

cacontology-street:IsolatedLocationShape a sh:NodeShape ;
    rdfs:label "Isolated Location Shape"@en ;
    rdfs:comment "Validation shape for isolated location instances."@en ;
    sh:targetClass cacontology-street:IsolatedLocation .

cacontology-street:IsolatesAtShape a sh:PropertyShape ;
    sh:class cacontology-street:IsolatedLocation ;
    sh:description "Links isolation activity to location used for isolation" ;
    sh:minCount 0 ;
    sh:name "isolates at" ;
    sh:path cacontology-street:isolatesAt .

cacontology-street:IsolationVulnerabilityIndicatorShape a sh:NodeShape ;
    rdfs:label "Isolation Vulnerability Indicator Shape"@en ;
    rdfs:comment "Validation shape for isolation vulnerability indicator instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "alone" "with_friends" "with_family" ) ;
            sh:maxCount 1 ;
            sh:message "Isolation level must be alone, with_friends, or with_family."@en ;
            sh:minCount 0 ;
            sh:path cacontology-street:isolationLevel ] ;
    sh:targetClass cacontology-street:IsolationVulnerabilityIndicator .

cacontology-street:LocationTransitionShape a sh:NodeShape ;
    rdfs:label "Location Transition Shape"@en ;
    rdfs:comment "Validation shape for location transition instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:message "Transportation method may be specified."@en ;
            sh:minCount 0 ;
            sh:path cacontology-street:transportationMethod ] ;
    sh:targetClass cacontology-street:LocationTransition .

cacontology-street:LocationTransitionValidationShape a sh:NodeShape ;
    rdfs:label "Location Transition Validation Shape"@en ;
    rdfs:comment "Validates location transition consistency."@en ;
    sh:sparql [ sh:message "Location transition should have both source and destination locations."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-street:LocationTransition .
                FILTER NOT EXISTS {
                    ?contact cacontology-street:initialContactLocation ?source .
                    ?exploitation cacontology-street:exploitationLocation ?dest .
                    ?contact cacontology-street:escalatesTo ?proposition .
                    ?proposition cacontology-street:respondsTo ?response .
                }
            }
        """ ] ;
    sh:targetClass cacontology-street:LocationTransition .

cacontology-street:MakesPropositionShape a sh:PropertyShape ;
    sh:class cacontology-street:DirectTraffickingProposition ;
    sh:description "Links trafficker to trafficking proposition made to victim" ;
    sh:minCount 0 ;
    sh:name "makes proposition" ;
    sh:path cacontology-street:makesProposition .

cacontology-street:MarijuanaFacilitationShape a sh:NodeShape ;
    rdfs:label "Marijuana Facilitation Shape"@en ;
    rdfs:comment "Validation shape for marijuana facilitation instances."@en ;
    sh:targetClass cacontology-street:MarijuanaFacilitation .

cacontology-street:NeighborhoodTargetingShape a sh:NodeShape ;
    rdfs:label "Neighborhood Targeting Shape"@en ;
    rdfs:comment "Validation shape for neighborhood targeting instances."@en ;
    sh:targetClass cacontology-street:NeighborhoodTargeting .

cacontology-street:NextDayFollowUpShape a sh:NodeShape ;
    rdfs:label "Next Day Follow Up Shape"@en ;
    rdfs:comment "Validation shape for next day follow-up instances."@en ;
    sh:targetClass cacontology-street:NextDayFollowUp .

cacontology-street:OccursAtShape a sh:PropertyShape ;
    sh:class cacontology-street:StreetRecruitmentLocation ;
    sh:description "Links recruitment activity to location where it occurs" ;
    sh:minCount 0 ;
    sh:name "occurs at" ;
    sh:path cacontology-street:occursAt .

cacontology-street:OpportunisticExploitationShape a sh:NodeShape ;
    rdfs:label "Opportunistic Exploitation Shape"@en ;
    rdfs:comment "Validation shape for opportunistic exploitation instances."@en ;
    sh:targetClass cacontology-street:OpportunisticExploitation .

cacontology-street:PersistenceAfterRejectionShape a sh:NodeShape ;
    rdfs:label "Persistence After Rejection Shape"@en ;
    rdfs:comment "Validation shape for persistence after rejection instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "low" "moderate" "high" "aggressive" ) ;
            sh:maxCount 1 ;
            sh:message "Persistence level must be low, moderate, high, or aggressive."@en ;
            sh:minCount 0 ;
            sh:path cacontology-street:persistenceLevel ] ;
    sh:targetClass cacontology-street:PersistenceAfterRejection .

cacontology-street:PersistsAfterShape a sh:PropertyShape ;
    sh:class cacontology-street:TraffickingPropositionRejection ;
    sh:description "Links persistence to initial rejection being overcome" ;
    sh:minCount 0 ;
    sh:name "persists after" ;
    sh:path cacontology-street:persistsAfter .

cacontology-street:PhoneChargingOfferShape a sh:NodeShape ;
    rdfs:label "Phone Charging Offer Shape"@en ;
    rdfs:comment "Validation shape for phone charging offer instances."@en ;
    sh:targetClass cacontology-street:PhoneChargingOffer .

cacontology-street:PhysicalVulnerabilityIndicatorShape a sh:NodeShape ;
    rdfs:label "Physical Vulnerability Indicator Shape"@en ;
    rdfs:comment "Validation shape for physical vulnerability indicator instances."@en ;
    sh:targetClass cacontology-street:PhysicalVulnerabilityIndicator .

cacontology-street:PostContactReinforcementShape a sh:NodeShape ;
    rdfs:label "Post Contact Reinforcement Shape"@en ;
    rdfs:comment "Validation shape for post-contact reinforcement instances."@en ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:message "Follow-up delay must be a non-negative decimal value in hours."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-street:followUpDelay ],
        [ sh:datatype xsd:string ;
            sh:in ( "text" "call" "social_media" "in_person" ) ;
            sh:maxCount 1 ;
            sh:message "Follow-up method must be text, call, social_media, or in_person."@en ;
            sh:minCount 0 ;
            sh:path cacontology-street:followUpMethod ] ;
    sh:targetClass cacontology-street:PostContactReinforcement .

cacontology-street:PretextBasedApproachShape a sh:NodeShape ;
    rdfs:label "Pretext Based Approach Shape"@en ;
    rdfs:comment "Validation shape for pretext-based approach instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "phone_charging" "food_offer" "transportation" ) ;
            sh:maxCount 1 ;
            sh:message "Pretext used must be phone_charging, food_offer, or transportation."@en ;
            sh:minCount 0 ;
            sh:path cacontology-street:pretextUsed ] ;
    sh:targetClass cacontology-street:PretextBasedApproach .

cacontology-street:PropertyValueValidationShape a sh:NodeShape ;
    rdfs:label "Property Value Validation Shape"@en ;
    rdfs:comment "Validates property value ranges and formats."@en ;
    sh:sparql [ sh:message "Explicit commercial offers should mention a money amount when proposition type is specified."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-street:ExplicitCommercialOffer ;
                      cacontology-street:propositionType ?type .
                FILTER NOT EXISTS {
                    $this cacontology-street:moneyAmountMentioned ?amount .
                }
            }
        """ ] ;
    sh:targetClass cacontology-street:DirectTraffickingProposition .

cacontology-street:ProstitutionPropositionShape a sh:NodeShape ;
    rdfs:label "Prostitution Proposition Shape"@en ;
    rdfs:comment "Validation shape for prostitution proposition instances."@en ;
    sh:targetClass cacontology-street:ProstitutionProposition .

cacontology-street:PublicSpaceTargetingShape a sh:NodeShape ;
    rdfs:label "Public Space Targeting Shape"@en ;
    rdfs:comment "Validation shape for public space targeting instances."@en ;
    sh:targetClass cacontology-street:PublicSpaceTargeting .

cacontology-street:RapidEscalationRecruitmentShape a sh:NodeShape ;
    rdfs:label "Rapid Escalation Recruitment Shape"@en ;
    rdfs:comment "Validation shape for rapid escalation recruitment instances."@en ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:message "Escalation timeframe must be a non-negative decimal value in hours."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-street:escalationTimeframe ] ;
    sh:targetClass cacontology-street:RapidEscalationRecruitment .

cacontology-street:RecruitmentCrossReferenceShape a sh:NodeShape ;
    rdfs:label "Recruitment Cross Reference Shape"@en ;
    rdfs:comment "Validates cross-references between recruitment and related entities."@en ;
    sh:sparql [ sh:message "Street-based recruitment should target at least one victim and occur at a location."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-street:StreetBasedRecruitment .
                FILTER NOT EXISTS {
                    $this cacontology-street:targetsVictim ?victim ;
                          cacontology-street:occursAt ?location .
                }
            }
        """ ] ;
    sh:targetClass cacontology-street:StreetBasedRecruitment .

cacontology-street:ReinforcesShape a sh:PropertyShape ;
    sh:class cacontology-street:DirectTraffickingProposition ;
    sh:description "Links follow-up contact to trafficking proposition being reinforced" ;
    sh:minCount 0 ;
    sh:name "reinforces" ;
    sh:path cacontology-street:reinforces .

cacontology-street:RejectsShape a sh:PropertyShape ;
    sh:class cacontology-street:DirectTraffickingProposition ;
    sh:description "Links victim to trafficking proposition they reject" ;
    sh:minCount 0 ;
    sh:name "rejects" ;
    sh:path cacontology-street:rejects .

cacontology-street:ReportsToShape a sh:PropertyShape ;
    sh:class uco-identity:Organization ;
    sh:description "Links victim reporting to law enforcement agency" ;
    sh:minCount 0 ;
    sh:name "reports to" ;
    sh:path cacontology-street:reportsTo .

cacontology-street:ResidentialAreaShape a sh:NodeShape ;
    rdfs:label "Residential Area Shape"@en ;
    rdfs:comment "Validation shape for residential area instances."@en ;
    sh:targetClass cacontology-street:ResidentialArea .

cacontology-street:RespondsToShape a sh:PropertyShape ;
    sh:class cacontology-street:DirectTraffickingProposition ;
    sh:description "Links victim response to trafficking proposition" ;
    sh:minCount 0 ;
    sh:name "responds to" ;
    sh:path cacontology-street:respondsTo .

cacontology-street:SameDayProgressionShape a sh:NodeShape ;
    rdfs:label "Same Day Progression Shape"@en ;
    rdfs:comment "Validation shape for same day progression instances."@en ;
    sh:property [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Same day progression flag may be specified."@en ;
            sh:minCount 0 ;
            sh:path cacontology-street:sameDayProgression ] ;
    sh:targetClass cacontology-street:SameDayProgression .

cacontology-street:SameDayProgressionValidationShape a sh:NodeShape ;
    rdfs:label "Same Day Progression Validation Shape"@en ;
    rdfs:comment "Validates same-day progression logic."@en ;
    sh:sparql [ sh:message "Same day progression should have escalation timeframe less than 24 hours."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-street:SameDayProgression .
                ?recruitment a cacontology-street:RapidEscalationRecruitment ;
                             cacontology-street:escalationTimeframe ?timeframe .
                FILTER (?timeframe >= 24.0)
            }
        """ ] ;
    sh:targetClass cacontology-street:SameDayProgression .

cacontology-street:SecondaryLocationExploitationShape a sh:NodeShape ;
    rdfs:label "Secondary Location Exploitation Shape"@en ;
    rdfs:comment "Validation shape for secondary location exploitation instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:message "Exploitation location may be specified."@en ;
            sh:minCount 0 ;
            sh:path cacontology-street:exploitationLocation ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:message "Distance from contact must be a non-negative decimal value in miles."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-street:distanceFromContact ] ;
    sh:targetClass cacontology-street:SecondaryLocationExploitation .

cacontology-street:SocioeconomicVulnerabilityIndicatorShape a sh:NodeShape ;
    rdfs:label "Socioeconomic Vulnerability Indicator Shape"@en ;
    rdfs:comment "Validation shape for socioeconomic vulnerability indicator instances."@en ;
    sh:targetClass cacontology-street:SocioeconomicVulnerabilityIndicator .

cacontology-street:StreetBasedRecruitmentShape a sh:NodeShape ;
    rdfs:label "Street Based Recruitment Shape"@en ;
    rdfs:comment "Validation shape for street-based recruitment instances."@en ;
    sh:targetClass cacontology-street:StreetBasedRecruitment .

cacontology-street:StreetRecruitmentLocationShape a sh:NodeShape ;
    rdfs:label "Street Recruitment Location Shape"@en ;
    rdfs:comment "Validation shape for street recruitment location instances."@en ;
    sh:targetClass cacontology-street:StreetRecruitmentLocation .

cacontology-street:StreetVulnerabilityAssessmentShape a sh:NodeShape ;
    rdfs:label "Street Vulnerability Assessment Shape"@en ;
    rdfs:comment "Validation shape for street vulnerability assessment instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:message "Vulnerability indicators may be specified."@en ;
            sh:minCount 0 ;
            sh:path cacontology-street:vulnerabilityIndicators ] ;
    sh:targetClass cacontology-street:StreetVulnerabilityAssessment .

cacontology-street:StrippingPropositionShape a sh:NodeShape ;
    rdfs:label "Stripping Proposition Shape"@en ;
    rdfs:comment "Validation shape for stripping proposition instances."@en ;
    sh:targetClass cacontology-street:StrippingProposition .

cacontology-street:SubstanceBasedControlShape a sh:NodeShape ;
    rdfs:label "Substance Based Control Shape"@en ;
    rdfs:comment "Validation shape for substance-based control instances."@en ;
    sh:targetClass cacontology-street:SubstanceBasedControl .

cacontology-street:SubstanceFacilitatedRecruitmentShape a sh:NodeShape ;
    rdfs:label "Substance Facilitated Recruitment Shape"@en ;
    rdfs:comment "Validation shape for substance-facilitated recruitment instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "marijuana" "alcohol" "other" ) ;
            sh:maxCount 1 ;
            sh:message "Substance type must be marijuana, alcohol, or other."@en ;
            sh:minCount 0 ;
            sh:path cacontology-street:substanceType ] ;
    sh:targetClass cacontology-street:SubstanceFacilitatedRecruitment .

cacontology-street:SupportsChargeShape a sh:PropertyShape ;
    sh:class uco-observable:ObservableObject ;
    sh:description "Links street recruitment evidence to criminal charges" ;
    sh:minCount 0 ;
    sh:name "supports charge" ;
    sh:path cacontology-street:supportsCharge .

cacontology-street:TargetsVictimShape a sh:PropertyShape ;
    sh:class uco-identity:Person ;
    sh:description "Links recruitment activity to victim being targeted" ;
    sh:minCount 0 ;
    sh:name "targets victim" ;
    sh:path cacontology-street:targetsVictim .

cacontology-street:TemporalValidationShape a sh:NodeShape ;
    rdfs:label "Temporal Validation Shape"@en ;
    rdfs:comment "Validates temporal consistency in street contacts."@en ;
    sh:sparql [ sh:message "Contact duration should be reasonable (less than 24 hours)."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-street:InitialStreetContact ;
                      cacontology-street:contactDuration ?duration .
                FILTER (?duration >= 1440.0)
            }
        """ ] ;
    sh:targetClass cacontology-street:InitialStreetContact .

cacontology-street:TextMessageFollowUpShape a sh:NodeShape ;
    rdfs:label "Text Message Follow Up Shape"@en ;
    rdfs:comment "Validation shape for text message follow-up instances."@en ;
    sh:targetClass cacontology-street:TextMessageFollowUp .

cacontology-street:TraffickingPropositionReinforcementShape a sh:NodeShape ;
    rdfs:label "Trafficking Proposition Reinforcement Shape"@en ;
    rdfs:comment "Validation shape for trafficking proposition reinforcement instances."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:message "Reinforcement attempts must be a non-negative integer."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0 ;
            sh:path cacontology-street:reinforcementAttempts ] ;
    sh:targetClass cacontology-street:TraffickingPropositionReinforcement .

cacontology-street:TraffickingPropositionRejectionShape a sh:NodeShape ;
    rdfs:label "Trafficking Proposition Rejection Shape"@en ;
    rdfs:comment "Validation shape for trafficking proposition rejection instances."@en ;
    sh:targetClass cacontology-street:TraffickingPropositionRejection .

cacontology-street:TransitAreaShape a sh:NodeShape ;
    rdfs:label "Transit Area Shape"@en ;
    rdfs:comment "Validation shape for transit area instances."@en ;
    sh:targetClass cacontology-street:TransitArea .

cacontology-street:TransitionsToShape a sh:PropertyShape ;
    sh:class cacontology-street:IsolatedLocation ;
    sh:description "Links initial contact location to exploitation location" ;
    sh:minCount 0 ;
    sh:name "transitions to" ;
    sh:path cacontology-street:transitionsTo .

cacontology-street:TransportationOfferApproachShape a sh:NodeShape ;
    rdfs:label "Transportation Offer Approach Shape"@en ;
    rdfs:comment "Validation shape for transportation offer approach instances."@en ;
    sh:targetClass cacontology-street:TransportationOfferApproach .

cacontology-street:UsesPretextShape a sh:PropertyShape ;
    sh:class cacontology-street:PretextBasedApproach ;
    sh:description "Links initial contact to pretext used for approach" ;
    sh:minCount 0 ;
    sh:name "uses pretext" ;
    sh:path cacontology-street:usesPretext .

cacontology-street:VehicleBasedIsolationShape a sh:NodeShape ;
    rdfs:label "Vehicle Based Isolation Shape"@en ;
    rdfs:comment "Validation shape for vehicle-based isolation instances."@en ;
    sh:targetClass cacontology-street:VehicleBasedIsolation .

cacontology-street:VehicleLocationShape a sh:NodeShape ;
    rdfs:label "Vehicle Location Shape"@en ;
    rdfs:comment "Validation shape for vehicle location instances."@en ;
    sh:targetClass cacontology-street:VehicleLocation .

cacontology-street:VictimReportingShape a sh:NodeShape ;
    rdfs:label "Victim Reporting Shape"@en ;
    rdfs:comment "Validation shape for victim reporting instances."@en ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:message "Reporting delay must be a non-negative decimal value in hours."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-street:reportingDelay ],
        [ sh:datatype xsd:string ;
            sh:in ( "police_call" "in_person" "third_party" ) ;
            sh:maxCount 1 ;
            sh:message "Reporting method must be police_call, in_person, or third_party."@en ;
            sh:minCount 0 ;
            sh:path cacontology-street:reportingMethod ] ;
    sh:targetClass cacontology-street:VictimReporting .

cacontology-street:VictimResistanceShape a sh:NodeShape ;
    rdfs:label "Victim Resistance Shape"@en ;
    rdfs:comment "Validation shape for victim resistance instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "none" "passive" "active" "aggressive" ) ;
            sh:maxCount 1 ;
            sh:message "Resistance level must be none, passive, active, or aggressive."@en ;
            sh:minCount 0 ;
            sh:path cacontology-street:resistanceLevel ] ;
    sh:targetClass cacontology-street:VictimResistance .

cacontology-street:VictimStreetResponseShape a sh:NodeShape ;
    rdfs:label "Victim Street Response Shape"@en ;
    rdfs:comment "Validation shape for victim street response instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "acceptance" "rejection" "resistance" "compliance" ) ;
            sh:maxCount 1 ;
            sh:message "Response type must be acceptance, rejection, resistance, or compliance."@en ;
            sh:minCount 0 ;
            sh:path cacontology-street:responseType ] ;
    sh:targetClass cacontology-street:VictimStreetResponse .

cacontology-street:VulnerabilityAssessmentValidationShape a sh:NodeShape ;
    rdfs:label "Vulnerability Assessment Validation Shape"@en ;
    rdfs:comment "Validates vulnerability assessment completeness."@en ;
    sh:sparql [ sh:message "Vulnerability assessment should identify at least one vulnerability indicator."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-street:StreetVulnerabilityAssessment .
                FILTER NOT EXISTS {
                    ?person cacontology-street:assessesVulnerability $this .
                    ?person cacontology-street:exhibitsIndicator ?indicator .
                }
            }
        """ ] ;
    sh:targetClass cacontology-street:StreetVulnerabilityAssessment .

cacontology-street:VulnerabilityIndicatorShape a sh:NodeShape ;
    rdfs:label "Vulnerability Indicator Shape"@en ;
    rdfs:comment "Validation shape for vulnerability indicator instances."@en ;
    sh:targetClass cacontology-street:VulnerabilityIndicator .

cacontology-street:VulnerableNeighborhoodShape a sh:NodeShape ;
    rdfs:label "Vulnerable Neighborhood Shape"@en ;
    rdfs:comment "Validation shape for vulnerable neighborhood instances."@en ;
    sh:targetClass cacontology-street:VulnerableNeighborhood .

cacontology-synthesis:EvidenceGap a owl:Class ;
    rdfs:label "Evidence Gap"@en ;
    rdfs:comment "A stated gap, limitation, or missing intervention area identified by a report."@en ;
    rdfs:subClassOf cacontology-synthesis:Claim .

cacontology-synthesis:InterventionLocus a owl:Class ;
    rdfs:label "Intervention Locus"@en ;
    rdfs:comment "A locus within the TF-CSEA ecosystem/offending chain that an intervention targets (e.g., grooming, payment systems)."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-synthesis:InterventionObjective a owl:Class ;
    rdfs:label "Intervention Objective"@en ;
    rdfs:comment "An objective an intervention serves (e.g., CSAM detection, improve policing effectiveness)."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-synthesis:InterventionOperation a owl:Class ;
    rdfs:label "Intervention Operation"@en ;
    rdfs:comment "A domain of operation for an intervention (e.g., online, hybrid)."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-synthesis:InterventionType a owl:Class ;
    rdfs:label "Intervention Type"@en ;
    rdfs:comment "A category of TF-CSEA intervention (e.g., technological tools and protocols)."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-synthesis:MethodologyStatement a owl:Class ;
    rdfs:label "Methodology Statement"@en ;
    rdfs:comment "A structured statement about methodology (e.g., PRISMA, date range, databases, inclusion criteria)."@en ;
    rdfs:subClassOf cacontology-synthesis:Claim .

cacontology-synthesis:ReportArtifact a owl:Class ;
    rdfs:label "Report Artifact"@en ;
    rdfs:comment "A concrete artifact that realizes a Report (e.g., a PDF file). Use this when you want a report-as-file node that is separate from the report-as-intellectual-work."@en ;
    rdfs:subClassOf uco-observable:ObservableObject .

cacontology-synthesis:ResearchQuestion a owl:Class ;
    rdfs:label "Research Question"@en ;
    rdfs:comment "A research question posed by a report."@en ;
    rdfs:subClassOf cacontology-synthesis:Claim .

cacontology-synthesis:ScopeConstraint a owl:Class ;
    rdfs:label "Scope Constraint"@en ;
    rdfs:comment "A stated boundary on what the report includes/excludes (e.g., out-of-scope topics)."@en ;
    rdfs:subClassOf cacontology-synthesis:Claim .

cacontology-synthesis:assertedInSection a owl:ObjectProperty ;
    rdfs:label "asserted in section"@en ;
    rdfs:comment "Links a claim to the report section where it is asserted."@en ;
    rdfs:domain cacontology-synthesis:Claim ;
    rdfs:range cacontology-synthesis:ReportSection .

cacontology-synthesis:denominator a owl:DatatypeProperty ;
    rdfs:label "denominator"@en ;
    rdfs:comment "Denominator / total coded occurrences for the distribution context."@en ;
    rdfs:domain cacontology-synthesis:DistributionObservation ;
    rdfs:range xsd:integer .

cacontology-synthesis:derivedFromFigure a owl:ObjectProperty ;
    rdfs:label "derived from figure"@en ;
    rdfs:comment "Links an object to a figure that reports it (intended subjects include Claim, DistributionObservation, OffendingChain, and OffendingChainStage)."@en ;
    rdfs:domain uco-core:UcoObject ;
    rdfs:range cacontology-synthesis:ReportFigure .

cacontology-synthesis:doi a owl:DatatypeProperty ;
    rdfs:label "DOI"@en ;
    rdfs:comment "Digital Object Identifier for a report (if known)."@en ;
    rdfs:domain cacontology-synthesis:Report ;
    rdfs:range xsd:string .

cacontology-synthesis:exactQuote a owl:DatatypeProperty ;
    rdfs:label "exact quote"@en ;
    rdfs:comment "Exact quoted text used to support a claim (optional)."@en ;
    rdfs:domain cacontology-synthesis:TextEvidencePointer ;
    rdfs:range xsd:string .

cacontology-synthesis:hasClaim a owl:ObjectProperty ;
    rdfs:label "has claim"@en ;
    rdfs:comment "Optional direct link from a report to claims it contains (findings, recommendations, gaps, scope constraints, etc.)."@en ;
    rdfs:domain cacontology-synthesis:Report ;
    rdfs:range cacontology-synthesis:Claim .

cacontology-synthesis:hasFigure a owl:ObjectProperty ;
    rdfs:label "has figure"@en ;
    rdfs:comment "Links a report to its figures."@en ;
    rdfs:domain cacontology-synthesis:Report ;
    rdfs:range cacontology-synthesis:ReportFigure .

cacontology-synthesis:hasObservation a owl:ObjectProperty ;
    rdfs:label "has observation"@en ;
    rdfs:comment "Optional direct link from a report to distribution observations it contains."@en ;
    rdfs:domain cacontology-synthesis:Report ;
    rdfs:range cacontology-synthesis:DistributionObservation .

cacontology-synthesis:hasOffendingChain a owl:ObjectProperty ;
    rdfs:label "has offending chain"@en ;
    rdfs:domain cacontology-synthesis:Report ;
    rdfs:range cacontology-synthesis:OffendingChain .

cacontology-synthesis:hasSection a owl:ObjectProperty ;
    rdfs:label "has section"@en ;
    rdfs:comment "Links a report to its sections."@en ;
    rdfs:domain cacontology-synthesis:Report ;
    rdfs:range cacontology-synthesis:ReportSection .

cacontology-synthesis:hasStage a owl:ObjectProperty ;
    rdfs:label "has stage"@en ;
    rdfs:domain cacontology-synthesis:OffendingChain ;
    rdfs:range cacontology-synthesis:OffendingChainStage .

cacontology-synthesis:hashScope a owl:DatatypeProperty ;
    rdfs:label "hash scope"@en ;
    rdfs:comment "Machine-readable statement of what text was hashed for an evidence pointer (e.g., 'exactQuote:unicode:verbatim' meaning the exactQuote literal string hashed as-is, without trimming or normalization)."@en ;
    rdfs:domain cacontology-synthesis:TextEvidencePointer ;
    rdfs:range xsd:string .

cacontology-synthesis:influencedJurisdiction a owl:ObjectProperty ;
    rdfs:label "influenced jurisdiction"@en ;
    rdfs:comment "Links a legal instrument to a jurisdiction where it influenced national law or practice (as reported)."@en ;
    rdfs:domain uco-core:UcoObject ;
    rdfs:range cacontology-multi:Jurisdiction .

cacontology-synthesis:lineNumberStart a owl:DatatypeProperty ;
    rdfs:label "line number start"@en ;
    rdfs:comment "First line number used by TextEvidencePointer lineStart/lineEnd for the referenced artifact (typically 1)."@en ;
    rdfs:domain uco-observable:ObservableObject ;
    rdfs:range xsd:integer .

cacontology-synthesis:lineNumbering a owl:DatatypeProperty ;
    rdfs:label "line numbering"@en ;
    rdfs:comment "Line numbering convention used by TextEvidencePointer lineStart/lineEnd (e.g., '1-based')."@en ;
    rdfs:domain uco-observable:ObservableObject ;
    rdfs:range xsd:string .

cacontology-synthesis:mentionsOrganization a owl:ObjectProperty ;
    rdfs:label "mentions organization"@en ;
    rdfs:comment "Links a report to an organization mentioned in the report text."@en ;
    rdfs:domain cacontology-synthesis:Report ;
    rdfs:range uco-identity:Organization .

cacontology-synthesis:nextStage a owl:ObjectProperty ;
    rdfs:label "next stage"@en ;
    rdfs:comment "Links a stage to the next stage in the chain."@en ;
    rdfs:domain cacontology-synthesis:OffendingChainStage ;
    rdfs:range cacontology-synthesis:OffendingChainStage .

cacontology-synthesis:quoteHashSha256 a owl:DatatypeProperty ;
    rdfs:label "quote hash (SHA-256)"@en ;
    rdfs:comment "Legacy inline SHA-256 hash of the exactQuote literal string only (optional). Prefer UCO HashFacet attached to TextEvidencePointer for operational data."@en ;
    rdfs:domain cacontology-synthesis:TextEvidencePointer ;
    rdfs:range xsd:string .

cacontology-synthesis:realizedIn a owl:ObjectProperty ;
    rdfs:label "realized in"@en ;
    rdfs:comment "Links a report-as-intellectual-work to a concrete artifact (e.g., a PDF file observable) that realizes it."@en ;
    rdfs:domain cacontology-synthesis:Report ;
    rdfs:range uco-observable:ObservableObject .

cacontology-synthesis:stageOrder a owl:DatatypeProperty ;
    rdfs:label "stage order"@en ;
    rdfs:comment "1-indexed order of a stage within an offending chain."@en ;
    rdfs:domain cacontology-synthesis:OffendingChainStage ;
    rdfs:range xsd:integer .

cacontology-synthesis-shapes:ActionSemanticsShape a sh:NodeShape ;
    rdfs:label "Action Semantics Shape"@en ;
    sh:property [ sh:maxCount 1 ;
            sh:message "Action must have exactly one performer IRI."@en ;
            sh:minCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:path uco-action:performer ;
            sh:severity sh:Violation ],
        [ sh:message "Action must reference at least one object IRI."@en ;
            sh:minCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:path uco-action:object ;
            sh:severity sh:Violation ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Action must have exactly one startTime (xsd:dateTime)."@en ;
            sh:minCount 1 ;
            sh:path uco-action:startTime ;
            sh:severity sh:Warning ],
        [ sh:message "When present, action result values should be IRI nodes."@en ;
            sh:nodeKind sh:IRI ;
            sh:path uco-action:result ;
            sh:severity sh:Warning ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "When present, action endTime should be at most one xsd:dateTime literal."@en ;
            sh:path uco-action:endTime ;
            sh:severity sh:Warning ] ;
    sh:sparql [ sh:message "When endTime is present, it must be greater than or equal to startTime."@en ;
            sh:select """
            SELECT $this
            WHERE {
              $this <https://ontology.unifiedcyberontology.org/uco/action/startTime> ?s ;
                    <https://ontology.unifiedcyberontology.org/uco/action/endTime> ?e .
              FILTER (?e < ?s)
            }
        """ ;
            sh:severity sh:Warning ] ;
    sh:targetClass case-investigation:InvestigativeAction,
        uco-action:Action .

cacontology-synthesis-shapes:ClaimAboutShape a sh:NodeShape ;
    rdfs:label "Claim Aboutness Shape"@en ;
    sh:property [ sh:message "When provided, claim about-links should reference IRI nodes."@en ;
            sh:nodeKind sh:IRI ;
            sh:path cacontology-synthesis:about ;
            sh:severity sh:Warning ] ;
    sh:targetClass cacontology-synthesis:Claim .

cacontology-synthesis-shapes:ClaimEvidenceShape a sh:NodeShape ;
    rdfs:label "Claim Evidence Shape"@en ;
    sh:property [ sh:class cacontology-synthesis:TextEvidencePointer ;
            sh:message "Claim should link to at least one TextEvidencePointer."@en ;
            sh:minCount 1 ;
            sh:path cacontology-synthesis:supportedByEvidencePointer ] ;
    sh:targetClass cacontology-synthesis:Claim .

cacontology-synthesis-shapes:ClaimInReportShape a sh:NodeShape ;
    rdfs:label "Claim In-Report Shape"@en ;
    sh:deactivated true ;
    sh:property [ sh:class cacontology-synthesis:Report ;
            sh:maxCount 1 ;
            sh:message "Claims should link to the containing Report via inReport (recommended for query ergonomics)."@en ;
            sh:minCount 1 ;
            sh:path cacontology-synthesis:inReport ;
            sh:severity sh:Warning ] ;
    sh:targetClass cacontology-synthesis:Claim .

cacontology-synthesis-shapes:DistributionObservationShape a sh:NodeShape ;
    rdfs:label "Distribution Observation Shape"@en ;
    sh:or ( [ sh:property [ sh:datatype xsd:integer ;
                        sh:message "If using count, count must be an integer >= 0."@en ;
                        sh:minCount 1 ;
                        sh:minInclusive 0 ;
                        sh:path cacontology-synthesis:count ;
                        sh:severity sh:Violation ] ] [ sh:property [ sh:datatype xsd:integer ;
                        sh:message "If using rank, rank must be an integer >= 1."@en ;
                        sh:minCount 1 ;
                        sh:minInclusive 1 ;
                        sh:path cacontology-synthesis:rank ;
                        sh:severity sh:Violation ] ] ) ;
    sh:property [ sh:message "DistributionObservation must have a category (IRI)."@en ;
            sh:minCount 1 ;
            sh:nodeKind sh:IRI ;
            sh:path cacontology-synthesis:category ;
            sh:severity sh:Violation ] ;
    sh:sparql [ sh:message "denominator should only be present when count is present."@en ;
            sh:select """
          SELECT $this
          WHERE {
            $this cacontology-synthesis:denominator ?d .
            FILTER NOT EXISTS { $this cacontology-synthesis:count ?c . }
          }
        """ ;
            sh:severity sh:Warning ],
        [ sh:message "When denominator is present, it must be >= count."@en ;
            sh:select """
          SELECT $this
          WHERE {
            $this cacontology-synthesis:count ?c ;
                  cacontology-synthesis:denominator ?d .
            FILTER (?d < ?c)
          }
        """ ;
            sh:severity sh:Warning ] ;
    sh:targetClass cacontology-synthesis:DistributionObservation .

cacontology-synthesis-shapes:KeyFindingNumberShape a sh:NodeShape ;
    rdfs:label "KeyFinding Number Shape"@en ;
    sh:property [ sh:datatype xsd:integer ;
            sh:maxCount 1 ;
            sh:message "KeyFinding must have exactly one findingNumber (positive integer)."@en ;
            sh:minCount 1 ;
            sh:minInclusive 1 ;
            sh:path cacontology-synthesis:findingNumber ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-synthesis:KeyFinding .

cacontology-synthesis-shapes:RecommendationEvidenceAlignmentShape a sh:NodeShape ;
    rdfs:label "Recommendation Evidence Alignment Shape"@en ;
    sh:property [ sh:class cacontology-synthesis:TextEvidencePointer ;
            sh:message "Recommendation must link to at least one TextEvidencePointer."@en ;
            sh:minCount 1 ;
            sh:path cacontology-synthesis:supportedByEvidencePointer ;
            sh:severity sh:Violation ] ;
    sh:sparql [ sh:message "Recommendation evidence quote should include the corresponding 'Recommendation N:' marker."@en ;
            sh:select """
            SELECT $this
            WHERE {
              $this <https://cacontology.projectvic.org/synthesis#recommendationNumber> ?n ;
                    <https://cacontology.projectvic.org/synthesis#supportedByEvidencePointer> ?ep .
              ?ep <https://cacontology.projectvic.org/synthesis#exactQuote> ?q .
              BIND(CONCAT("recommendation ", STR(?n), ":") AS ?needle)
              FILTER (!CONTAINS(LCASE(STR(?q)), ?needle))
            }
        """ ;
            sh:severity sh:Warning ] ;
    sh:targetClass cacontology-synthesis:Recommendation .

cacontology-synthesis-shapes:RecommendationNumberShape a sh:NodeShape ;
    rdfs:label "Recommendation Number Shape"@en ;
    sh:property [ sh:datatype xsd:integer ;
            sh:maxCount 1 ;
            sh:message "Recommendation must have exactly one recommendationNumber (positive integer)."@en ;
            sh:minCount 1 ;
            sh:minInclusive 1 ;
            sh:path cacontology-synthesis:recommendationNumber ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-synthesis:Recommendation .

cacontology-synthesis-shapes:TextEvidencePointerHashShape a sh:NodeShape ;
    rdfs:label "Text Evidence Pointer Hash Shape"@en ;
    sh:sparql [ sh:message "If exactQuote is present, include either (1) a UCO HashFacet, or (2) legacy quoteHashSha256 + hashScope."@en ;
            sh:select """
          SELECT $this
          WHERE {
            $this cacontology-synthesis:exactQuote ?q .

            FILTER NOT EXISTS {
              # Preferred: HashFacet path
              $this uco-core:hasFacet ?facet .
              ?facet a uco-observable:HashFacet ;
                     uco-observable:hash ?h .
            }

            FILTER NOT EXISTS {
              # Legacy: inline hash + scope
              $this cacontology-synthesis:quoteHashSha256 ?legacyHash ;
                    cacontology-synthesis:hashScope ?scope .
            }
          }
        """ ;
            sh:severity sh:Violation ],
        [ sh:message "When using HashFacet, hashMethod should indicate SHA-256 (common literal variants accepted)."@en ;
            sh:select """
          SELECT $this
          WHERE {
            $this cacontology-synthesis:exactQuote ?q ;
                  uco-core:hasFacet ?facet .
            ?facet a uco-observable:HashFacet ;
                   uco-observable:hash ?h .
            ?h a uco-types:Hash ;
               uco-types:hashMethod ?m .

            FILTER (
              isLiteral(?m) &&
              !(LCASE(STR(?m)) IN ("sha-256","sha256","sha 256"))
            )
          }
        """ ;
            sh:severity sh:Warning ] ;
    sh:targetClass cacontology-synthesis:TextEvidencePointer .

cacontology-synthesis-shapes:TextEvidencePointerShape a sh:NodeShape ;
    rdfs:label "Text Evidence Pointer Shape"@en ;
    sh:message "TextEvidencePointer must include either a (lineStart,lineEnd) range or a (pageStart,pageEnd) range."@en ;
    sh:or ( [ sh:property [ sh:datatype xsd:integer ;
                        sh:maxCount 1 ;
                        sh:message "If using lines, lineStart must be a positive integer."@en ;
                        sh:minCount 1 ;
                        sh:minInclusive 1 ;
                        sh:path cacontology-synthesis:lineStart ],
                    [ sh:datatype xsd:integer ;
                        sh:maxCount 1 ;
                        sh:message "If using lines, lineEnd must be a positive integer."@en ;
                        sh:minCount 1 ;
                        sh:minInclusive 1 ;
                        sh:path cacontology-synthesis:lineEnd ] ;
                sh:sparql [ sh:message "If using lines, lineEnd must be >= lineStart."@en ;
                        sh:select """
                  SELECT $this
                  WHERE {
                    $this cacontology-synthesis:lineStart ?s ;
                          cacontology-synthesis:lineEnd ?e .
                    FILTER (?e < ?s)
                  }
              """ ;
                        sh:severity sh:Violation ] ] [ sh:property [ sh:datatype xsd:integer ;
                        sh:maxCount 1 ;
                        sh:message "If using pages, pageStart must be a positive integer."@en ;
                        sh:minCount 1 ;
                        sh:minInclusive 1 ;
                        sh:path cacontology-synthesis:pageStart ],
                    [ sh:datatype xsd:integer ;
                        sh:maxCount 1 ;
                        sh:message "If using pages, pageEnd must be a positive integer."@en ;
                        sh:minCount 1 ;
                        sh:minInclusive 1 ;
                        sh:path cacontology-synthesis:pageEnd ] ;
                sh:sparql [ sh:message "If using pages, pageEnd must be >= pageStart."@en ;
                        sh:select """
                  SELECT $this
                  WHERE {
                    $this cacontology-synthesis:pageStart ?s ;
                          cacontology-synthesis:pageEnd ?e .
                    FILTER (?e < ?s)
                  }
              """ ;
                        sh:severity sh:Violation ] ] ) ;
    sh:property [ sh:class uco-observable:ObservableObject ;
            sh:maxCount 1 ;
            sh:message "TextEvidencePointer must reference exactly one text artifact (ObservableObject)."@en ;
            sh:minCount 1 ;
            sh:path cacontology-synthesis:referencesArtifact ] ;
    sh:targetClass cacontology-synthesis:TextEvidencePointer .

cacontology-tactical:ArrestOperationShape a sh:NodeShape ;
    rdfs:label "Arrest Operation Shape"@en ;
    rdfs:comment "Validation shape for arrest operation instances."@en,
        "Validation shape for arrest operations in ICAC investigations."@en ;
    sh:property [ sh:datatype rdf:langString ;
            sh:maxCount 1 ;
            sh:message "Arrest operation should have a label."@en ;
            sh:minCount 0 ;
            sh:path rdfs:label ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 100 ;
            sh:message "Target count should be between 1 and 100."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1 ;
            sh:path cacontology-tactical:targetCount ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "May specify the arrest operation time."@en ;
            sh:minCount 0 ;
            sh:path uco-core:startTime ],
        [ sh:datatype xsd:string ;
            sh:in ( "warrant_arrest" "probable_cause_arrest" "consensual_arrest" "traffic_stop_arrest" "field_arrest" "coordinated_arrest" "sting_operation" "undercover_takedown" "multi_target_sweep" "surveillance_arrest" ) ;
            sh:maxCount 1 ;
            sh:message "Arrest operation must specify arrest type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-tactical:arrestType ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 50 ;
            sh:message "Arrest operation must target between 1 and 50 individuals."@en ;
            sh:minCount 1 ;
            sh:minInclusive 1 ;
            sh:path cacontology-tactical:targetCount ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Arrest operation must specify if resistance is expected."@en ;
            sh:minCount 1 ;
            sh:path cacontology-tactical:resistanceExpected ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Arrest operation must specify if weapons are expected."@en ;
            sh:minCount 1 ;
            sh:path cacontology-tactical:weaponsExpected ] ;
    sh:targetClass cacontology-tactical:ArrestOperation .

cacontology-tactical:ArrestReportShape a sh:NodeShape ;
    rdfs:label "Arrest Report Shape"@en ;
    rdfs:comment "Validation shape for arrest report provenance records."@en ;
    sh:property [ sh:datatype rdf:langString ;
            sh:maxCount 1 ;
            sh:message "Arrest report should have a label."@en ;
            sh:minCount 0 ;
            sh:path rdfs:label ],
        [ sh:datatype xsd:date ;
            sh:maxCount 1 ;
            sh:message "May specify the report date."@en ;
            sh:minCount 0 ;
            sh:path cacontology-tactical:reportDate ],
        [ sh:class cacontology-tactical:ArrestOperation ;
            sh:maxCount 1 ;
            sh:message "May link to the arrest operation documented."@en ;
            sh:minCount 0 ;
            sh:path cacontology-tactical:documentsArrest ] ;
    sh:targetClass cacontology-tactical:ArrestReport .

cacontology-tactical:BookingActionShape a sh:NodeShape ;
    rdfs:label "Booking Action Shape"@en ;
    rdfs:comment "Validation shape for booking actions after arrest."@en ;
    sh:property [ sh:datatype rdf:langString ;
            sh:maxCount 1 ;
            sh:message "Booking action should have a label."@en ;
            sh:minCount 0 ;
            sh:path rdfs:label ],
        [ sh:datatype xsd:date ;
            sh:maxCount 1 ;
            sh:message "May specify the booking date."@en ;
            sh:minCount 0 ;
            sh:path cacontology-tactical:bookingDate ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:message "May specify the booking officer."@en ;
            sh:minCount 0 ;
            sh:path cacontology-tactical:bookingOfficer ],
        [ sh:class cacontology-tactical:CorrectionalFacility ;
            sh:maxCount 1 ;
            sh:message "May link to the correctional facility."@en ;
            sh:minCount 0 ;
            sh:path cacontology-tactical:occursAtFacility ] ;
    sh:targetClass cacontology-tactical:BookingAction .

cacontology-tactical:Breacher a owl:Class ;
    rdfs:label "Breacher"@en ;
    rdfs:comment "Specialist responsible for gaining entry through doors, walls, or barriers."@en ;
    rdfs:subClassOf cacontology-tactical:TacticalTeamMember .

cacontology-tactical:BreachingTool a owl:Class ;
    rdfs:label "Breaching Tool"@en ;
    rdfs:comment "Tool used to gain entry through doors, walls, or barriers."@en ;
    rdfs:subClassOf cacontology-tactical:TacticalEquipment .

cacontology-tactical:BriefingTimingShape a sh:NodeShape ;
    rdfs:label "Briefing Timing Shape"@en ;
    rdfs:comment "Validates operation briefing timing."@en ;
    sh:sparql [ sh:message "Pre-operation briefings should occur before operation start time."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-tactical:briefingType "pre_operation" ;
                      cacontology-tactical:briefingDate ?briefingDate .
                ?operation cacontology-tactical:includesBriefing $this ;
                          uco-core:startTime ?operationStart .
                FILTER (?briefingDate >= ?operationStart)
            }
        """ ] ;
    sh:targetClass cacontology-tactical:OperationBriefing .

cacontology-tactical:CommunicationEquipment a owl:Class ;
    rdfs:label "Communication Equipment"@en ;
    rdfs:comment "Specialized communication devices for tactical operations."@en ;
    rdfs:subClassOf cacontology-tactical:TacticalEquipment .

cacontology-tactical:CorrectionalFacilityShape a sh:NodeShape ;
    rdfs:label "Correctional Facility Shape"@en ;
    rdfs:comment "Validation shape for correctional facilities."@en ;
    sh:property [ sh:datatype rdf:langString ;
            sh:maxCount 1 ;
            sh:message "Correctional facility should have a label."@en ;
            sh:minCount 0 ;
            sh:path rdfs:label ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Facility name should be between 1 and 200 characters."@en ;
            sh:minCount 0 ;
            sh:minLength 1 ;
            sh:path cacontology-tactical:correctionalFacilityName ] ;
    sh:targetClass cacontology-tactical:CorrectionalFacility .

cacontology-tactical:DataQualityShape a sh:NodeShape ;
    rdfs:label "Data Quality Shape"@en ;
    rdfs:comment "Validates data quality for tactical operations."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Label should be between 5 and 200 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 5 ;
            sh:path rdfs:label ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 1000 ;
            sh:message "Comment should be between 10 and 1000 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 10 ;
            sh:path rdfs:comment ] ;
    sh:targetClass cacontology-tactical:TacticalOperation .

cacontology-tactical:DynamicEntry a owl:Class ;
    rdfs:label "Dynamic Entry"@en ;
    rdfs:comment "Rapid forced entry into a location to apprehend suspects and secure evidence."@en ;
    rdfs:subClassOf cacontology-tactical:TacticalOperation .

cacontology-tactical:ElectronicSurveillanceShape a sh:NodeShape ;
    rdfs:label "Electronic Surveillance Shape"@en ;
    rdfs:comment "Validation shape for electronic surveillance instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "wiretap" "gps_tracking" "video_surveillance" "audio_surveillance" "digital_monitoring" "communication_intercept" ) ;
            sh:maxCount 1 ;
            sh:message "Electronic surveillance must specify surveillance method from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-tactical:surveillanceMethod ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Electronic surveillance must specify if legal authorization exists."@en ;
            sh:minCount 1 ;
            sh:path cacontology-tactical:legalAuthorization ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 3650.0 ;
            sh:message "Data retention period must be between 1 and 3650 days (10 years)."@en ;
            sh:minCount 1 ;
            sh:minInclusive 1.0 ;
            sh:path cacontology-tactical:dataRetention ] ;
    sh:targetClass cacontology-tactical:ElectronicSurveillance .

cacontology-tactical:ExecutedByTeamShape a sh:PropertyShape ;
    sh:class cacontology-tactical:TacticalTeam ;
    sh:description "Links operation to executing team" ;
    sh:minCount 1 ;
    sh:name "executed by team" ;
    sh:path cacontology-tactical:executedByTeam .

cacontology-tactical:FollowsPlanShape a sh:PropertyShape ;
    sh:class cacontology-tactical:TacticalPlan ;
    sh:description "Links operation to tactical plan" ;
    sh:maxCount 1 ;
    sh:minCount 1 ;
    sh:name "follows plan" ;
    sh:path cacontology-tactical:followsPlan .

cacontology-tactical:GeneratesReportShape a sh:PropertyShape ;
    sh:class cacontology-tactical:PostOperationReport ;
    sh:description "Links operation to post-operation reports" ;
    sh:minCount 0 ;
    sh:name "generates report" ;
    sh:path cacontology-tactical:generatesReport .

cacontology-tactical:HighRiskArrest a owl:Class ;
    rdfs:label "High Risk Arrest"@en ;
    rdfs:comment "Arrest operation involving suspects who pose significant threat or flight risk."@en ;
    rdfs:subClassOf cacontology-tactical:TacticalOperation .

cacontology-tactical:ImmigrationHoldShape a sh:NodeShape ;
    rdfs:label "Immigration Hold Shape"@en ;
    rdfs:comment "Validation shape for immigration holds on arrested suspects."@en ;
    sh:property [ sh:datatype rdf:langString ;
            sh:maxCount 1 ;
            sh:message "Immigration hold should have a label."@en ;
            sh:minCount 0 ;
            sh:path rdfs:label ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:message "May specify the immigration status."@en ;
            sh:minCount 0 ;
            sh:path cacontology-tactical:immigrationStatus ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:message "May specify the reason for immigration hold."@en ;
            sh:minCount 0 ;
            sh:path cacontology-tactical:immigrationHoldReason ] ;
    sh:targetClass cacontology-tactical:ImmigrationHold .

cacontology-tactical:IncludesBriefingShape a sh:PropertyShape ;
    sh:class cacontology-tactical:OperationBriefing ;
    sh:description "Links operation to briefings" ;
    sh:minCount 1 ;
    sh:name "includes briefing" ;
    sh:path cacontology-tactical:includesBriefing .

cacontology-tactical:IncludesSurveillanceShape a sh:PropertyShape ;
    sh:class cacontology-tactical:SurveillanceOperation ;
    sh:description "Links operation to surveillance components" ;
    sh:minCount 0 ;
    sh:name "includes surveillance" ;
    sh:path cacontology-tactical:includesSurveillance .

cacontology-tactical:InterviewWithoutCounselShape a sh:NodeShape ;
    rdfs:label "Interview Without Counsel Shape"@en ;
    rdfs:comment "Validation shape for interviews conducted without legal counsel."@en ;
    sh:property [ sh:datatype rdf:langString ;
            sh:maxCount 1 ;
            sh:message "Interview should have a label."@en ;
            sh:minCount 0 ;
            sh:path rdfs:label ] ;
    sh:targetClass cacontology-tactical:InterviewWithoutCounsel .

cacontology-tactical:LessLethalWeapon a owl:Class ;
    rdfs:label "Less Lethal Weapon"@en ;
    rdfs:comment "Non-lethal weapons for suspect control and compliance."@en ;
    rdfs:subClassOf cacontology-tactical:TacticalEquipment .

cacontology-tactical:LocationIntelligence a owl:Class ;
    rdfs:label "Location Intelligence"@en ;
    rdfs:comment "Information about the physical location of tactical operation."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-tactical:MaintenanceTimingShape a sh:NodeShape ;
    rdfs:label "Maintenance Timing Shape"@en ;
    rdfs:comment "Validates equipment maintenance timing."@en ;
    sh:sparql [ sh:message "Equipment should not be overdue for maintenance."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-tactical:lastMaintenance ?lastMaint ;
                      cacontology-tactical:maintenanceInterval ?interval .
                FILTER ((NOW() - ?lastMaint) > (?interval * 24 * 60 * 60))
            }
        """ ] ;
    sh:targetClass cacontology-tactical:TacticalEquipment .

cacontology-tactical:Marksman a owl:Class ;
    rdfs:label "Marksman"@en ;
    rdfs:comment "Precision shooter providing overwatch and threat elimination capability."@en ;
    rdfs:subClassOf cacontology-tactical:TacticalTeamMember .

cacontology-tactical:Negotiator a owl:Class ;
    rdfs:label "Negotiator"@en ;
    rdfs:comment "Specialist trained in crisis negotiation and de-escalation."@en ;
    rdfs:subClassOf uco-role:Role .

cacontology-tactical:OperationBriefingShape a sh:NodeShape ;
    rdfs:label "Operation Briefing Shape"@en ;
    rdfs:comment "Validation shape for operation briefing instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "pre_operation" "tactical_briefing" "intelligence_briefing" "safety_briefing" "post_operation" "emergency_briefing" ) ;
            sh:maxCount 1 ;
            sh:message "Operation briefing must specify briefing type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-tactical:briefingType ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 8.0 ;
            sh:message "Briefing duration must be between 0.25 and 8 hours."@en ;
            sh:minCount 1 ;
            sh:minInclusive 0.25 ;
            sh:path cacontology-tactical:briefingDuration ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 100 ;
            sh:message "Operation briefing must have between 2 and 100 attendees."@en ;
            sh:minCount 1 ;
            sh:minInclusive 2 ;
            sh:path cacontology-tactical:attendeeCount ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Operation briefing must specify briefing date."@en ;
            sh:minCount 1 ;
            sh:path cacontology-tactical:briefingDate ] ;
    sh:targetClass cacontology-tactical:OperationBriefing .

cacontology-tactical:PostOperationReportShape a sh:NodeShape ;
    rdfs:label "Post Operation Report Shape"@en ;
    rdfs:comment "Validation shape for post operation report instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "after_action_report" "incident_report" "use_of_force_report" "injury_report" "equipment_report" "lessons_learned" ) ;
            sh:maxCount 1 ;
            sh:message "Post operation report must specify report type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-tactical:reportType ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Post operation report must specify report date."@en ;
            sh:minCount 1 ;
            sh:path cacontology-tactical:reportDate ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Post operation report must specify if objectives were achieved."@en ;
            sh:minCount 1 ;
            sh:path cacontology-tactical:objectivesAchieved ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 50 ;
            sh:message "Number of recommendations must be between 0 and 50."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0 ;
            sh:path cacontology-tactical:recommendationsCount ] ;
    sh:targetClass cacontology-tactical:PostOperationReport .

cacontology-tactical:ProtectiveGearShape a sh:NodeShape ;
    rdfs:label "Protective Gear Shape"@en ;
    rdfs:comment "Validation shape for protective gear instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "level_i" "level_ii" "level_iii" "level_iv" "specialized" "custom" ) ;
            sh:maxCount 1 ;
            sh:message "Protective gear must specify protection level from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-tactical:protectionLevel ],
        [ sh:datatype xsd:string ;
            sh:in ( "body_armor" "helmet" "shield" "gas_mask" "eye_protection" "complete_suit" ) ;
            sh:maxCount 1 ;
            sh:message "Protective gear must specify gear type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-tactical:gearType ],
        [ sh:datatype xsd:string ;
            sh:in ( "ballistic" "stab_resistant" "chemical" "biological" "explosive" "multi_threat" ) ;
            sh:maxCount 1 ;
            sh:message "Protective gear must specify threat protection from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-tactical:threatProtection ] ;
    sh:targetClass cacontology-tactical:ProtectiveGear .

cacontology-tactical:ResultsInExecutionShape a sh:PropertyShape ;
    sh:class cacontology-tactical:TacticalExecution ;
    sh:description "Links operation to execution details" ;
    sh:maxCount 1 ;
    sh:minCount 0 ;
    sh:name "results in execution" ;
    sh:path cacontology-tactical:resultsInExecution .

cacontology-tactical:RiskAssessmentValidationShape a sh:NodeShape ;
    rdfs:label "Risk Assessment Validation Shape"@en ;
    rdfs:comment "Validates risk assessment consistency in tactical plans."@en ;
    sh:sparql [ sh:message "High-risk operations should have contingency plans."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-tactical:riskAssessment ?risk ;
                      cacontology-tactical:contingencyPlans ?contingencies .
                FILTER (?risk IN ("high_risk", "extreme_risk", "critical_risk") && ?contingencies = 0)
            }
        """ ] ;
    sh:targetClass cacontology-tactical:TacticalPlan .

cacontology-tactical:SWATOperation a owl:Class ;
    rdfs:label "SWAT Operation"@en ;
    rdfs:comment "Special Weapons and Tactics team operation for high-risk situations."@en ;
    rdfs:subClassOf cacontology-tactical:TacticalOperation .

cacontology-tactical:SearchWarrantOperationShape a sh:NodeShape ;
    rdfs:label "Search Warrant Operation Shape"@en ;
    rdfs:comment "Validation shape for search warrant operation instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "premises_search" "vehicle_search" "person_search" "digital_search" "combined_search" "no_knock_warrant" ) ;
            sh:maxCount 1 ;
            sh:message "Search warrant operation must specify warrant type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-tactical:warrantType ],
        [ sh:datatype xsd:string ;
            sh:in ( "specific_items" "general_evidence" "digital_evidence" "contraband" "weapons" "comprehensive" ) ;
            sh:maxCount 1 ;
            sh:message "Search warrant operation must specify search scope from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-tactical:searchScope ],
        [ sh:datatype xsd:string ;
            sh:in ( "knock_announce" "no_knock" "consent" "key_entry" "forced_entry" "stealth_entry" ) ;
            sh:maxCount 1 ;
            sh:message "Search warrant operation must specify entry method from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-tactical:entryMethod ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Search warrant operation must specify if evidence is expected."@en ;
            sh:minCount 1 ;
            sh:path cacontology-tactical:evidenceExpected ] ;
    sh:targetClass cacontology-tactical:SearchWarrantOperation .

cacontology-tactical:SurveillanceEquipment a owl:Class ;
    rdfs:label "Surveillance Equipment"@en ;
    rdfs:comment "Equipment for monitoring and observing tactical situations."@en ;
    rdfs:subClassOf cacontology-tactical:TacticalEquipment .

cacontology-tactical:SurveillanceOperationShape a sh:NodeShape ;
    rdfs:label "Surveillance Operation Shape"@en ;
    rdfs:comment "Validation shape for surveillance operation instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "physical_surveillance" "electronic_surveillance" "mobile_surveillance" "static_surveillance" "covert_surveillance" "overt_surveillance" ) ;
            sh:maxCount 1 ;
            sh:message "Surveillance operation must specify surveillance type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-tactical:surveillanceType ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 8760.0 ;
            sh:message "Surveillance duration must be between 1 and 8760 hours (1 year)."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1.0 ;
            sh:path cacontology-tactical:surveillanceDuration ],
        [ sh:datatype xsd:string ;
            sh:in ( "person" "location" "vehicle" "communication" "activity" "network" ) ;
            sh:maxCount 1 ;
            sh:message "Surveillance operation must specify target type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-tactical:targetType ],
        [ sh:datatype xsd:string ;
            sh:in ( "low" "moderate" "high" "extreme" "acceptable" "unacceptable" ) ;
            sh:maxCount 1 ;
            sh:message "Surveillance operation must specify detection risk from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-tactical:detectionRisk ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 20 ;
            sh:message "Surveillance team size must be between 1 and 20 members."@en ;
            sh:minCount 1 ;
            sh:minInclusive 1 ;
            sh:path cacontology-tactical:surveillanceTeamSize ] ;
    sh:targetClass cacontology-tactical:SurveillanceOperation .

cacontology-tactical:SuspectProfile a owl:Class ;
    rdfs:label "Suspect Profile"@en ;
    rdfs:comment "Assessment of suspect behavior, capabilities, and threat level."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-tactical:SwatTeamShape a sh:NodeShape ;
    rdfs:label "SWAT Team Shape"@en ;
    rdfs:comment "Validation shape for SWAT team instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "full_time" "part_time" "regional" "multi_jurisdictional" "federal" "specialized" ) ;
            sh:maxCount 1 ;
            sh:message "SWAT team must specify SWAT classification from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-tactical:swatClassification ],
        [ sh:datatype xsd:string ;
            sh:in ( "basic" "standard" "enhanced" "advanced" "specialized" "military_grade" ) ;
            sh:maxCount 1 ;
            sh:message "SWAT team must specify equipment level from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-tactical:equipmentLevel ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 2000.0 ;
            sh:message "SWAT team training hours must be between 40 and 2000 hours."@en ;
            sh:minCount 1 ;
            sh:minInclusive 40.0 ;
            sh:path cacontology-tactical:trainingHours ] ;
    sh:targetClass cacontology-tactical:SwatTeam .

cacontology-tactical:TacticalEquipmentShape a sh:NodeShape ;
    rdfs:label "Tactical Equipment Shape"@en ;
    rdfs:comment "Validation shape for tactical equipment instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "protective_gear" "weapons" "communication" "surveillance" "breaching_tools" "medical_equipment" "vehicles" ) ;
            sh:maxCount 1 ;
            sh:message "Tactical equipment must specify equipment type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-tactical:equipmentType ],
        [ sh:datatype xsd:string ;
            sh:in ( "available" "deployed" "maintenance" "repair" "retired" "reserved" ) ;
            sh:maxCount 1 ;
            sh:message "Tactical equipment must specify equipment status from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-tactical:equipmentStatus ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Tactical equipment must specify if certification is required."@en ;
            sh:minCount 1 ;
            sh:path cacontology-tactical:certificationRequired ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 365.0 ;
            sh:message "Maintenance interval must be between 1 and 365 days."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1.0 ;
            sh:path cacontology-tactical:maintenanceInterval ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Tactical equipment may specify last maintenance date."@en ;
            sh:minCount 0 ;
            sh:path cacontology-tactical:lastMaintenance ] ;
    sh:targetClass cacontology-tactical:TacticalEquipment .

cacontology-tactical:TacticalExecutionShape a sh:NodeShape ;
    rdfs:label "Tactical Execution Shape"@en ;
    rdfs:comment "Validation shape for tactical execution instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "preparation" "deployment" "execution" "consolidation" "withdrawal" "debriefing" ) ;
            sh:maxCount 1 ;
            sh:message "Tactical execution must specify execution phase from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-tactical:executionPhase ],
        [ sh:datatype xsd:string ;
            sh:in ( "successful" "partially_successful" "failed" "aborted" "compromised" "ongoing" ) ;
            sh:maxCount 1 ;
            sh:message "Tactical execution must specify execution status from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-tactical:executionStatus ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Tactical execution must specify if force was used."@en ;
            sh:minCount 1 ;
            sh:path cacontology-tactical:forceUsed ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Tactical execution must specify if injuries were reported."@en ;
            sh:minCount 1 ;
            sh:path cacontology-tactical:injuriesReported ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Tactical execution must specify if evidence was seized."@en ;
            sh:minCount 1 ;
            sh:path cacontology-tactical:evidenceSeized ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 100 ;
            sh:message "Number of arrests made must be between 0 and 100."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0 ;
            sh:path cacontology-tactical:arrestsMade ] ;
    sh:targetClass cacontology-tactical:TacticalExecution .

cacontology-tactical:TacticalOperationCrossReferenceShape a sh:NodeShape ;
    rdfs:label "Tactical Operation Cross Reference Shape"@en ;
    rdfs:comment "Validates cross-references between tactical operations and related entities."@en ;
    sh:sparql [ sh:message "Tactical operation must have executing team, plan, and briefing."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-tactical:TacticalOperation .
                FILTER NOT EXISTS {
                    $this cacontology-tactical:executedByTeam ?team ;
                          cacontology-tactical:followsPlan ?plan ;
                          cacontology-tactical:includesBriefing ?briefing .
                }
            }
        """ ] ;
    sh:targetClass cacontology-tactical:TacticalOperation .

cacontology-tactical:TacticalOperationShape a sh:NodeShape ;
    rdfs:label "Tactical Operation Shape"@en ;
    rdfs:comment "Validation shape for tactical operation instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "arrest_operation" "search_warrant" "surveillance_operation" "undercover_operation" "raid" "rescue_operation" "containment" ) ;
            sh:maxCount 1 ;
            sh:message "Tactical operation must specify operation type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-tactical:operationType ],
        [ sh:datatype xsd:string ;
            sh:in ( "low" "moderate" "high" "extreme" "critical" "unknown" ) ;
            sh:maxCount 1 ;
            sh:message "Tactical operation must specify risk level from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-tactical:riskLevel ],
        [ sh:datatype xsd:string ;
            sh:in ( "planning" "approved" "active" "completed" "aborted" "suspended" "failed" ) ;
            sh:maxCount 1 ;
            sh:message "Tactical operation must specify operation status from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-tactical:operationStatus ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 200 ;
            sh:message "Tactical operation must have between 1 and 200 personnel."@en ;
            sh:minCount 1 ;
            sh:minInclusive 1 ;
            sh:path cacontology-tactical:personnelCount ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 8760.0 ;
            sh:message "Planning duration must be between 1 and 8760 hours (1 year)."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1.0 ;
            sh:path cacontology-tactical:planningDuration ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Tactical operation may have a start time."@en ;
            sh:minCount 0 ;
            sh:path uco-core:startTime ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Tactical operation may have an end time."@en ;
            sh:minCount 0 ;
            sh:path uco-core:endTime ],
        [ sh:datatype xsd:string ;
            sh:in ( "single_target" "multiple_targets" "area_operation" "coordinated_operation" "multi_jurisdictional" "international" ) ;
            sh:maxCount 1 ;
            sh:message "Tactical operation must specify operation scope from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-tactical:operationScope ] ;
    sh:targetClass cacontology-tactical:TacticalOperation .

cacontology-tactical:TacticalPlanShape a sh:NodeShape ;
    rdfs:label "Tactical Plan Shape"@en ;
    rdfs:comment "Validation shape for tactical plan instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "operation_plan" "contingency_plan" "emergency_plan" "standard_plan" "specialized_plan" "multi_phase_plan" ) ;
            sh:maxCount 1 ;
            sh:message "Tactical plan must specify plan type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-tactical:planType ],
        [ sh:datatype xsd:string ;
            sh:in ( "simple" "moderate" "complex" "highly_complex" "multi_dimensional" ) ;
            sh:maxCount 1 ;
            sh:message "Tactical plan must specify plan complexity from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-tactical:planComplexity ],
        [ sh:datatype xsd:string ;
            sh:in ( "supervisor" "commander" "chief" "federal_approval" "multi_agency_approval" "judicial_approval" ) ;
            sh:maxCount 1 ;
            sh:message "Tactical plan must specify approval level from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-tactical:approvalLevel ],
        [ sh:datatype xsd:string ;
            sh:in ( "draft" "review" "approved" "active" "executed" "archived" "cancelled" ) ;
            sh:maxCount 1 ;
            sh:message "Tactical plan must specify plan status from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-tactical:planStatus ],
        [ sh:datatype xsd:string ;
            sh:in ( "low_risk" "moderate_risk" "high_risk" "extreme_risk" "critical_risk" ) ;
            sh:maxCount 1 ;
            sh:message "Tactical plan must specify risk assessment from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-tactical:riskAssessment ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 10 ;
            sh:message "Number of contingency plans must be between 0 and 10."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0 ;
            sh:path cacontology-tactical:contingencyPlans ] ;
    sh:targetClass cacontology-tactical:TacticalPlan .

cacontology-tactical:TacticalTeamShape a sh:NodeShape ;
    rdfs:label "Tactical Team Shape"@en ;
    rdfs:comment "Validation shape for tactical team instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "swat_team" "entry_team" "surveillance_team" "arrest_team" "support_team" "specialized_unit" ) ;
            sh:maxCount 1 ;
            sh:message "Tactical team must specify team type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-tactical:teamType ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 50 ;
            sh:message "Tactical team must have between 2 and 50 members."@en ;
            sh:minCount 1 ;
            sh:minInclusive 2 ;
            sh:path cacontology-tactical:teamSize ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 100 ;
            sh:message "Tactical team must specify team leader (3-100 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 3 ;
            sh:path cacontology-tactical:teamLeader ],
        [ sh:datatype xsd:string ;
            sh:in ( "standby" "ready" "deployed" "engaged" "stand_down" "maintenance" ) ;
            sh:maxCount 1 ;
            sh:message "Tactical team must specify readiness level from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-tactical:readinessLevel ],
        [ sh:datatype xsd:string ;
            sh:in ( "high_risk_entry" "hostage_rescue" "surveillance" "digital_forensics" "explosive_ordnance" "sniper_team" ) ;
            sh:maxCount 1 ;
            sh:message "Team specialization must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-tactical:specialization ],
        [ sh:datatype xsd:string ;
            sh:in ( "basic" "intermediate" "advanced" "expert" "specialized" "elite" ) ;
            sh:maxCount 1 ;
            sh:message "Tactical team must specify certification level from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-tactical:certificationLevel ] ;
    sh:targetClass cacontology-tactical:TacticalTeam .

cacontology-tactical:TeamCertificationShape a sh:NodeShape ;
    rdfs:label "Team Certification Shape"@en ;
    rdfs:comment "Validates tactical team certification requirements."@en ;
    sh:sparql [ sh:message "SWAT teams should have advanced certification and adequate training."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-tactical:SwatTeam ;
                      cacontology-tactical:certificationLevel ?cert ;
                      cacontology-tactical:trainingHours ?hours .
                FILTER (?cert IN ("basic", "intermediate") || ?hours < 200.0)
            }
        """ ] ;
    sh:targetClass cacontology-tactical:TacticalTeam .

cacontology-tactical:TeamLeader a owl:Class ;
    rdfs:label "Team Leader"@en ;
    rdfs:comment "Officer responsible for commanding tactical team operations."@en ;
    rdfs:subClassOf cacontology-tactical:TacticalTeamMember .

cacontology-tactical:TemporalValidationShape a sh:NodeShape ;
    rdfs:label "Temporal Validation Shape"@en ;
    rdfs:comment "Validates temporal consistency in tactical operations."@en ;
    sh:sparql [ sh:message "Operation start time must be before end time when both are specified."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this uco-core:startTime ?start ;
                      uco-core:endTime ?end .
                FILTER (?start >= ?end)
            }
        """ ] ;
    sh:targetClass cacontology-tactical:TacticalOperation .

cacontology-tactical:UsesEquipmentShape a sh:PropertyShape ;
    sh:class cacontology-tactical:TacticalEquipment ;
    sh:description "Links operation to equipment used" ;
    sh:minCount 0 ;
    sh:name "uses equipment" ;
    sh:path cacontology-tactical:usesEquipment .

cacontology-tactical:afterActionReport a owl:DatatypeProperty ;
    rdfs:label "after action report"@en ;
    rdfs:comment "Whether formal after-action report was completed."@en ;
    rdfs:domain cacontology-tactical:TacticalOperation ;
    rdfs:range xsd:boolean .

cacontology-tactical:backupTeamAvailable a owl:DatatypeProperty ;
    rdfs:label "backup team available"@en ;
    rdfs:comment "Whether backup tactical team was on standby."@en ;
    rdfs:domain cacontology-tactical:TacticalOperation ;
    rdfs:range xsd:boolean .

cacontology-tactical:bookedAt a owl:ObjectProperty ;
    rdfs:label "booked at"@en ;
    rdfs:comment "Links booking action to correctional facility."@en ;
    rdfs:domain cacontology-tactical:BookingAction ;
    rdfs:range cacontology-tactical:CorrectionalFacility .

cacontology-tactical:bookingNumber a owl:DatatypeProperty ;
    rdfs:label "booking number"@en ;
    rdfs:comment "Unique booking identifier assigned during intake."@en ;
    rdfs:domain cacontology-tactical:BookingAction ;
    rdfs:range xsd:string .

cacontology-tactical:bookingTime a owl:DatatypeProperty ;
    rdfs:label "booking time"@en ;
    rdfs:comment "Date and time of booking into facility."@en ;
    rdfs:domain cacontology-tactical:BookingAction ;
    rdfs:range xsd:dateTime .

cacontology-tactical:briefingConducted a owl:DatatypeProperty ;
    rdfs:label "briefing conducted"@en ;
    rdfs:comment "Whether pre-operation briefing was conducted."@en ;
    rdfs:domain cacontology-tactical:TacticalOperation ;
    rdfs:range xsd:boolean .

cacontology-tactical:commandedBy a owl:ObjectProperty ;
    rdfs:label "commanded by"@en ;
    rdfs:comment "Links tactical operation to its commanding officer."@en ;
    rdfs:domain cacontology-tactical:TacticalOperation ;
    rdfs:range cacontology-tactical:TacticalCommander .

cacontology-tactical:counselWaived a owl:DatatypeProperty ;
    rdfs:label "counsel waived"@en ;
    rdfs:comment "Whether suspect waived right to legal counsel."@en ;
    rdfs:domain cacontology-tactical:InterviewWithoutCounsel ;
    rdfs:range xsd:boolean .

cacontology-tactical:deployedDuring a owl:ObjectProperty ;
    rdfs:label "deployed during"@en ;
    rdfs:comment "Links equipment to the operation where it was used."@en ;
    rdfs:domain cacontology-tactical:TacticalEquipment ;
    rdfs:range cacontology-tactical:TacticalOperation .

cacontology-tactical:evacuationRequired a owl:DatatypeProperty ;
    rdfs:label "evacuation required"@en ;
    rdfs:comment "Whether civilian evacuation was necessary."@en ;
    rdfs:domain cacontology-tactical:TacticalOperation ;
    rdfs:range xsd:boolean .

cacontology-tactical:facilityName a owl:DatatypeProperty ;
    rdfs:label "facility name"@en ;
    rdfs:comment "Name of the correctional facility (e.g., 'Turner Guilford Knight Correctional Center')."@en ;
    rdfs:domain cacontology-tactical:CorrectionalFacility ;
    rdfs:range xsd:string .

cacontology-tactical:facilityType a owl:DatatypeProperty ;
    rdfs:label "facility type"@en ;
    rdfs:comment "Type of correctional facility (county_jail, state_prison, federal_prison, detention_center, holding_facility)."@en ;
    rdfs:domain cacontology-tactical:CorrectionalFacility ;
    rdfs:range xsd:string .

cacontology-tactical:flightRisk a owl:DatatypeProperty ;
    rdfs:label "flight risk"@en ;
    rdfs:comment "Assessment of suspect's likelihood to flee."@en ;
    rdfs:domain cacontology-tactical:ThreatAssessment ;
    rdfs:range xsd:string .

cacontology-tactical:hasArrestReport a owl:ObjectProperty ;
    rdfs:label "has arrest report"@en ;
    rdfs:comment "Links arrest operation to its formal arrest report."@en ;
    rdfs:domain cacontology-tactical:ArrestOperation ;
    rdfs:range cacontology-tactical:ArrestReport .

cacontology-tactical:hasImmigrationHold a owl:ObjectProperty ;
    rdfs:label "has immigration hold"@en ;
    rdfs:comment "Links booking to immigration hold status."@en ;
    rdfs:domain cacontology-tactical:BookingAction ;
    rdfs:range cacontology-tactical:ImmigrationHold .

cacontology-tactical:holdingAgency a owl:DatatypeProperty ;
    rdfs:label "holding agency"@en ;
    rdfs:comment "Agency requesting the immigration hold (e.g., ICE)."@en ;
    rdfs:domain cacontology-tactical:ImmigrationHold ;
    rdfs:range xsd:string .

cacontology-tactical:informedByTrafficStop a owl:ObjectProperty ;
    rdfs:label "informed by traffic stop"@en ;
    rdfs:comment "Links arrest to prior traffic stop that provided suspect identification. Uses CASE investigation:wasInformedBy pattern."@en ;
    rdfs:domain cacontology-tactical:ArrestOperation ;
    rdfs:range cacontology-tactical:TrafficStop ;
    rdfs:subPropertyOf case-investigation:wasInformedBy .

cacontology-tactical:injuriesOccurred a owl:DatatypeProperty ;
    rdfs:label "injuries occurred"@en ;
    rdfs:comment "Whether any injuries occurred during operation."@en ;
    rdfs:domain cacontology-tactical:TacticalOperation ;
    rdfs:range xsd:boolean .

cacontology-tactical:mediaPresent a owl:DatatypeProperty ;
    rdfs:label "media present"@en ;
    rdfs:comment "Whether media was present during operation."@en ;
    rdfs:domain cacontology-tactical:TacticalOperation ;
    rdfs:range xsd:boolean .

cacontology-tactical:mirandaGiven a owl:DatatypeProperty ;
    rdfs:label "miranda given"@en ;
    rdfs:comment "Whether Miranda rights were read to suspect."@en ;
    rdfs:domain cacontology-tactical:InterviewWithoutCounsel ;
    rdfs:range xsd:boolean .

cacontology-tactical:nationality a owl:DatatypeProperty ;
    rdfs:label "nationality"@en ;
    rdfs:comment "Nationality of the suspect subject to immigration hold."@en ;
    rdfs:domain cacontology-tactical:ImmigrationHold ;
    rdfs:range xsd:string .

cacontology-tactical:negotiationAttempted a owl:DatatypeProperty ;
    rdfs:label "negotiation attempted"@en ;
    rdfs:comment "Whether negotiation was attempted during standoff."@en ;
    rdfs:domain cacontology-tactical:BarricadeSituation ;
    rdfs:range xsd:boolean .

cacontology-tactical:negotiationDuration a owl:DatatypeProperty ;
    rdfs:label "negotiation duration"@en ;
    rdfs:comment "Duration of negotiation attempts (in hours)."@en ;
    rdfs:domain cacontology-tactical:SurrenderNegotiation ;
    rdfs:range xsd:decimal .

cacontology-tactical:negotiationOutcome a owl:DatatypeProperty ;
    rdfs:label "negotiation outcome"@en ;
    rdfs:comment "Result of negotiation (successful_surrender, failed, partial_compliance)."@en ;
    rdfs:domain cacontology-tactical:SurrenderNegotiation ;
    rdfs:range xsd:string .

cacontology-tactical:operatedBy a owl:ObjectProperty ;
    rdfs:label "operated by"@en ;
    rdfs:comment "Links equipment to the team member who operated it."@en ;
    rdfs:domain cacontology-tactical:TacticalEquipment ;
    rdfs:range cacontology-tactical:TacticalTeamMember .

cacontology-tactical:operationAuthorization a owl:ObjectProperty ;
    rdfs:label "operation authorization"@en ;
    rdfs:comment "Legal authorization for tactical operation."@en ;
    rdfs:domain cacontology-tactical:TacticalOperation ;
    rdfs:range uco-observable:ObservableObject .

cacontology-tactical:operationDuration a owl:DatatypeProperty ;
    rdfs:label "operation duration"@en ;
    rdfs:comment "Total duration of tactical operation (in hours)."@en ;
    rdfs:domain cacontology-tactical:TacticalOperation ;
    rdfs:range xsd:decimal .

cacontology-tactical:operationLocation a owl:ObjectProperty ;
    rdfs:label "operation location"@en ;
    rdfs:comment "Physical location where tactical operation takes place."@en ;
    rdfs:domain cacontology-tactical:TacticalOperation ;
    rdfs:range uco-location:Location .

cacontology-tactical:operationOutcome a owl:DatatypeProperty ;
    rdfs:label "operation outcome"@en ;
    rdfs:comment "Result of tactical operation (successful, partial, failed, aborted)."@en ;
    rdfs:domain cacontology-tactical:TacticalOperation ;
    rdfs:range xsd:string .

cacontology-tactical:participatingMember a owl:ObjectProperty ;
    rdfs:label "participating member"@en ;
    rdfs:comment "Links operation to participating tactical team members."@en ;
    rdfs:domain cacontology-tactical:TacticalOperation ;
    rdfs:range cacontology-tactical:TacticalTeamMember .

cacontology-tactical:perimeterEstablished a owl:DatatypeProperty ;
    rdfs:label "perimeter established"@en ;
    rdfs:comment "Whether security perimeter was established around operation area."@en ;
    rdfs:domain cacontology-tactical:TacticalOperation ;
    rdfs:range xsd:boolean .

cacontology-tactical:propertyDamage a owl:DatatypeProperty ;
    rdfs:label "property damage"@en ;
    rdfs:comment "Whether property damage occurred during operation."@en ;
    rdfs:domain cacontology-tactical:TacticalOperation ;
    rdfs:range xsd:boolean .

cacontology-tactical:publicSafetyThreat a owl:DatatypeProperty ;
    rdfs:label "public safety threat"@en ;
    rdfs:comment "Whether operation posed threat to public safety."@en ;
    rdfs:domain cacontology-tactical:TacticalOperation ;
    rdfs:range xsd:boolean .

cacontology-tactical:resistanceEncountered a owl:DatatypeProperty ;
    rdfs:label "resistance encountered"@en ;
    rdfs:comment "Level of suspect resistance (none, passive, active, violent)."@en ;
    rdfs:domain cacontology-tactical:TacticalOperation ;
    rdfs:range xsd:string .

cacontology-tactical:resultsInBooking a owl:ObjectProperty ;
    rdfs:label "results in booking"@en ;
    rdfs:comment "Links arrest operation to the booking action."@en ;
    rdfs:domain cacontology-tactical:ArrestOperation ;
    rdfs:range cacontology-tactical:BookingAction .

cacontology-tactical:specialApprovalRequired a owl:DatatypeProperty ;
    rdfs:label "special approval required"@en ;
    rdfs:comment "Whether special authorization was required for operation."@en ;
    rdfs:domain cacontology-tactical:TacticalOperation ;
    rdfs:range xsd:boolean .

cacontology-tactical:standoffDuration a owl:DatatypeProperty ;
    rdfs:label "standoff duration"@en ;
    rdfs:comment "Duration of barricade standoff situation (in hours)."@en ;
    rdfs:domain cacontology-tactical:BarricadeSituation ;
    rdfs:range xsd:decimal .

cacontology-tactical:suicidalRisk a owl:DatatypeProperty ;
    rdfs:label "suicidal risk"@en ;
    rdfs:comment "Assessment of suspect's suicide risk."@en ;
    rdfs:domain cacontology-tactical:ThreatAssessment ;
    rdfs:range xsd:string .

cacontology-tactical:suspectsArrested a owl:DatatypeProperty ;
    rdfs:label "suspects arrested"@en ;
    rdfs:comment "Number of suspects arrested during operation."@en ;
    rdfs:domain cacontology-tactical:TacticalOperation ;
    rdfs:range xsd:integer .

cacontology-tactical:threatLevel a owl:DatatypeProperty ;
    rdfs:label "threat level"@en ;
    rdfs:comment "Assessed threat level (low, moderate, high, extreme)."@en ;
    rdfs:domain cacontology-tactical:ThreatAssessment ;
    rdfs:range xsd:string .

cacontology-tactical:useOfForceJustified a owl:DatatypeProperty ;
    rdfs:label "use of force justified"@en ;
    rdfs:comment "Assessment of whether force used was justified."@en ;
    rdfs:domain cacontology-tactical:TacticalOperation ;
    rdfs:range xsd:boolean .

cacontology-tactical:weaponsDeployed a owl:DatatypeProperty ;
    rdfs:label "weapons deployed"@en ;
    rdfs:comment "Types of weapons deployed during operation."@en ;
    rdfs:domain cacontology-tactical:TacticalOperation ;
    rdfs:range xsd:string .

cacontology-tactical:weaponsPossible a owl:DatatypeProperty ;
    rdfs:label "weapons possible"@en ;
    rdfs:comment "Whether suspect may possess weapons."@en ;
    rdfs:domain cacontology-tactical:ThreatAssessment ;
    rdfs:range xsd:boolean .

cacontology-taskforce:AllocatesResourcesShape a sh:PropertyShape ;
    sh:class cacontology-taskforce:ResourceAllocation ;
    sh:description "Links task force to resource allocations" ;
    sh:minCount 1 ;
    sh:name "allocates resources" ;
    sh:path cacontology-taskforce:allocatesResources .

cacontology-taskforce:AnalyticsUnit a owl:Class ;
    rdfs:label "Analytics Unit"@en ;
    rdfs:comment "Unit specializing in data analysis and intelligence gathering."@en ;
    rdfs:subClassOf cacontology-taskforce:SpecializedUnit .

cacontology-taskforce:AssessmentPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Assessment Phase"@en ;
    rdfs:comment "Phase involving post-operation assessment and evaluation."@en ;
    rdfs:subClassOf cacontology-taskforce:TaskForceOperation .

cacontology-taskforce:AttorneyGeneralHost a owl:Class ;
    rdfs:label "Attorney General Host"@en ;
    rdfs:comment "State attorney general office hosting ICAC task force (Idaho AG, Illinois AG, Texas AG, etc.)."@en ;
    rdfs:subClassOf cacontology-taskforce:TaskForceHostOrganization .

cacontology-taskforce:CaliforniaRegionalSystem a owl:Class ;
    rdfs:label "California Regional System"@en ;
    rdfs:comment "California's 5-region ICAC system: Fresno, Los Angeles, Sacramento, San Diego, San Jose areas."@en ;
    rdfs:subClassOf cacontology-taskforce:MultiRegionalState .

cacontology-taskforce:CertificationShape a sh:NodeShape ;
    rdfs:label "Certification Shape"@en ;
    rdfs:comment "Validation shape for certification instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "basic_investigator" "advanced_investigator" "digital_forensics" "undercover_operator" "supervisor" "commander" ) ;
            sh:maxCount 1 ;
            sh:message "Certification must specify certification type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-taskforce:certificationType ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Certification must specify certification date."@en ;
            sh:minCount 1 ;
            sh:path cacontology-taskforce:certificationDate ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Certification must specify expiration date."@en ;
            sh:minCount 1 ;
            sh:path cacontology-taskforce:expirationDate ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Certification must specify if renewal is required."@en ;
            sh:minCount 1 ;
            sh:path cacontology-taskforce:renewalRequired ] ;
    sh:targetClass cacontology-taskforce:Certification .

cacontology-taskforce:CertificationValidityShape a sh:NodeShape ;
    rdfs:label "Certification Validity Shape"@en ;
    rdfs:comment "Validates certification date consistency."@en ;
    sh:sparql [ sh:message "Certification date must be before expiration date."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-taskforce:certificationDate ?cert ;
                      cacontology-taskforce:expirationDate ?exp .
                FILTER (?cert >= ?exp)
            }
        """ ] ;
    sh:targetClass cacontology-taskforce:Certification .

cacontology-taskforce:CommanderValidationShape a sh:NodeShape ;
    rdfs:label "Commander Validation Shape"@en ;
    rdfs:comment "Validates task force commander requirements."@en ;
    sh:sparql [ sh:message "Task force commander should have significant experience."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-taskforce:yearsExperience ?experience .
                FILTER (?experience < 5.0)
            }
        """ ] ;
    sh:targetClass cacontology-taskforce:TaskForceCommander .

cacontology-taskforce:ConductsOperationShape a sh:PropertyShape ;
    sh:class cacontology-taskforce:TaskForceOperation ;
    sh:description "Links task force to operations conducted" ;
    sh:minCount 0 ;
    sh:name "conducts operation" ;
    sh:path cacontology-taskforce:conductsOperation .

cacontology-taskforce:CoordinationPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Coordination Phase"@en ;
    rdfs:comment "Phase focused on inter-agency coordination and resource sharing."@en ;
    rdfs:subClassOf cacontology-taskforce:TaskForceOperation .

cacontology-taskforce:DataQualityShape a sh:NodeShape ;
    rdfs:label "Data Quality Shape"@en ;
    rdfs:comment "Validates data quality for task forces."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Label should be between 5 and 200 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 5 ;
            sh:path rdfs:label ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 1000 ;
            sh:message "Comment should be between 10 and 1000 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 10 ;
            sh:path rdfs:comment ] ;
    sh:targetClass cacontology-taskforce:TaskForce .

cacontology-taskforce:DeploymentPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Deployment Phase"@en ;
    rdfs:comment "Phase involving deployment of personnel and resources."@en ;
    rdfs:subClassOf cacontology-taskforce:TaskForceOperation .

cacontology-taskforce:DigitalForensicsUnit a owl:Class ;
    rdfs:label "Digital Forensics Unit"@en ;
    rdfs:comment "Specialized unit focused on digital evidence acquisition and analysis."@en ;
    rdfs:subClassOf cacontology-taskforce:SpecializedUnit .

cacontology-taskforce:DistrictAttorneyHost a owl:Class ;
    rdfs:label "District Attorney Host"@en ;
    rdfs:comment "District or county attorney office hosting ICAC task force (Delaware County DA, Cook County SA, etc.)."@en ;
    rdfs:subClassOf cacontology-taskforce:TaskForceHostOrganization .

cacontology-taskforce:EquipmentSharing a owl:Class ;
    rdfs:label "Equipment Sharing"@en ;
    rdfs:comment "Sharing of specialized equipment or technology."@en ;
    rdfs:subClassOf cacontology-taskforce:ResourceSharing .

cacontology-taskforce:EstablishmentDateValidationShape a sh:NodeShape ;
    rdfs:label "Establishment Date Validation Shape"@en ;
    rdfs:comment "Validates task force establishment date."@en ;
    sh:sparql [ sh:message "Task force establishment date should not be in the future."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-taskforce:establishmentDate ?date .
                FILTER (?date > NOW())
            }
        """ ] ;
    sh:targetClass cacontology-taskforce:TaskForce .

cacontology-taskforce:ExecutionPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Execution Phase"@en ;
    rdfs:comment "Phase involving active execution of task force operations."@en ;
    rdfs:subClassOf cacontology-taskforce:TaskForceOperation .

cacontology-taskforce:ExpertiseSharing a owl:Class ;
    rdfs:label "Expertise Sharing"@en ;
    rdfs:comment "Sharing of specialized knowledge or technical expertise."@en ;
    rdfs:subClassOf cacontology-taskforce:ResourceSharing .

cacontology-taskforce:FederalICACtaskForce a owl:Class ;
    rdfs:label "Federal ICAC Task Force"@en ;
    rdfs:comment "Federal-level ICAC task force for complex or multi-jurisdictional cases."@en ;
    rdfs:subClassOf cacontology-taskforce:ICACtaskForce .

cacontology-taskforce:FloridaRegionalSystem a owl:Class ;
    rdfs:label "Florida Regional System"@en ;
    rdfs:comment "Florida's 3-region ICAC system: Central, Northern, Southern regions."@en ;
    rdfs:subClassOf cacontology-taskforce:MultiRegionalState .

cacontology-taskforce:GovernorsOfficeCrimePreventionFunding a owl:Class ;
    rdfs:label "Governor's Office Crime Prevention Funding"@en ;
    rdfs:comment "State-level funding provided by Governor's Office for Crime Prevention and Policy for ICAC task force operations."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-taskforce:HasMemberShape a sh:PropertyShape ;
    sh:class cacontology-taskforce:TaskForceMember ;
    sh:description "Links task force to its members" ;
    sh:minCount 1 ;
    sh:name "has member" ;
    sh:path cacontology-taskforce:hasMember .

cacontology-taskforce:HoldsCertificationShape a sh:PropertyShape ;
    sh:class cacontology-taskforce:Certification ;
    sh:description "Links member to certifications held" ;
    sh:minCount 0 ;
    sh:name "holds certification" ;
    sh:path cacontology-taskforce:holdsCertification .

cacontology-taskforce:IcacTaskForceShape a sh:NodeShape ;
    rdfs:label "CAC Task Force Shape"@en ;
    rdfs:comment "Validation shape for ICAC task force instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "northeast" "southeast" "midwest" "southwest" "west" "northwest" "central" "national" ) ;
            sh:maxCount 1 ;
            sh:message "ICAC task force must specify ICAC region from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-taskforce:icacRegion ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 50 ;
            sh:message "ICAC task force must specify grant number (5-50 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path cacontology-taskforce:grantNumber ],
        [ sh:datatype xsd:string ;
            sh:in ( "compliant" "non_compliant" "conditional" "under_review" "probationary" "suspended" ) ;
            sh:maxCount 1 ;
            sh:message "ICAC task force must specify compliance status from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-taskforce:complianceStatus ] ;
    sh:targetClass cacontology-taskforce:IcacTaskForce .

cacontology-taskforce:IllinoisICACtaskForce a owl:Class ;
    rdfs:label "Illinois ICAC Task Force"@en ;
    rdfs:comment "Illinois state ICAC task force with specialized capabilities and extensive network partnerships."@en ;
    rdfs:subClassOf cacontology-taskforce:StateICACtaskForce .

cacontology-taskforce:IntelligenceSharing a owl:Class ;
    rdfs:label "Intelligence Sharing"@en ;
    rdfs:comment "Sharing of intelligence and investigative information."@en ;
    rdfs:subClassOf cacontology-taskforce:ResourceSharing .

cacontology-taskforce:InterAgencyCoordination a owl:Class ;
    rdfs:label "Inter Agency Coordination"@en ;
    rdfs:comment "Coordination mechanism between different law enforcement agencies."@en ;
    rdfs:subClassOf cacontology-taskforce:CoordinationMechanism .

cacontology-taskforce:JointOperationShape a sh:NodeShape ;
    rdfs:label "Joint Operation Shape"@en ;
    rdfs:comment "Validation shape for joint operation instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 100 ;
            sh:message "Joint operation must specify lead task force (3-100 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 3 ;
            sh:path cacontology-taskforce:leadTaskForce ],
        [ sh:datatype xsd:string ;
            sh:in ( "minimal" "standard" "enhanced" "full_integration" "unified_command" ) ;
            sh:maxCount 1 ;
            sh:message "Joint operation must specify coordination level from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-taskforce:coordinationLevel ] ;
    sh:targetClass cacontology-taskforce:JointOperation .

cacontology-taskforce:LocalICACtaskForce a owl:Class ;
    rdfs:label "Local ICAC Task Force"@en ;
    rdfs:comment "Local or regional ICAC task force unit."@en ;
    rdfs:subClassOf cacontology-taskforce:ICACtaskForce .

cacontology-taskforce:LocalPoliceHost a owl:Class ;
    rdfs:label "Local Police Host"@en ;
    rdfs:comment "Local police department hosting ICAC task force (Phoenix PD, Los Angeles PD, San Jose PD, etc.)."@en ;
    rdfs:subClassOf cacontology-taskforce:TaskForceHostOrganization .

cacontology-taskforce:MarylandICACtaskForce a owl:Class ;
    rdfs:label "Maryland ICAC Task Force"@en ;
    rdfs:comment "Maryland state ICAC task force coordinated by Maryland State Police Computer Crimes Unit with Governor's Office for Crime Prevention and Policy funding."@en ;
    rdfs:subClassOf cacontology-taskforce:StateICACtaskForce .

cacontology-taskforce:MembershipValidationShape a sh:NodeShape ;
    rdfs:label "Membership Validation Shape"@en ;
    rdfs:comment "Validates task force membership consistency."@en ;
    sh:sparql [ sh:message "Full-time members should have completed training."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-taskforce:membershipType "full_time" ;
                      cacontology-taskforce:trainingCompleted false .
            }
        """ ] ;
    sh:targetClass cacontology-taskforce:TaskForceMember .

cacontology-taskforce:NewYorkRegionalSystem a owl:Class ;
    rdfs:label "New York Regional System"@en ;
    rdfs:comment "New York's 2-region ICAC system: Statewide and New York City area."@en ;
    rdfs:subClassOf cacontology-taskforce:MultiRegionalState .

cacontology-taskforce:PerformanceMetricsShape a sh:NodeShape ;
    rdfs:label "Performance Metrics Shape"@en ;
    rdfs:comment "Validation shape for performance metrics instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "case_clearance" "arrest_count" "conviction_rate" "response_time" "training_completion" "resource_utilization" ) ;
            sh:maxCount 1 ;
            sh:message "Performance metrics must specify metric type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-taskforce:metricType ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 100.0 ;
            sh:message "Metric value must be between 0.0 and 100.0."@en ;
            sh:minCount 1 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-taskforce:metricValue ],
        [ sh:datatype xsd:string ;
            sh:in ( "monthly" "quarterly" "semi_annually" "annually" "fiscal_year" "calendar_year" ) ;
            sh:maxCount 1 ;
            sh:message "Performance metrics must specify reporting period from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-taskforce:reportingPeriod ],
        [ sh:datatype xsd:string ;
            sh:in ( "above_benchmark" "meets_benchmark" "below_benchmark" "no_benchmark" "exceeds_target" ) ;
            sh:maxCount 1 ;
            sh:message "Benchmark comparison must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-taskforce:benchmarkComparison ] ;
    sh:targetClass cacontology-taskforce:PerformanceMetrics .

cacontology-taskforce:PersonnelAllocationShape a sh:NodeShape ;
    rdfs:label "Personnel Allocation Shape"@en ;
    rdfs:comment "Validation shape for personnel allocation instances."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 100 ;
            sh:message "Personnel allocation must specify personnel count between 1 and 100."@en ;
            sh:minCount 1 ;
            sh:minInclusive 1 ;
            sh:path cacontology-taskforce:personnelCount ],
        [ sh:datatype xsd:string ;
            sh:in ( "sworn_officers" "civilian_analysts" "technical_specialists" "administrative_staff" "prosecutors" "victim_advocates" ) ;
            sh:maxCount 1 ;
            sh:message "Personnel allocation must specify personnel type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-taskforce:personnelType ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 100.0 ;
            sh:message "Full-time equivalent must be between 0.1 and 100.0."@en ;
            sh:minCount 1 ;
            sh:minInclusive 0.1 ;
            sh:path cacontology-taskforce:fullTimeEquivalent ] ;
    sh:targetClass cacontology-taskforce:PersonnelAllocation .

cacontology-taskforce:PersonnelSharing a owl:Class ;
    rdfs:label "Personnel Sharing"@en ;
    rdfs:comment "Sharing of specialized personnel between task forces."@en ;
    rdfs:subClassOf cacontology-taskforce:ResourceSharing .

cacontology-taskforce:PlanningPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Planning Phase"@en ;
    rdfs:comment "Phase involving operational planning and resource allocation."@en ;
    rdfs:subClassOf cacontology-taskforce:TaskForceOperation .

cacontology-taskforce:ProactiveOperation a owl:Class ;
    rdfs:label "Proactive Operation"@en ;
    rdfs:comment "Proactive operation to identify and investigate potential offenders."@en ;
    rdfs:subClassOf cacontology-taskforce:TaskForceOperation .

cacontology-taskforce:ProvidesTrainingShape a sh:PropertyShape ;
    sh:class cacontology-taskforce:TrainingProgram ;
    sh:description "Links task force to training programs" ;
    sh:minCount 0 ;
    sh:name "provides training" ;
    sh:path cacontology-taskforce:providesTraining .

cacontology-taskforce:ReactiveOperation a owl:Class ;
    rdfs:label "Reactive Operation"@en ;
    rdfs:comment "Operation in response to specific tips or reports."@en ;
    rdfs:subClassOf cacontology-taskforce:TaskForceOperation .

cacontology-taskforce:RegionalCoordination a owl:Class ;
    rdfs:label "Regional Coordination"@en ;
    rdfs:comment "Coordination mechanism for regional task force activities."@en ;
    rdfs:subClassOf cacontology-taskforce:CoordinationMechanism .

cacontology-taskforce:ReportsMetricsShape a sh:PropertyShape ;
    sh:class cacontology-taskforce:PerformanceMetrics ;
    sh:description "Links task force to performance metrics" ;
    sh:minCount 1 ;
    sh:name "reports metrics" ;
    sh:path cacontology-taskforce:reportsMetrics .

cacontology-taskforce:ResourceAllocationShape a sh:NodeShape ;
    rdfs:label "Resource Allocation Shape"@en ;
    rdfs:comment "Validation shape for resource allocation instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "personnel" "equipment" "funding" "facilities" "vehicles" "technology" "training" "support_services" ) ;
            sh:maxCount 1 ;
            sh:message "Resource allocation must specify resource type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-taskforce:resourceType ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 10000000.0 ;
            sh:message "Allocation amount must be between $1 and $10,000,000."@en ;
            sh:minCount 1 ;
            sh:minInclusive 1.0 ;
            sh:path cacontology-taskforce:allocationAmount ],
        [ sh:datatype xsd:string ;
            sh:in ( "monthly" "quarterly" "annually" "project_based" "ongoing" "one_time" ) ;
            sh:maxCount 1 ;
            sh:message "Resource allocation must specify allocation period from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-taskforce:allocationPeriod ],
        [ sh:datatype xsd:string ;
            sh:in ( "federal_grant" "state_budget" "local_budget" "asset_forfeiture" "private_donation" "mixed_sources" ) ;
            sh:maxCount 1 ;
            sh:message "Resource allocation must specify funding source from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-taskforce:fundingSource ] ;
    sh:targetClass cacontology-taskforce:ResourceAllocation .

cacontology-taskforce:SheriffOfficeHost a owl:Class ;
    rdfs:label "Sheriff Office Host"@en ;
    rdfs:comment "County sheriff's office hosting ICAC task force (Fresno County SO, Broward County SO, etc.)."@en ;
    rdfs:subClassOf cacontology-taskforce:TaskForceHostOrganization .

cacontology-taskforce:StateAgencyHost a owl:Class ;
    rdfs:label "State Agency Host"@en ;
    rdfs:comment "Other state agency hosting ICAC task force (Delaware DOJ, Hawaii DOA, etc.)."@en ;
    rdfs:subClassOf cacontology-taskforce:TaskForceHostOrganization .

cacontology-taskforce:StateBureauHost a owl:Class ;
    rdfs:label "State Bureau Host"@en ;
    rdfs:comment "State bureau of investigation hosting ICAC task force (Georgia BIA, North Carolina SBI, etc.)."@en ;
    rdfs:subClassOf cacontology-taskforce:TaskForceHostOrganization .

cacontology-taskforce:StateLocalFundingCombination a owl:Class ;
    rdfs:label "State Local Funding Combination"@en ;
    rdfs:comment "Combined funding from state Governor's Office and federal DOJ grants for task force operations."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-taskforce:StatePoliceHost a owl:Class ;
    rdfs:label "State Police Host"@en ;
    rdfs:comment "State police agency hosting ICAC task force (Maryland State Police, Connecticut State Police, etc.)."@en ;
    rdfs:subClassOf cacontology-taskforce:TaskForceHostOrganization .

cacontology-taskforce:StatewideTaskForce a owl:Class ;
    rdfs:label "Statewide Task Force"@en ;
    rdfs:comment "ICAC task force with statewide jurisdiction and coordination responsibility."@en ;
    rdfs:subClassOf cacontology-taskforce:StateICACtaskForce .

cacontology-taskforce:SweepOperation a owl:Class ;
    rdfs:label "Sweep Operation"@en ;
    rdfs:comment "Large-scale coordinated operation targeting multiple suspects."@en ;
    rdfs:subClassOf cacontology-taskforce:TaskForceOperation .

cacontology-taskforce:TacticalUnit a owl:Class ;
    rdfs:label "Tactical Unit"@en ;
    rdfs:comment "Unit handling high-risk arrests and tactical operations."@en ;
    rdfs:subClassOf cacontology-taskforce:SpecializedUnit .

cacontology-taskforce:TaskForceAlliance a owl:Class ;
    rdfs:label "Task Force Alliance"@en ;
    rdfs:comment "Formal alliance between multiple ICAC task forces."@en ;
    rdfs:subClassOf cacontology-taskforce:CoordinationMechanism .

cacontology-taskforce:TaskForceAnalyst a gufo:Role,
        owl:Class ;
    rdfs:label "Task Force Analyst"@en ;
    rdfs:comment "Analyst specializing in ICAC intelligence and data analysis."@en ;
    rdfs:subClassOf cacontology-taskforce:TaskForceMember .

cacontology-taskforce:TaskForceCommanderShape a sh:NodeShape ;
    rdfs:label "Task Force Commander Shape"@en ;
    rdfs:comment "Validation shape for task force commander instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "operational" "administrative" "full_command" "tactical" "liaison" "advisory" ) ;
            sh:maxCount 1 ;
            sh:message "Task force commander must specify command authority from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-taskforce:commandAuthority ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 40.0 ;
            sh:message "Task force commander must have between 1 and 40 years experience."@en ;
            sh:minCount 1 ;
            sh:minInclusive 1.0 ;
            sh:path cacontology-taskforce:yearsExperience ] ;
    sh:targetClass cacontology-taskforce:TaskForceCommander .

cacontology-taskforce:TaskForceCrossReferenceShape a sh:NodeShape ;
    rdfs:label "Task Force Cross Reference Shape"@en ;
    rdfs:comment "Validates cross-references between task force and related entities."@en ;
    sh:sparql [ sh:message "Task force must have at least one member and resource allocation."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-taskforce:TaskForce .
                FILTER NOT EXISTS {
                    $this cacontology-taskforce:hasMember ?member ;
                          cacontology-taskforce:allocatesResources ?resource .
                }
            }
        """ ] ;
    sh:targetClass cacontology-taskforce:TaskForce .

cacontology-taskforce:TaskForceForensicExaminer a gufo:Role,
        owl:Class ;
    rdfs:label "Task Force Forensic Examiner"@en ;
    rdfs:comment "Digital forensic examiner specializing in ICAC evidence."@en ;
    rdfs:subClassOf cacontology-taskforce:TaskForceMember .

cacontology-taskforce:TaskForceInvestigator a gufo:Role,
        owl:Class ;
    rdfs:label "Task Force Investigator"@en ;
    rdfs:comment "Investigator specializing in ICAC cases and child exploitation."@en ;
    rdfs:subClassOf cacontology-taskforce:TaskForceMember .

cacontology-taskforce:TaskForceMemberShape a sh:NodeShape ;
    rdfs:label "Task Force Member Shape"@en ;
    rdfs:comment "Validation shape for task force member instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "commander" "supervisor" "investigator" "analyst" "technical_specialist" "prosecutor" "victim_advocate" "support_staff" ) ;
            sh:maxCount 1 ;
            sh:message "Task force member must specify member role from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-taskforce:memberRole ],
        [ sh:datatype xsd:string ;
            sh:in ( "full_time" "part_time" "collateral_duty" "temporary" "consultant" "liaison" ) ;
            sh:maxCount 1 ;
            sh:message "Task force member must specify membership type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-taskforce:membershipType ],
        [ sh:datatype xsd:string ;
            sh:in ( "none" "public_trust" "confidential" "secret" "top_secret" "sci_access" ) ;
            sh:maxCount 1 ;
            sh:message "Security clearance must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-taskforce:securityClearance ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Task force member must specify if training is completed."@en ;
            sh:minCount 1 ;
            sh:path cacontology-taskforce:trainingCompleted ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Task force member must specify membership start date."@en ;
            sh:minCount 1 ;
            sh:path cacontology-taskforce:membershipStartDate ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Task force member may specify membership end date."@en ;
            sh:minCount 0 ;
            sh:path cacontology-taskforce:membershipEndDate ] ;
    sh:targetClass cacontology-taskforce:TaskForceMember .

cacontology-taskforce:TaskForceOperationShape a sh:NodeShape ;
    rdfs:label "Task Force Operation Shape"@en ;
    rdfs:comment "Validation shape for task force operation instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "investigation" "enforcement_action" "training_exercise" "outreach_program" "prevention_initiative" "intelligence_gathering" ) ;
            sh:maxCount 1 ;
            sh:message "Task force operation must specify operation type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-taskforce:operationType ],
        [ sh:datatype xsd:string ;
            sh:in ( "local" "regional" "statewide" "multi_state" "national" "international" ) ;
            sh:maxCount 1 ;
            sh:message "Task force operation must specify operation scope from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-taskforce:operationScope ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 25 ;
            sh:message "Task force operation must have between 1 and 25 participating agencies."@en ;
            sh:minCount 1 ;
            sh:minInclusive 1 ;
            sh:path cacontology-taskforce:participatingAgencies ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 365.0 ;
            sh:message "Operation duration must be between 1 and 365 days."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1.0 ;
            sh:path cacontology-taskforce:operationDuration ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Task force operation may have a start time."@en ;
            sh:minCount 0 ;
            sh:path uco-core:startTime ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Task force operation may have an end time."@en ;
            sh:minCount 0 ;
            sh:path uco-core:endTime ] ;
    sh:targetClass cacontology-taskforce:TaskForceOperation .

cacontology-taskforce:TaskForceShape a sh:NodeShape ;
    rdfs:label "Task Force Shape"@en ;
    rdfs:comment "Validation shape for task force instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "icac_task_force" "joint_task_force" "federal_task_force" "state_task_force" "regional_task_force" "specialized_unit" ) ;
            sh:maxCount 1 ;
            sh:message "Task force must specify task force type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-taskforce:taskForceType ],
        [ sh:datatype xsd:string ;
            sh:in ( "federal_grant" "state_funding" "local_funding" "mixed_funding" "private_funding" "grant_combination" ) ;
            sh:maxCount 1 ;
            sh:message "Task force must specify funding source from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-taskforce:fundingSource ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Task force must specify establishment date."@en ;
            sh:minCount 1 ;
            sh:path cacontology-taskforce:establishmentDate ],
        [ sh:datatype xsd:string ;
            sh:in ( "local" "county" "state" "regional" "multi_state" "national" ) ;
            sh:maxCount 1 ;
            sh:message "Task force must specify jurisdiction coverage from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-taskforce:jurisdictionCoverage ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 50 ;
            sh:message "Task force must have between 2 and 50 member agencies."@en ;
            sh:minCount 1 ;
            sh:minInclusive 2 ;
            sh:path cacontology-taskforce:memberAgencyCount ],
        [ sh:datatype xsd:string ;
            sh:in ( "active" "inactive" "suspended" "disbanded" "forming" "transitioning" ) ;
            sh:maxCount 1 ;
            sh:message "Task force must specify operational status from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-taskforce:operationalStatus ] ;
    sh:targetClass cacontology-taskforce:TaskForce .

cacontology-taskforce:TemporalValidationShape a sh:NodeShape ;
    rdfs:label "Temporal Validation Shape"@en ;
    rdfs:comment "Validates temporal consistency in task force memberships."@en ;
    sh:sparql [ sh:message "Membership start date must be before end date when both are specified."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-taskforce:membershipStartDate ?start ;
                      cacontology-taskforce:membershipEndDate ?end .
                FILTER (?start >= ?end)
            }
        """ ] ;
    sh:targetClass cacontology-taskforce:TaskForceMember .

cacontology-taskforce:TexasRegionalSystem a owl:Class ;
    rdfs:label "Texas Regional System"@en ;
    rdfs:comment "Texas's 3-region ICAC system: Statewide, Dallas, Houston areas."@en ;
    rdfs:subClassOf cacontology-taskforce:MultiRegionalState .

cacontology-taskforce:TrainingProgramShape a sh:NodeShape ;
    rdfs:label "Training Program Shape"@en ;
    rdfs:comment "Validation shape for training program instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "basic_icac" "advanced_investigation" "digital_forensics" "undercover_operations" "legal_updates" "victim_services" "management" ) ;
            sh:maxCount 1 ;
            sh:message "Training program must specify training type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-taskforce:trainingType ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 160.0 ;
            sh:message "Training duration must be between 4 and 160 hours."@en ;
            sh:minCount 1 ;
            sh:minInclusive 4.0 ;
            sh:path cacontology-taskforce:trainingDuration ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Training program must specify if certification is required."@en ;
            sh:minCount 1 ;
            sh:path cacontology-taskforce:certificationRequired ],
        [ sh:datatype xsd:string ;
            sh:in ( "ncmec" "icac_program" "fbi" "state_agency" "private_contractor" "academic_institution" ) ;
            sh:maxCount 1 ;
            sh:message "Training program must specify training provider from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-taskforce:trainingProvider ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 100 ;
            sh:message "Training program must specify maximum participants between 5 and 100."@en ;
            sh:minCount 1 ;
            sh:minInclusive 5 ;
            sh:path cacontology-taskforce:maxParticipants ] ;
    sh:targetClass cacontology-taskforce:TrainingProgram .

cacontology-taskforce:TrainingUnit a owl:Class ;
    rdfs:label "Training Unit"@en ;
    rdfs:comment "Unit responsible for training and education of task force members."@en ;
    rdfs:subClassOf cacontology-taskforce:SpecializedUnit .

cacontology-taskforce:UndercoverUnit a owl:Class ;
    rdfs:label "Undercover Unit"@en ;
    rdfs:comment "Unit specializing in undercover operations and online investigations."@en ;
    rdfs:subClassOf cacontology-taskforce:SpecializedUnit .

cacontology-taskforce:VictimServiceUnit a owl:Class ;
    rdfs:label "Victim Service Unit"@en ;
    rdfs:comment "Unit providing specialized services and support to child victims."@en ;
    rdfs:subClassOf cacontology-taskforce:SpecializedUnit .

cacontology-taskforce:accessibleVia a owl:ObjectProperty ;
    rdfs:label "accessible via"@en ;
    rdfs:comment "Links task force to national hotline for general access."@en ;
    rdfs:domain cacontology-taskforce:ICACtaskForce ;
    rdfs:range cacontology-taskforce:NationalHotline .

cacontology-taskforce:agencyCount a owl:DatatypeProperty ;
    rdfs:label "agency count"@en ;
    rdfs:comment "Number of agencies participating in the task force."@en ;
    rdfs:domain cacontology-taskforce:ICACtaskForce ;
    rdfs:range xsd:integer .

cacontology-taskforce:agencyType a owl:DatatypeProperty ;
    rdfs:label "agency type"@en ;
    rdfs:comment "Type of partner agency (local, county, state, federal)."@en ;
    rdfs:domain cacontology-taskforce:NetworkPerformance ;
    rdfs:range xsd:string .

cacontology-taskforce:arrestsSince2006 a owl:DatatypeProperty ;
    rdfs:label "arrests since 2006"@en ;
    rdfs:comment "Total arrests made since 2006 (Illinois: 1,990+)."@en ;
    rdfs:domain cacontology-taskforce:ArrestMetrics ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-taskforce:arrestsSince2019 a owl:DatatypeProperty ;
    rdfs:label "arrests since 2019"@en ;
    rdfs:comment "Total arrests made since 2019 (Illinois: 600+)."@en ;
    rdfs:domain cacontology-taskforce:ArrestMetrics ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-taskforce:assignedToUnit a owl:ObjectProperty ;
    rdfs:label "assigned to unit"@en ;
    rdfs:comment "Links task force member to their assigned unit."@en ;
    rdfs:domain cacontology-taskforce:TaskForceMember ;
    rdfs:range cacontology-taskforce:SpecializedUnit .

cacontology-taskforce:capabilityLevel a owl:DatatypeProperty ;
    rdfs:label "capability level"@en ;
    rdfs:comment "Level of capability (basic, intermediate, advanced, expert)."@en ;
    rdfs:domain cacontology-taskforce:SpecializedUnit ;
    rdfs:range xsd:string .

cacontology-taskforce:certificationStatus a owl:DatatypeProperty ;
    rdfs:label "certification status"@en ;
    rdfs:comment "Certification status (certified, pending, expired, not_certified)."@en ;
    rdfs:domain cacontology-taskforce:TaskForceMember ;
    rdfs:range xsd:string .

cacontology-taskforce:certificationValid a owl:DatatypeProperty ;
    rdfs:label "certification valid"@en ;
    rdfs:comment "Whether certification is currently valid."@en ;
    rdfs:domain cacontology-taskforce:CertificationProgram ;
    rdfs:range xsd:boolean .

cacontology-taskforce:certifiedIn a owl:ObjectProperty ;
    rdfs:label "certified in"@en ;
    rdfs:comment "Links task force member to certification programs completed."@en ;
    rdfs:domain cacontology-taskforce:TaskForceMember ;
    rdfs:range cacontology-taskforce:CertificationProgram .

cacontology-taskforce:collaboratesWith a owl:ObjectProperty ;
    rdfs:label "collaborates with"@en ;
    rdfs:comment "Links task force to other task forces they collaborate with."@en ;
    rdfs:domain cacontology-taskforce:ICACtaskForce ;
    rdfs:range cacontology-taskforce:ICACtaskForce .

cacontology-taskforce:commandedBy a owl:ObjectProperty ;
    rdfs:label "commanded by"@en ;
    rdfs:comment "Links task force to its commander."@en ;
    rdfs:domain cacontology-taskforce:ICACtaskForce ;
    rdfs:range cacontology-taskforce:TaskForceCommander .

cacontology-taskforce:completionRate a owl:DatatypeProperty ;
    rdfs:label "completion rate"@en ;
    rdfs:comment "Completion rate for training program (percentage)."@en ;
    rdfs:domain cacontology-taskforce:TaskForceTraining ;
    rdfs:range xsd:decimal .

cacontology-taskforce:conductedBy a owl:ObjectProperty ;
    rdfs:label "conducted by"@en ;
    rdfs:comment "Links operation to task force that conducted it."@en ;
    rdfs:domain cacontology-taskforce:TaskForceOperation ;
    rdfs:range cacontology-taskforce:ICACtaskForce .

cacontology-taskforce:coordinatedBy a owl:ObjectProperty ;
    rdfs:label "coordinated by"@en ;
    rdfs:comment "Links task force to its coordinator."@en ;
    rdfs:domain cacontology-taskforce:ICACtaskForce ;
    rdfs:range cacontology-taskforce:TaskForceCoordinator .

cacontology-taskforce:coordinatedThrough a owl:ObjectProperty ;
    rdfs:label "coordinated through"@en ;
    rdfs:comment "Links task force to coordination mechanism used."@en ;
    rdfs:domain cacontology-taskforce:ICACtaskForce ;
    rdfs:range cacontology-taskforce:CoordinationMechanism .

cacontology-taskforce:coordinatesWith a owl:ObjectProperty ;
    rdfs:label "coordinates with"@en ;
    rdfs:comment "Links regional task forces that coordinate within the same state."@en ;
    rdfs:domain cacontology-taskforce:RegionalTaskForce ;
    rdfs:range cacontology-taskforce:RegionalTaskForce .

cacontology-taskforce:coordinatesWithCivilian a owl:ObjectProperty ;
    rdfs:label "coordinates with civilian"@en ;
    rdfs:comment "Links military task force to civilian task forces for coordination."@en ;
    rdfs:domain cacontology-taskforce:MilitaryICACtaskForce ;
    rdfs:range cacontology-taskforce:ICACtaskForce .

cacontology-taskforce:coordinationDuration a owl:DatatypeProperty ;
    rdfs:label "coordination duration"@en ;
    rdfs:comment "Duration of coordination mechanism."@en ;
    rdfs:domain cacontology-taskforce:CoordinationMechanism ;
    rdfs:range xsd:duration .

cacontology-taskforce:coordinationModel a owl:DatatypeProperty ;
    rdfs:label "coordination model"@en ;
    rdfs:comment "Model for coordinating between regional task forces (hub_spoke, peer_to_peer, hierarchical)."@en ;
    rdfs:domain cacontology-taskforce:RegionalTaskForceCoordination ;
    rdfs:range xsd:string .

cacontology-taskforce:countyName a owl:DatatypeProperty ;
    rdfs:label "county name"@en ;
    rdfs:comment "Name of primary county served by task force."@en ;
    rdfs:domain cacontology-taskforce:CountyBasedTaskForce ;
    rdfs:range xsd:string .

cacontology-taskforce:coverageArea a owl:DatatypeProperty ;
    rdfs:label "coverage area"@en ;
    rdfs:comment "Geographic area covered by the task force."@en ;
    rdfs:domain cacontology-taskforce:ICACtaskForce ;
    rdfs:range xsd:string .

cacontology-taskforce:coverageType a owl:DatatypeProperty ;
    rdfs:label "coverage type"@en ;
    rdfs:comment "Type of geographic coverage (statewide, regional, metropolitan, county)."@en ;
    rdfs:domain cacontology-taskforce:ICACtaskForce ;
    rdfs:range xsd:string .

cacontology-taskforce:cyberTipsProcessed a owl:DatatypeProperty ;
    rdfs:label "cyber tips processed"@en ;
    rdfs:comment "Number of CyberTips successfully processed and analyzed."@en ;
    rdfs:domain cacontology-taskforce:CyberTipMetrics ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-taskforce:cyberTipsReceived a owl:DatatypeProperty ;
    rdfs:label "cyber tips received"@en ;
    rdfs:comment "Total number of CyberTips received by task force."@en ;
    rdfs:domain cacontology-taskforce:CyberTipMetrics ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-taskforce:cyberTipsSince2019 a owl:DatatypeProperty ;
    rdfs:label "cyber tips since 2019"@en ;
    rdfs:comment "Total CyberTips received since 2019 (Illinois: 35,000+)."@en ;
    rdfs:domain cacontology-taskforce:CyberTipMetrics ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-taskforce:dojGrantFunded a owl:DatatypeProperty ;
    rdfs:label "DOJ grant funded"@en ;
    rdfs:comment "Whether task force receives DOJ grant funding."@en ;
    rdfs:domain cacontology-taskforce:ICACtaskForce ;
    rdfs:range xsd:boolean .

cacontology-taskforce:emailAddress a owl:DatatypeProperty ;
    rdfs:label "email address"@en ;
    rdfs:comment "Contact email address for task force."@en ;
    rdfs:domain cacontology-taskforce:TaskForceContactInformation ;
    rdfs:range xsd:string .

cacontology-taskforce:experienceLevel a owl:DatatypeProperty ;
    rdfs:label "experience level"@en ;
    rdfs:comment "Experience level in ICAC investigations (novice, experienced, expert, master)."@en ;
    rdfs:domain cacontology-taskforce:TaskForceMember ;
    rdfs:range xsd:string .

cacontology-taskforce:federalPartner a owl:ObjectProperty ;
    rdfs:label "federal partner"@en ;
    rdfs:comment "Links task force to federal law enforcement partners."@en ;
    rdfs:domain cacontology-taskforce:ICACtaskForce ;
    rdfs:range cacontology-taskforce:FederalLawEnforcementPartner .

cacontology-taskforce:handledInvestigation a owl:ObjectProperty ;
    rdfs:label "handled investigation"@en ;
    rdfs:comment "Links task force to investigation they handled."@en ;
    rdfs:domain cacontology-taskforce:ICACtaskForce ;
    rdfs:range cacontology:Investigation .

cacontology-taskforce:hasContactInformation a owl:ObjectProperty ;
    rdfs:label "has contact information"@en ;
    rdfs:comment "Links task force to its contact information."@en ;
    rdfs:domain cacontology-taskforce:ICACtaskForce ;
    rdfs:range cacontology-taskforce:TaskForceContactInformation .

cacontology-taskforce:hasMetrics a owl:ObjectProperty ;
    rdfs:label "has metrics"@en ;
    rdfs:comment "Links task force to its performance metrics."@en ;
    rdfs:domain cacontology-taskforce:ICACtaskForce ;
    rdfs:range cacontology-taskforce:TaskForceMetrics .

cacontology-taskforce:hasOperationPhaseBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has operation phase begin point"@en ;
    rdfs:comment "Temporal begin point for operation phase."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-taskforce:hasOperationPhaseEndPoint a owl:DatatypeProperty ;
    rdfs:label "has operation phase end point"@en ;
    rdfs:comment "Temporal end point for operation phase."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-taskforce:hasRegionalTaskForce a owl:ObjectProperty ;
    rdfs:label "has regional task force"@en ;
    rdfs:comment "Links multi-regional state to its regional task forces."@en ;
    rdfs:domain cacontology-taskforce:MultiRegionalState ;
    rdfs:range cacontology-taskforce:RegionalTaskForce .

cacontology-taskforce:hasRoleBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has role begin point"@en ;
    rdfs:comment "Temporal begin point for task force role."@en ;
    rdfs:domain gufo:Role ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-taskforce:hasRoleEndPoint a owl:DatatypeProperty ;
    rdfs:label "has role end point"@en ;
    rdfs:comment "Temporal end point for task force role."@en ;
    rdfs:domain gufo:Role ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-taskforce:hasUnit a owl:ObjectProperty ;
    rdfs:label "has unit"@en ;
    rdfs:comment "Links task force to its specialized units."@en ;
    rdfs:domain cacontology-taskforce:ICACtaskForce ;
    rdfs:range cacontology-taskforce:SpecializedUnit .

cacontology-taskforce:hostJurisdictionLevel a owl:DatatypeProperty ;
    rdfs:label "host jurisdiction level"@en ;
    rdfs:comment "Jurisdiction level of host organization (federal, state, county, local, military)."@en ;
    rdfs:domain cacontology-taskforce:TaskForceHostOrganization ;
    rdfs:range xsd:string .

cacontology-taskforce:hostOrganizationType a owl:DatatypeProperty ;
    rdfs:label "host organization type"@en ;
    rdfs:comment "Type of organization hosting task force (state_police, local_police, sheriff, state_bureau, attorney_general, district_attorney, state_agency, military)."@en ;
    rdfs:domain cacontology-taskforce:TaskForceHostOrganization ;
    rdfs:range xsd:string .

cacontology-taskforce:hostedBy a owl:ObjectProperty ;
    rdfs:label "hosted by"@en ;
    rdfs:comment "Links task force to its hosting organization."@en ;
    rdfs:domain cacontology-taskforce:ICACtaskForce ;
    rdfs:range cacontology-taskforce:TaskForceHostOrganization .

cacontology-taskforce:hostsTaskForce a owl:ObjectProperty ;
    rdfs:label "hosts task force"@en ;
    rdfs:comment "Links hosting organization to its ICAC task force."@en ;
    rdfs:domain cacontology-taskforce:TaskForceHostOrganization ;
    rdfs:range cacontology-taskforce:ICACtaskForce .

cacontology-taskforce:hotlineType a owl:DatatypeProperty ;
    rdfs:label "hotline type"@en ;
    rdfs:comment "Type of hotline service (tip_line, general_contact, emergency, referral)."@en ;
    rdfs:domain cacontology-taskforce:TaskForceHotline ;
    rdfs:range xsd:string .

cacontology-taskforce:includesTaskForce a owl:ObjectProperty ;
    rdfs:label "includes task force"@en ;
    rdfs:comment "Links national directory to all ICAC task forces in the network."@en ;
    rdfs:domain cacontology-taskforce:NationalICACtaskForceDirectory ;
    rdfs:range cacontology-taskforce:ICACtaskForce .

cacontology-taskforce:involvedUnit a owl:ObjectProperty ;
    rdfs:label "involved unit"@en ;
    rdfs:comment "Links operation to specialized unit involved."@en ;
    rdfs:domain cacontology-taskforce:TaskForceOperation ;
    rdfs:range cacontology-taskforce:SpecializedUnit .

cacontology-taskforce:jurisdictionPopulation a owl:DatatypeProperty ;
    rdfs:label "jurisdiction population"@en ;
    rdfs:comment "Population covered by task force jurisdiction."@en ;
    rdfs:domain cacontology-taskforce:ICACtaskForce ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-taskforce:leadsUnit a owl:ObjectProperty ;
    rdfs:label "leads unit"@en ;
    rdfs:comment "Links member to unit they lead."@en ;
    rdfs:domain cacontology-taskforce:TaskForceMember ;
    rdfs:range cacontology-taskforce:SpecializedUnit .

cacontology-taskforce:localPartner a owl:ObjectProperty ;
    rdfs:label "local partner"@en ;
    rdfs:comment "Links task force to local law enforcement partners."@en ;
    rdfs:domain cacontology-taskforce:ICACtaskForce ;
    rdfs:range cacontology-taskforce:LocalLawEnforcementPartner .

cacontology-taskforce:maintainsWebsite a owl:ObjectProperty ;
    rdfs:label "maintains website"@en ;
    rdfs:comment "Links task force to website it maintains."@en ;
    rdfs:domain cacontology-taskforce:ICACtaskForce ;
    rdfs:range cacontology-taskforce:TaskForceWebsite .

cacontology-taskforce:managedByCoordination a owl:ObjectProperty ;
    rdfs:label "managed by coordination"@en ;
    rdfs:comment "Links regional task force to coordination mechanism."@en ;
    rdfs:domain cacontology-taskforce:RegionalTaskForce ;
    rdfs:range cacontology-taskforce:RegionalTaskForceCoordination .

cacontology-taskforce:measuresPerformance a owl:ObjectProperty ;
    rdfs:label "measures performance"@en ;
    rdfs:comment "Links metrics to the task force they measure."@en ;
    rdfs:domain cacontology-taskforce:TaskForceMetrics ;
    rdfs:range cacontology-taskforce:ICACtaskForce .

cacontology-taskforce:memberCount a owl:DatatypeProperty ;
    rdfs:label "member count"@en ;
    rdfs:comment "Number of active members in the task force."@en ;
    rdfs:domain cacontology-taskforce:ICACtaskForce ;
    rdfs:range xsd:integer .

cacontology-taskforce:metropolitanArea a owl:DatatypeProperty ;
    rdfs:label "metropolitan area"@en ;
    rdfs:comment "Name of metropolitan area covered (e.g., 'Los Angeles', 'Dallas-Fort Worth', 'Houston')."@en ;
    rdfs:domain cacontology-taskforce:MetropolitanTaskForce ;
    rdfs:range xsd:string .

cacontology-taskforce:militaryBranches a owl:DatatypeProperty ;
    rdfs:label "military branches"@en ;
    rdfs:comment "Military branches covered by task force (Army, Navy, Air Force, Marines, Coast Guard, Space Force)."@en ;
    rdfs:domain cacontology-taskforce:MilitaryICACtaskForce ;
    rdfs:range xsd:string .

cacontology-taskforce:militaryJurisdiction a owl:DatatypeProperty ;
    rdfs:label "military jurisdiction"@en ;
    rdfs:comment "Type of military jurisdiction (worldwide, conus, oconus, base_specific)."@en ;
    rdfs:domain cacontology-taskforce:MilitaryICACtaskForce ;
    rdfs:range xsd:string .

cacontology-taskforce:nationalCoveragePercentage a owl:DatatypeProperty ;
    rdfs:label "national coverage percentage"@en ;
    rdfs:comment "Percentage of US geographic coverage by ICAC network (100%)."@en ;
    rdfs:domain cacontology-taskforce:NationalICACtaskForceDirectory ;
    rdfs:range xsd:decimal .

cacontology-taskforce:nationalHotlineNumber a owl:DatatypeProperty ;
    rdfs:label "national hotline number"@en ;
    rdfs:comment "National ICAC hotline number (877-798-7682)."@en ;
    rdfs:domain cacontology-taskforce:NationalHotline ;
    rdfs:range xsd:string .

cacontology-taskforce:nationalTaskForceNetwork a owl:DatatypeProperty ;
    rdfs:label "national task force network"@en ;
    rdfs:comment "Whether task force is part of national network (61 total)."@en ;
    rdfs:domain cacontology-taskforce:ICACtaskForce ;
    rdfs:range xsd:boolean .

cacontology-taskforce:operatesHotline a owl:ObjectProperty ;
    rdfs:label "operates hotline"@en ;
    rdfs:comment "Links task force to hotline it operates."@en ;
    rdfs:domain cacontology-taskforce:ICACtaskForce ;
    rdfs:range cacontology-taskforce:TaskForceHotline .

cacontology-taskforce:operationOutcome a owl:DatatypeProperty ;
    rdfs:label "operation outcome"@en ;
    rdfs:comment "Outcome of operation (successful, partially_successful, unsuccessful)."@en ;
    rdfs:domain cacontology-taskforce:TaskForceOperation ;
    rdfs:range xsd:string .

cacontology-taskforce:operationPhaseDuration a owl:DatatypeProperty ;
    rdfs:label "operation phase duration"@en ;
    rdfs:comment "Duration of operation phase."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:duration .

cacontology-taskforce:operationScale a owl:DatatypeProperty ;
    rdfs:label "operation scale"@en ;
    rdfs:comment "Scale of operation (local, regional, national, international)."@en ;
    rdfs:domain cacontology-taskforce:TaskForceOperation ;
    rdfs:range xsd:string .

cacontology-taskforce:organizationName a owl:DatatypeProperty ;
    rdfs:label "organization name"@en ;
    rdfs:comment "Official name of hosting organization."@en ;
    rdfs:domain cacontology-taskforce:TaskForceHostOrganization ;
    rdfs:range xsd:string .

cacontology-taskforce:parentsEducated a owl:DatatypeProperty ;
    rdfs:label "parents educated"@en ;
    rdfs:comment "Number of parents reached through safety education."@en ;
    rdfs:domain cacontology-taskforce:TrainingReachMetrics ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-taskforce:participatedIn a owl:ObjectProperty ;
    rdfs:label "participated in"@en ;
    rdfs:comment "Links task force member to operation they participated in."@en ;
    rdfs:domain cacontology-taskforce:TaskForceMember ;
    rdfs:range cacontology-taskforce:TaskForceOperation .

cacontology-taskforce:participatingUnits a owl:DatatypeProperty ;
    rdfs:label "participating units"@en ;
    rdfs:comment "Number of units participating in operation."@en ;
    rdfs:domain cacontology-taskforce:TaskForceOperation ;
    rdfs:range xsd:integer .

cacontology-taskforce:partnerAgencyCount a owl:DatatypeProperty ;
    rdfs:label "partner agency count"@en ;
    rdfs:comment "Number of partner agencies in task force network (Illinois: 175+)."@en ;
    rdfs:domain cacontology-taskforce:NetworkPerformance ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-taskforce:partnersWith a owl:ObjectProperty ;
    rdfs:label "partners with"@en ;
    rdfs:comment "Links task force to partner organizations."@en ;
    rdfs:domain cacontology-taskforce:ICACtaskForce ;
    rdfs:range uco-identity:Organization .

cacontology-taskforce:performancePeriod a owl:DatatypeProperty ;
    rdfs:label "performance period"@en ;
    rdfs:comment "Time period covered by historical metrics (e.g., 'Since 2019', 'Since 2006')."@en ;
    rdfs:domain cacontology-taskforce:HistoricalMetrics ;
    rdfs:range xsd:string .

cacontology-taskforce:phoneNumber a owl:DatatypeProperty ;
    rdfs:label "phone number"@en ;
    rdfs:comment "Contact phone number for task force."@en ;
    rdfs:domain cacontology-taskforce:TaskForceContactInformation ;
    rdfs:range xsd:string .

cacontology-taskforce:professionalsTrained a owl:DatatypeProperty ;
    rdfs:label "professionals trained"@en ;
    rdfs:comment "Number of law enforcement professionals trained."@en ;
    rdfs:domain cacontology-taskforce:TrainingReachMetrics ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-taskforce:providesRegionalCoverage a owl:ObjectProperty ;
    rdfs:label "provides regional coverage"@en ;
    rdfs:comment "Links regional task force to geographic area it covers."@en ;
    rdfs:domain cacontology-taskforce:RegionalTaskForce ;
    rdfs:range uco-location:Location .

cacontology-taskforce:receivedTraining a owl:ObjectProperty ;
    rdfs:label "received training"@en ;
    rdfs:comment "Links task force member to training received."@en ;
    rdfs:domain cacontology-taskforce:TaskForceMember ;
    rdfs:range cacontology-taskforce:TaskForceTraining .

cacontology-taskforce:regionCovered a owl:DatatypeProperty ;
    rdfs:label "region covered"@en ;
    rdfs:comment "Geographic region covered by task force (e.g., 'Central', 'Northern', 'Southern', 'Los Angeles Area')."@en ;
    rdfs:domain cacontology-taskforce:RegionalTaskForce ;
    rdfs:range xsd:string .

cacontology-taskforce:regionalTaskForceCount a owl:DatatypeProperty ;
    rdfs:label "regional task force count"@en ;
    rdfs:comment "Number of ICAC task forces in multi-regional state (CA: 5, FL: 3, TX: 3, NY: 2)."@en ;
    rdfs:domain cacontology-taskforce:MultiRegionalState ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-taskforce:reportingYear a owl:DatatypeProperty ;
    rdfs:label "reporting year"@en ;
    rdfs:comment "Year for which performance metrics are reported."@en ;
    rdfs:domain cacontology-taskforce:AnnualPerformance ;
    rdfs:range xsd:gYear .

cacontology-taskforce:resourceCapacity a owl:DatatypeProperty ;
    rdfs:label "resource capacity"@en ;
    rdfs:comment "Available resource capacity (limited, moderate, high, extensive)."@en ;
    rdfs:domain cacontology-taskforce:SpecializedUnit ;
    rdfs:range xsd:string .

cacontology-taskforce:servesCounty a owl:ObjectProperty ;
    rdfs:label "serves county"@en ;
    rdfs:comment "Links county-based task force to county served."@en ;
    rdfs:domain cacontology-taskforce:CountyBasedTaskForce ;
    rdfs:range uco-location:Location .

cacontology-taskforce:servesMetropolitanArea a owl:ObjectProperty ;
    rdfs:label "serves metropolitan area"@en ;
    rdfs:comment "Links metropolitan task force to metropolitan area served."@en ;
    rdfs:domain cacontology-taskforce:MetropolitanTaskForce ;
    rdfs:range uco-location:Location .

cacontology-taskforce:servesMilitaryBranch a owl:ObjectProperty ;
    rdfs:label "serves military branch"@en ;
    rdfs:comment "Links military task force to military branch it serves."@en ;
    rdfs:domain cacontology-taskforce:MilitaryICACtaskForce ;
    rdfs:range uco-identity:Organization .

cacontology-taskforce:sexualPredatorArrests a owl:DatatypeProperty ;
    rdfs:label "sexual predator arrests"@en ;
    rdfs:comment "Number of sexual predator arrests made by task force."@en ;
    rdfs:domain cacontology-taskforce:ArrestMetrics ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-taskforce:sharesResourcesWith a owl:ObjectProperty ;
    rdfs:label "shares resources with"@en ;
    rdfs:comment "Links task force to resource sharing arrangement."@en ;
    rdfs:domain cacontology-taskforce:ICACtaskForce ;
    rdfs:range cacontology-taskforce:ResourceSharing .

cacontology-taskforce:sharingAgreement a owl:DatatypeProperty ;
    rdfs:label "sharing agreement"@en ;
    rdfs:comment "Type of sharing agreement (formal, informal, emergency)."@en ;
    rdfs:domain cacontology-taskforce:ResourceSharing ;
    rdfs:range xsd:string .

cacontology-taskforce:sharingDuration a owl:DatatypeProperty ;
    rdfs:label "sharing duration"@en ;
    rdfs:comment "Duration of resource sharing in months."@en ;
    rdfs:domain cacontology-taskforce:ResourceSharing ;
    rdfs:range xsd:integer .

cacontology-taskforce:sharingType a owl:DatatypeProperty ;
    rdfs:label "sharing type"@en ;
    rdfs:comment "Type of resource sharing (personnel, equipment, expertise, intelligence)."@en ;
    rdfs:domain cacontology-taskforce:ResourceSharing ;
    rdfs:range xsd:string .

cacontology-taskforce:specializationArea a owl:DatatypeProperty ;
    rdfs:label "specialization area"@en ;
    rdfs:comment "Area of specialization (forensics, undercover, victim_services, analytics, tactical)."@en ;
    rdfs:domain cacontology-taskforce:SpecializedUnit ;
    rdfs:range xsd:string .

cacontology-taskforce:statesWithMultipleTaskForces a owl:DatatypeProperty ;
    rdfs:label "states with multiple task forces"@en ;
    rdfs:comment "Number of states with multiple regional task forces (CA, FL, TX, NY, VA, IL)."@en ;
    rdfs:domain cacontology-taskforce:NationalICACtaskForceDirectory ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-taskforce:studentsEducated a owl:DatatypeProperty ;
    rdfs:label "students educated"@en ;
    rdfs:comment "Number of students reached through safety education."@en ;
    rdfs:domain cacontology-taskforce:TrainingReachMetrics ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-taskforce:supportedInvestigation a owl:ObjectProperty ;
    rdfs:label "supported investigation"@en ;
    rdfs:comment "Links specialized unit to investigation they supported."@en ;
    rdfs:domain cacontology-taskforce:SpecializedUnit ;
    rdfs:range cacontology:Investigation .

cacontology-taskforce:taskForceId a owl:DatatypeProperty ;
    rdfs:label "task force ID"@en ;
    rdfs:comment "Unique identifier for the ICAC task force."@en ;
    rdfs:domain cacontology-taskforce:ICACtaskForce ;
    rdfs:range xsd:string .

cacontology-taskforce:taskForceNumber a owl:DatatypeProperty ;
    rdfs:label "task force number"@en ;
    rdfs:comment "Position within national network (e.g., '1 of 61')."@en ;
    rdfs:domain cacontology-taskforce:ICACtaskForce ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-taskforce:teachersEducated a owl:DatatypeProperty ;
    rdfs:label "teachers educated"@en ;
    rdfs:comment "Number of teachers reached through safety education."@en ;
    rdfs:domain cacontology-taskforce:TrainingReachMetrics ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-taskforce:totalTaskForces a owl:DatatypeProperty ;
    rdfs:label "total task forces"@en ;
    rdfs:comment "Total number of ICAC task forces in national directory (61 total)."@en ;
    rdfs:domain cacontology-taskforce:NationalICACtaskForceDirectory ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-taskforce:websiteURL a owl:DatatypeProperty ;
    rdfs:label "website URL"@en ;
    rdfs:comment "Official website URL for task force."@en ;
    rdfs:domain cacontology-taskforce:TaskForceWebsite ;
    rdfs:range xsd:anyURI .

cacontology-taskforce:yearOverYearIncrease a owl:DatatypeProperty ;
    rdfs:label "year over year increase"@en ;
    rdfs:comment "Percentage increase from previous year (Illinois 2022: 26%)."@en ;
    rdfs:domain cacontology-taskforce:AnnualPerformance ;
    rdfs:range xsd:decimal .

cacontology-taskforce:yearsOfService a owl:DatatypeProperty ;
    rdfs:label "years of service"@en ;
    rdfs:comment "Years of service in ICAC task force work."@en ;
    rdfs:domain cacontology-taskforce:TaskForceMember ;
    rdfs:range xsd:integer .

cacontology-temporal:AnalysisTransitionEvent a owl:Class ;
    rdfs:label "Analysis Transition Event"@en ;
    rdfs:comment "Event transitioning investigation from Initial to Analysis Phase."@en ;
    rdfs:subClassOf cacontology-temporal:PhaseTransitionEvent .

cacontology-temporal:ClosureEvent a owl:Class ;
    rdfs:label "Investigation Closure Event"@en ;
    rdfs:comment "Event transitioning investigation from Resolution to Completed Phase."@en ;
    rdfs:subClassOf cacontology-temporal:PhaseTransitionEvent .

cacontology-temporal:ConcurrentInvestigationSituation a owl:Class ;
    rdfs:label "Concurrent Investigation Situation"@en ;
    rdfs:comment "Situation where multiple investigations run simultaneously, potentially sharing resources or evidence. Modeled as gUFO Situation with temporal overlap constraints."@en ;
    rdfs:subClassOf gufo:Situation .

cacontology-temporal:EventSequence a owl:Class ;
    rdfs:label "Investigation Event Sequence"@en ;
    rdfs:comment "Ordered sequence of investigation events with temporal dependencies. Modeled as gUFO structured event pattern."@en ;
    rdfs:subClassOf gufo:Event .

cacontology-temporal:EvidencePreservationDeadline a owl:DatatypeProperty ;
    rdfs:label "evidence preservation deadline"@en ;
    rdfs:comment "Deadline by which digital evidence must be preserved to maintain legal admissibility."@en ;
    rdfs:domain cacontology-gufo:EvidencePhase ;
    rdfs:range xsd:dateTimeStamp .

cacontology-temporal:EvidenceTransitionEvent a owl:Class ;
    rdfs:label "Evidence Transition Event"@en ;
    rdfs:comment "Event transitioning investigation from Legal Process to Evidence Phase."@en ;
    rdfs:subClassOf cacontology-temporal:PhaseTransitionEvent .

cacontology-temporal:InitiationEvent a owl:Class ;
    rdfs:label "Investigation Initiation Event"@en ;
    rdfs:comment "Event transitioning investigation from non-existence to Initial Phase."@en ;
    rdfs:subClassOf cacontology-temporal:PhaseTransitionEvent .

cacontology-temporal:LegalProcessTransitionEvent a owl:Class ;
    rdfs:label "Legal Process Transition Event"@en ;
    rdfs:comment "Event transitioning investigation from Analysis to Legal Process Phase."@en ;
    rdfs:subClassOf cacontology-temporal:PhaseTransitionEvent .

cacontology-temporal:MultiJurisdictionCoordinationSituation a owl:Class ;
    rdfs:label "Multi-Jurisdiction Coordination Situation"@en ;
    rdfs:comment "Situation where investigation requires coordination across multiple jurisdictions with timing synchronization. Modeled as gUFO Situation with coordination constraints."@en ;
    rdfs:subClassOf gufo:Situation .

cacontology-temporal:ParallelEventCluster a owl:Class ;
    rdfs:label "Parallel Event Cluster"@en ;
    rdfs:comment "Set of investigation events occurring simultaneously or with temporal overlap. Modeled as gUFO composite event pattern."@en ;
    rdfs:subClassOf gufo:Event .

cacontology-temporal:ParallelEvidenceCollectionSituation a owl:Class ;
    rdfs:label "Parallel Evidence Collection Situation"@en ;
    rdfs:comment "Situation where multiple evidence collection activities occur simultaneously across different phases. Modeled as gUFO Situation allowing phase overlap."@en ;
    rdfs:subClassOf gufo:Situation .

cacontology-temporal:ResolutionTransitionEvent a owl:Class ;
    rdfs:label "Resolution Transition Event"@en ;
    rdfs:comment "Event transitioning investigation from Evidence to Resolution Phase."@en ;
    rdfs:subClassOf cacontology-temporal:PhaseTransitionEvent .

cacontology-temporal:RoleConflictSituation a owl:Class ;
    rdfs:label "Role Conflict Situation"@en ;
    rdfs:comment "Situation where person's multiple roles create potential conflict of interest. Modeled as gUFO Situation requiring resolution."@en ;
    rdfs:subClassOf gufo:Situation .

cacontology-temporal:RoleEscalation a owl:Class ;
    rdfs:label "Role Escalation"@en ;
    rdfs:comment "Role transition involving increased responsibility or authority (e.g., analyst to lead investigator)."@en ;
    rdfs:subClassOf cacontology-temporal:RoleTransition .

cacontology-temporal:RoleReassignment a owl:Class ;
    rdfs:label "Role Reassignment"@en ;
    rdfs:comment "Role transition involving change in assignment without authority change (e.g., different investigator)."@en ;
    rdfs:subClassOf cacontology-temporal:RoleTransition .

cacontology-temporal:SimultaneousRoleSituation a owl:Class ;
    rdfs:label "Simultaneous Role Situation"@en ;
    rdfs:comment "Situation where person plays multiple roles simultaneously in investigation context. Modeled as gUFO Situation with role overlap."@en ;
    rdfs:subClassOf gufo:Situation .

cacontology-temporal:StatuteOfLimitationsDeadline a owl:DatatypeProperty ;
    rdfs:label "statute of limitations deadline"@en ;
    rdfs:comment "Legal deadline by which charges must be filed or case becomes time-barred."@en ;
    rdfs:domain cacontology-gufo:Investigation ;
    rdfs:range xsd:dateTimeStamp .

cacontology-temporal:UrgentRescueLifecycle a owl:Class ;
    rdfs:label "Urgent Child Rescue Lifecycle"@en ;
    rdfs:comment "Accelerated investigation lifecycle for urgent child rescue situations. Compressed phase durations with parallel processing."@en ;
    rdfs:subClassOf cacontology-temporal:InvestigationLifecycle .

cacontology-temporal:WarrantExpirationDate a owl:DatatypeProperty ;
    rdfs:label "warrant expiration date"@en ;
    rdfs:comment "Date when search warrant expires and execution must be completed."@en ;
    rdfs:domain cacontology-gufo:LegalProcessPhase ;
    rdfs:range xsd:dateTimeStamp .

cacontology-temporal:hasActiveDuration a owl:DatatypeProperty ;
    rdfs:label "has active duration"@en ;
    rdfs:comment "Total duration investigation was in active state (excluding suspended periods)."@en ;
    rdfs:domain cacontology-gufo:Investigation ;
    rdfs:range xsd:duration .

cacontology-temporal:hasConsequentEvent a owl:ObjectProperty ;
    rdfs:label "has consequent event"@en ;
    rdfs:comment "Links investigation event to consequent event that must follow its completion."@en ;
    rdfs:domain gufo:Event ;
    rdfs:range gufo:Event .

cacontology-temporal:hasParallelEvent a owl:ObjectProperty ;
    rdfs:label "has parallel event"@en ;
    rdfs:comment "Links investigation event to other events that can occur simultaneously."@en ;
    rdfs:domain gufo:Event ;
    rdfs:range gufo:Event .

cacontology-temporal:hasPrerequisiteEvent a owl:ObjectProperty ;
    rdfs:label "has prerequisite event"@en ;
    rdfs:comment "Links investigation event to prerequisite event that must complete before it can begin."@en ;
    rdfs:domain gufo:Event ;
    rdfs:range gufo:Event .

cacontology-temporal:hasSuspendedDuration a owl:DatatypeProperty ;
    rdfs:label "has suspended duration"@en ;
    rdfs:comment "Total duration investigation was in suspended state."@en ;
    rdfs:domain cacontology-gufo:Investigation ;
    rdfs:range xsd:duration .

cacontology-temporal:hasTimeToFirstAction a owl:DatatypeProperty ;
    rdfs:label "has time to first action"@en ;
    rdfs:comment "Duration from investigation initiation to first investigative action."@en ;
    rdfs:domain cacontology-gufo:Investigation ;
    rdfs:range xsd:duration .

cacontology-temporal:hasTimeToResolution a owl:DatatypeProperty ;
    rdfs:label "has time to resolution"@en ;
    rdfs:comment "Total duration from investigation initiation to resolution."@en ;
    rdfs:domain cacontology-gufo:Investigation ;
    rdfs:range xsd:duration .

cacontology-temporal:temporallyContains a owl:ObjectProperty ;
    rdfs:label "temporally contains"@en ;
    rdfs:comment "Links investigation event/phase to temporally contained event/phase."@en ;
    rdfs:domain [ owl:unionOf ( gufo:Event gufo:Phase ) ] ;
    rdfs:range [ owl:unionOf ( gufo:Event gufo:Phase ) ] .

cacontology-temporal:temporallyOverlapsWith a owl:ObjectProperty ;
    rdfs:label "temporally overlaps with"@en ;
    rdfs:comment "Links investigation event/phase to temporally overlapping event/phase."@en ;
    rdfs:domain [ owl:unionOf ( gufo:Event gufo:Phase ) ] ;
    rdfs:range [ owl:unionOf ( gufo:Event gufo:Phase ) ] .

cacontology-temporal:temporallyPrecedes a owl:ObjectProperty ;
    rdfs:label "temporally precedes"@en ;
    rdfs:comment "Links investigation event/phase to temporally subsequent event/phase."@en ;
    rdfs:domain [ owl:unionOf ( gufo:Event gufo:Phase ) ] ;
    rdfs:range [ owl:unionOf ( gufo:Event gufo:Phase ) ] ;
    rdfs:subPropertyOf gufo:precedes .

cacontology-temporal:triggersTransition a owl:ObjectProperty ;
    rdfs:label "triggers transition"@en ;
    rdfs:comment "Links investigation event to phase transition it triggers."@en ;
    rdfs:domain gufo:Event ;
    rdfs:range cacontology-temporal:PhaseTransitionEvent .

cacontology-temporal-shapes:PhasePerformanceMetricsShape a sh:NodeShape ;
    rdfs:label "Phase Performance Metrics Shape"@en ;
    rdfs:comment "Validates phase performance metrics such as efficiency and completion rate."@en ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:message "phaseEfficiency, when provided, must be a non-negative xsd:decimal value."@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-temporal:phaseEfficiency ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "phaseCompletionRate, when provided, must be an xsd:decimal between 0.0 and 1.0."@en ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-temporal:phaseCompletionRate ] ;
    sh:targetClass gufo:Phase .

cacontology-temporal-shapes:PhaseTemporalPropertiesShape a sh:NodeShape ;
    rdfs:label "Phase Temporal Properties Shape"@en ;
    rdfs:comment "Validates duration, deadline, and urgency properties on gUFO phases as introduced by the CAC temporal module."@en ;
    sh:property [ sh:datatype xsd:duration ;
            sh:maxCount 1 ;
            sh:message "hasMinimumDuration, when provided, must be a single xsd:duration value."@en ;
            sh:path cacontology-temporal:hasMinimumDuration ],
        [ sh:datatype xsd:duration ;
            sh:maxCount 1 ;
            sh:message "hasMaximumDuration, when provided, must be a single xsd:duration value."@en ;
            sh:path cacontology-temporal:hasMaximumDuration ],
        [ sh:datatype xsd:duration ;
            sh:maxCount 1 ;
            sh:message "hasTypicalDuration, when provided, must be a single xsd:duration value."@en ;
            sh:path cacontology-temporal:hasTypicalDuration ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "hasLegalDeadline, when provided, must be a single xsd:dateTimeStamp value."@en ;
            sh:path cacontology-temporal:hasLegalDeadline ],
        [ sh:datatype xsd:integer ;
            sh:maxCount 1 ;
            sh:maxInclusive 5 ;
            sh:message "urgencyLevel, when provided, must be an integer between 1 and 5 (1=lowest, 5=highest)."@en ;
            sh:minInclusive 1 ;
            sh:path cacontology-temporal:urgencyLevel ] ;
    sh:targetClass gufo:Phase .

cacontology-temporal-shapes:PhaseTransitionEventShape a sh:NodeShape ;
    rdfs:label "Phase Transition Event Shape"@en ;
    rdfs:comment "Ensures that every PhaseTransitionEvent has exactly one source and one target phase."@en ;
    sh:property [ sh:class gufo:Phase ;
            sh:maxCount 1 ;
            sh:message "PhaseTransitionEvent must have exactly one transitionsFrom value of type gufo:Phase."@en ;
            sh:minCount 1 ;
            sh:path cacontology-temporal:transitionsFrom ],
        [ sh:class gufo:Phase ;
            sh:maxCount 1 ;
            sh:message "PhaseTransitionEvent must have exactly one transitionsTo value of type gufo:Phase."@en ;
            sh:minCount 1 ;
            sh:path cacontology-temporal:transitionsTo ] ;
    sh:targetClass cacontology-temporal:PhaseTransitionEvent .

cacontology-temporal-shapes:ResumptionEventShape a sh:NodeShape ;
    rdfs:label "Resumption Event Shape"@en ;
    rdfs:comment "Validates links from ResumptionEvent to the resumed investigation and the terminated suspension situation."@en ;
    sh:property [ sh:class cacontology-gufo:Investigation ;
            sh:maxCount 1 ;
            sh:message "ResumptionEvent must resume exactly one cacontology-gufo:Investigation."@en ;
            sh:minCount 1 ;
            sh:path cacontology-temporal:resumes ],
        [ sh:class cacontology-temporal:SuspendedSituation ;
            sh:maxCount 1 ;
            sh:message "ResumptionEvent must terminate exactly one SuspendedSituation."@en ;
            sh:minCount 1 ;
            sh:path cacontology-temporal:terminatesSuspension ] ;
    sh:targetClass cacontology-temporal:ResumptionEvent .

cacontology-temporal-shapes:SuspensionEventShape a sh:NodeShape ;
    rdfs:label "Suspension Event Shape"@en ;
    rdfs:comment "Validates links from SuspensionEvent to the suspended investigation and the created suspension situation."@en ;
    sh:property [ sh:class cacontology-gufo:Investigation ;
            sh:maxCount 1 ;
            sh:message "SuspensionEvent must suspend exactly one cacontology-gufo:Investigation."@en ;
            sh:minCount 1 ;
            sh:path cacontology-temporal:suspends ],
        [ sh:class cacontology-temporal:SuspendedSituation ;
            sh:maxCount 1 ;
            sh:message "SuspensionEvent must create exactly one SuspendedSituation."@en ;
            sh:minCount 1 ;
            sh:path cacontology-temporal:createsSuspension ] ;
    sh:targetClass cacontology-temporal:SuspensionEvent .

cacontology-trafficking:AdultTraffickingVictimRole a gufo:Role,
        owl:Class ;
    rdfs:label "Adult Trafficking Victim Role"@en ;
    rdfs:comment "Role of adult being sex trafficked through force, fraud, or coercion. Modeled as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf cacontology-trafficking:TraffickingVictimRole .

cacontology-trafficking:AgingOutVictimProfile a owl:Class ;
    rdfs:label "Aging Out Victim Profile"@en ;
    rdfs:comment "Vulnerability profile for youth aging out of foster care system."@en ;
    rdfs:subClassOf cacontology-trafficking:VictimVulnerabilityProfile .

cacontology-trafficking:AssociateTraffickerRole a gufo:Role,
        owl:Class ;
    rdfs:label "Associate Trafficker Role"@en ;
    rdfs:comment "Supporting role in trafficking operation, assisting primary traffickers. Modeled as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf cacontology-trafficking:TraffickerRole .

cacontology-trafficking:CommercialSexualExploitation a owl:Class ;
    rdfs:label "Commercial Sexual Exploitation"@en ;
    rdfs:comment "Forced engagement in commercial sexual activities for the traffickers' profit. Modeled as gUFO Event."@en ;
    rdfs:subClassOf cacontology-trafficking:TraffickingOperation .

cacontology-trafficking:CrossJurisdictionalControl a owl:Class ;
    rdfs:label "Cross-Jurisdictional Control"@en ;
    rdfs:comment "Maintenance of victim control across multiple jurisdictions through coordinated trafficking network. Modeled as gUFO Event."@en ;
    rdfs:subClassOf cacontology-trafficking:VictimControl .

cacontology-trafficking:DisruptionPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Disruption Phase"@en ;
    rdfs:comment "Phase when trafficking enterprise faces law enforcement intervention."@en ;
    rdfs:subClassOf cacontology-trafficking:TraffickingEnterprise .

cacontology-trafficking:EstablishmentPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Establishment Phase"@en ;
    rdfs:comment "Initial phase of trafficking enterprise formation and recruitment setup."@en ;
    rdfs:subClassOf cacontology-trafficking:TraffickingEnterprise .

cacontology-trafficking:ExpansionPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Expansion Phase"@en ;
    rdfs:comment "Phase of trafficking enterprise growth, adding victims and locations."@en ;
    rdfs:subClassOf cacontology-trafficking:TraffickingEnterprise .

cacontology-trafficking:FinancialFacilitatorRole a gufo:Role,
        owl:Class ;
    rdfs:label "Financial Facilitator Role"@en ;
    rdfs:comment "Role managing financial aspects including collecting earnings and money laundering. Modeled as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf cacontology-trafficking:TraffickerRole .

cacontology-trafficking:InterstateVictimTransport a owl:Class ;
    rdfs:label "Interstate Victim Transport"@en ;
    rdfs:comment "Transportation of trafficking victims across state lines for commercial sexual exploitation. Modeled as gUFO Event."@en ;
    rdfs:subClassOf cacontology-trafficking:VictimTransportation .

cacontology-trafficking:MinorTraffickingVictimRole a gufo:Role,
        owl:Class ;
    rdfs:label "Minor Trafficking Victim Role"@en ;
    rdfs:comment "Role of minor (under 18) being sex trafficked. Modeled as anti-rigid gUFO Role. Concrete victim age at specific trafficking operations SHOULD be represented using cacontology-temporal:AgeAtTimeSituation instances linked to the victim person, allowing precise modeling of age-of-consent, enhanced-penalty, and related legal thresholds."@en ;
    rdfs:subClassOf cacontology-trafficking:TraffickingVictimRole .

cacontology-trafficking:MultiStateTraffickingConspiracy a owl:Class ;
    rdfs:label "Multi-State Trafficking Conspiracy"@en ;
    rdfs:comment "Criminal conspiracy spanning multiple states for trafficking operations (e.g., Brooklyn-North Carolina network). Modeled as gUFO Event."@en ;
    rdfs:subClassOf cacontology-trafficking:TraffickingOperation .

cacontology-trafficking:OngoingDangerResponse a owl:Class ;
    rdfs:label "Ongoing Danger Response"@en ;
    rdfs:comment "Response to situations where victims are identified as being in ongoing danger from traffickers. Modeled as gUFO Event."@en ;
    rdfs:subClassOf cacontology-trafficking:TraffickingVictimRescue .

cacontology-trafficking:OperationalPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Operational Phase"@en ;
    rdfs:comment "Active operational phase of trafficking enterprise with established victim control."@en ;
    rdfs:subClassOf cacontology-trafficking:TraffickingEnterprise .

cacontology-trafficking:PrimaryTraffickerRole a gufo:Role,
        owl:Class ;
    rdfs:label "Primary Trafficker Role"@en ;
    rdfs:comment "Leading role in trafficking operation, often controlling multiple victims and coordinating activities. Modeled as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf cacontology-trafficking:TraffickerRole .

cacontology-trafficking:RecruitmentFacilitatorRole a gufo:Role,
        owl:Class ;
    rdfs:label "Recruitment Facilitator Role"@en ;
    rdfs:comment "Role focused on recruiting and grooming new victims for trafficking. Modeled as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf cacontology-trafficking:TraffickerRole .

cacontology-trafficking:RunawayVictimProfile a owl:Class ;
    rdfs:label "Runaway Victim Profile"@en ;
    rdfs:comment "Vulnerability profile for runaway or homeless youth targeted by traffickers."@en ;
    rdfs:subClassOf cacontology-trafficking:VictimVulnerabilityProfile .

cacontology-trafficking:TraffickingCell a owl:Class ;
    rdfs:label "Trafficking Cell"@en ;
    rdfs:comment "Smaller operational unit within trafficking ring, often controlling specific victims or geographic areas. Modeled as specialized gUFO Organization."@en ;
    rdfs:subClassOf cacontology-trafficking:TraffickingEnterprise .

cacontology-trafficking:TraffickingHierarchy a owl:Class ;
    rdfs:label "Trafficking Hierarchy"@en ;
    rdfs:comment "Organizational structure within trafficking enterprise defining roles and authority levels."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-trafficking:TraffickingNetworkSituation a owl:Class ;
    rdfs:label "Trafficking Network Situation"@en ;
    rdfs:comment "Complex situation encompassing active trafficking network operations across multiple jurisdictions."@en ;
    rdfs:subClassOf gufo:Situation .

cacontology-trafficking:TraffickingRing a owl:Class ;
    rdfs:label "Trafficking Ring"@en ;
    rdfs:comment "Coordinated group of traffickers operating across multiple jurisdictions with shared victims and resources (e.g., 8-defendant Brooklyn case). Modeled as specialized gUFO Organization."@en ;
    rdfs:subClassOf cacontology-trafficking:TraffickingEnterprise .

cacontology-trafficking:TransportationFacilitatorRole a gufo:Role,
        owl:Class ;
    rdfs:label "Transportation Facilitator Role"@en ;
    rdfs:comment "Role focused on transporting victims between locations for trafficking purposes. Modeled as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf cacontology-trafficking:TraffickerRole .

cacontology-trafficking:VictimControlSituation a owl:Class ;
    rdfs:label "Victim Control Situation"@en ;
    rdfs:comment "Ongoing situation of psychological and physical control maintained over trafficking victims."@en ;
    rdfs:subClassOf gufo:Situation .

cacontology-trafficking:VictimEmergencyResponse a owl:Class ;
    rdfs:label "Victim Emergency Response"@en ;
    rdfs:comment "Emergency response to 911 calls from trafficking victims seeking help. Modeled as gUFO Event."@en ;
    rdfs:subClassOf cacontology-trafficking:TraffickingVictimRescue .

cacontology-trafficking:VictimRotation a owl:Class ;
    rdfs:label "Victim Rotation"@en ;
    rdfs:comment "Systematic movement of victims between different locations to avoid detection and maintain control. Modeled as gUFO Event."@en ;
    rdfs:subClassOf cacontology-trafficking:VictimTransportation .

cacontology-trafficking:VictimSafetyAssessment a owl:Class ;
    rdfs:label "Victim Safety Assessment"@en ;
    rdfs:comment "Assessment of victim safety and ongoing threats from trafficking network. Modeled as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-trafficking:crossesJurisdiction a owl:ObjectProperty ;
    rdfs:label "crosses jurisdiction"@en ;
    rdfs:comment "Links operation to jurisdictions crossed during execution."@en ;
    rdfs:domain cacontology-trafficking:TraffickingOperation ;
    rdfs:range uco-location:Location .

cacontology-trafficking:hasControlMethod a owl:ObjectProperty ;
    rdfs:label "has control method"@en ;
    rdfs:comment "Links victim control event to specific method used."@en ;
    rdfs:domain cacontology-trafficking:VictimControl ;
    rdfs:range uco-core:UcoObject .

cacontology-trafficking:hasEnterprisePhase a owl:ObjectProperty ;
    rdfs:label "has enterprise phase"@en ;
    rdfs:comment "Links trafficking enterprise to its operational phases."@en ;
    rdfs:domain gufo:Organization ;
    rdfs:range gufo:Phase .

cacontology-trafficking:hasPhaseBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has phase begin point"@en ;
    rdfs:comment "Temporal begin point for trafficking enterprise phase."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-trafficking:hasPhaseEndPoint a owl:DatatypeProperty ;
    rdfs:label "has phase end point"@en ;
    rdfs:comment "Temporal end point for trafficking enterprise phase."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-trafficking:phaseDuration a owl:DatatypeProperty ;
    rdfs:label "phase duration"@en ;
    rdfs:comment "Duration of trafficking enterprise phase."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:duration .

cacontology-trafficking:requiresCoordination a owl:ObjectProperty ;
    rdfs:label "requires coordination"@en ;
    rdfs:comment "Links multi-jurisdictional situation to required coordination mechanisms."@en ;
    rdfs:domain cacontology-trafficking:MultiJurisdictionalSituation ;
    rdfs:range uco-core:UcoObject .

cacontology-trafficking:roleDuration a owl:DatatypeProperty ;
    rdfs:label "role duration"@en ;
    rdfs:comment "Duration of individual's trafficking role."@en ;
    rdfs:domain gufo:Role ;
    rdfs:range xsd:duration .

cacontology-trafficking:transitionsToPhase a owl:ObjectProperty ;
    rdfs:label "transitions to phase"@en ;
    rdfs:comment "Links one enterprise phase to the next phase in sequence."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range gufo:Phase .

cacontology-trafficking:vulnerabilityExploited a owl:ObjectProperty ;
    rdfs:label "vulnerability exploited"@en ;
    rdfs:comment "Links victim recruitment to specific vulnerability profile exploited."@en ;
    rdfs:domain cacontology-trafficking:VictimRecruitment ;
    rdfs:range cacontology-trafficking:VictimVulnerabilityProfile .

cacontology-trafficking-shapes:EarningsCollectionShape a sh:NodeShape ;
    rdfs:label "Earnings Collection Shape"@en ;
    rdfs:comment "Validates core financial properties for earnings collection events."@en ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:message "earningsAmount must be a single non-negative xsd:decimal value."@en ;
            sh:minCount 1 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-trafficking:earningsAmount ],
        [ sh:datatype xsd:duration ;
            sh:maxCount 1 ;
            sh:message "earningsPeriod, when provided, must be a single xsd:duration value."@en ;
            sh:path cacontology-trafficking:earningsPeriod ] ;
    sh:targetClass cacontology-trafficking:EarningsCollection .

cacontology-trafficking-shapes:MultiJurisdictionalSituationShape a sh:NodeShape ;
    rdfs:label "Multi-Jurisdictional Situation Shape"@en ;
    rdfs:comment "Validates basic complexity and count metrics for multi-jurisdictional trafficking situations."@en ;
    sh:property [ sh:datatype xsd:integer ;
            sh:maxCount 1 ;
            sh:maxInclusive 5 ;
            sh:message "situationComplexity, when provided, must be an integer between 1 and 5."@en ;
            sh:minInclusive 1 ;
            sh:path cacontology-trafficking:situationComplexity ],
        [ sh:datatype xsd:integer ;
            sh:maxCount 1 ;
            sh:message "involvesJurisdictionCount, when provided, must be a non-negative integer."@en ;
            sh:minInclusive 0 ;
            sh:path cacontology-trafficking:involvesJurisdictionCount ],
        [ sh:datatype xsd:integer ;
            sh:maxCount 1 ;
            sh:message "involvesVictimCount, when provided, must be a non-negative integer."@en ;
            sh:minInclusive 0 ;
            sh:path cacontology-trafficking:involvesVictimCount ],
        [ sh:datatype xsd:integer ;
            sh:maxCount 1 ;
            sh:message "involvesTraffickerCount, when provided, must be a non-negative integer."@en ;
            sh:minInclusive 0 ;
            sh:path cacontology-trafficking:involvesTraffickerCount ] ;
    sh:targetClass cacontology-trafficking:MultiJurisdictionalSituation .

cacontology-trafficking-shapes:TraffickerRoleShape a sh:NodeShape ;
    rdfs:label "Trafficker Role Shape"@en ;
    rdfs:comment "Validates that trafficker roles are modeled as gUFO roles with optional hierarchy and control properties."@en ;
    sh:property [ sh:hasValue gufo:Role ;
            sh:message "Trafficker roles should be typed as gufo:Role (anti-rigid sortal)."@en ;
            sh:path rdf:type ],
        [ sh:datatype xsd:integer ;
            sh:maxCount 1 ;
            sh:message "Hierarchy level, when provided, must be a single xsd:integer value."@en ;
            sh:path cacontology-trafficking:hasHierarchyLevel ],
        [ sh:class cacontology-trafficking:TraffickingVictimRole ;
            sh:message "controlsVictim links should point to TraffickingVictimRole instances."@en ;
            sh:path cacontology-trafficking:controlsVictim ] ;
    sh:targetClass cacontology-trafficking:TraffickerRole .

cacontology-trafficking-shapes:TraffickingEnterpriseShape a sh:NodeShape ;
    rdfs:label "Trafficking Enterprise Shape"@en ;
    rdfs:comment "Validates core temporal and jurisdictional properties for trafficking enterprises modeled as gUFO organizations."@en ;
    sh:property [ sh:hasValue gufo:Organization ;
            sh:message "Trafficking enterprise should be typed as gufo:Organization."@en ;
            sh:path rdf:type ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Trafficking enterprise can have at most one enterprise begin point as xsd:dateTimeStamp."@en ;
            sh:path cacontology-trafficking:hasEnterpriseBeginPoint ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Trafficking enterprise can have at most one enterprise end point as xsd:dateTimeStamp."@en ;
            sh:path cacontology-trafficking:hasEnterpriseEndPoint ],
        [ sh:datatype xsd:duration ;
            sh:maxCount 1 ;
            sh:message "Trafficking enterprise can have at most one enterpriseDuration value of type xsd:duration."@en ;
            sh:path cacontology-trafficking:enterpriseDuration ],
        [ sh:class uco-location:Location ;
            sh:message "Trafficking enterprise jurisdictions must be uco-location:Location instances when provided."@en ;
            sh:path cacontology-trafficking:operatesInJurisdiction ] ;
    sh:targetClass cacontology-trafficking:TraffickingEnterprise .

cacontology-trafficking-shapes:TraffickingOperationShape a sh:NodeShape ;
    rdfs:label "Trafficking Operation Shape"@en ;
    rdfs:comment "Minimal temporal validation for trafficking operations modeled as gUFO events."@en ;
    sh:property [ sh:hasValue gufo:Event ;
            sh:message "Trafficking operations should be typed as gufo:Event."@en ;
            sh:path rdf:type ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Trafficking operations can have at most one begin point in xsd:dateTimeStamp."@en ;
            sh:path gufo:hasBeginPointInXSDDateTimeStamp ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Trafficking operations can have at most one end point in xsd:dateTimeStamp."@en ;
            sh:path gufo:hasEndPointInXSDDateTimeStamp ] ;
    sh:targetClass cacontology-trafficking:TraffickingOperation .

cacontology-trafficking-shapes:TraffickingVictimRoleShape a sh:NodeShape ;
    rdfs:label "Trafficking Victim Role Shape"@en ;
    rdfs:comment "Validates temporal role properties for trafficking victim roles."@en ;
    sh:property [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Victim roles can have at most one role begin point as xsd:dateTimeStamp."@en ;
            sh:path cacontology-trafficking:hasRoleBeginPoint ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Victim roles can have at most one role end point as xsd:dateTimeStamp."@en ;
            sh:path cacontology-trafficking:hasRoleEndPoint ],
        [ sh:hasValue gufo:Role ;
            sh:message "Trafficking victim roles should be typed as gufo:Role (anti-rigid sortal)."@en ;
            sh:path rdf:type ] ;
    sh:targetClass cacontology-trafficking:TraffickingVictimRole .

cacontology-trafficking-shapes:VictimTransportationShape a sh:NodeShape ;
    rdfs:label "Victim Transportation Shape"@en ;
    rdfs:comment "Validates origin, destination, and method properties for victim transportation events."@en ;
    sh:property [ sh:class uco-location:Location ;
            sh:maxCount 1 ;
            sh:message "Victim transportation must have exactly one originLocation of type uco-location:Location."@en ;
            sh:minCount 1 ;
            sh:path cacontology-trafficking:originLocation ],
        [ sh:class uco-location:Location ;
            sh:maxCount 1 ;
            sh:message "Victim transportation must have exactly one destinationLocation of type uco-location:Location."@en ;
            sh:minCount 1 ;
            sh:path cacontology-trafficking:destinationLocation ],
        [ sh:class uco-core:UcoObject ;
            sh:maxCount 1 ;
            sh:message "transportationMethod, when provided, must reference a single uco-core:UcoObject (e.g., vehicle or method artifact)."@en ;
            sh:path cacontology-trafficking:transportationMethod ] ;
    sh:targetClass cacontology-trafficking:VictimTransportation .

cacontology-training:AssessmentPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Assessment Phase"@en ;
    rdfs:comment "Phase of participant assessment and competency evaluation. Modeled as anti-rigid gUFO Phase."@en ;
    rdfs:subClassOf cacontology-training:InternationalTraining .

cacontology-training:CapacityBuildingProgramShape a sh:NodeShape ;
    rdfs:label "Capacity Building Program Shape"@en ;
    rdfs:comment "Validation shape for capacity building program instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "basic" "intermediate" "advanced" "expert" ) ;
            sh:maxCount 1 ;
            sh:message "Capacity level must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-training:capacityLevel ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Capacity building program must have a name (5-200 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path uco-core:name ] ;
    sh:targetClass cacontology-training:CapacityBuildingProgram .

cacontology-training:CapacityBuildingSituation a owl:Class ;
    rdfs:label "Capacity Building Situation"@en ;
    rdfs:comment "Situation focused on building institutional and individual capacity for child protection. Modeled as gUFO Situation."@en ;
    rdfs:subClassOf gufo:Situation .

cacontology-training:CapacityBuildingTargetValidationShape a sh:NodeShape ;
    rdfs:label "Capacity Building Target Validation Shape"@en ;
    rdfs:comment "Validates that capacity building programs have target organizations."@en ;
    sh:sparql [ sh:message "Capacity building program should have target organizations."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-training:CapacityBuildingProgram .
                FILTER NOT EXISTS {
                    $this cacontology-training:buildsCapacityFor ?org .
                    ?org a uco-identity:Organization .
                }
            }
        """ ] ;
    sh:targetClass cacontology-training:CapacityBuildingProgram .

cacontology-training:CapacityImpactShape a sh:NodeShape ;
    rdfs:label "Capacity Impact Shape"@en ;
    rdfs:comment "Validation shape for capacity impact instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Capacity impact name should be 5-200 characters when specified."@en ;
            sh:minCount 0 ;
            sh:minLength 5 ;
            sh:path uco-core:name ] ;
    sh:targetClass cacontology-training:CapacityImpact .

cacontology-training:CapacityLevelValidationShape a sh:NodeShape ;
    rdfs:label "Capacity Level Validation Shape"@en ;
    rdfs:comment "Validates capacity level requirements for specialized training."@en ;
    sh:sparql [ sh:message "Specialized training should have appropriate capacity levels."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a ?trainingType ;
                      cacontology-training:capacityLevel "basic" .
                FILTER (?trainingType IN (
                    cacontology-training:DigitalForensicsTraining,
                    cacontology-training:CriminalJusticeTraining
                ))
            }
        """ ] ;
    sh:targetClass cacontology-training:CriminalJusticeTraining,
        cacontology-training:DigitalForensicsTraining .

cacontology-training:CertificationPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Certification Phase"@en ;
    rdfs:comment "Phase of awarding certifications and credentials. Modeled as anti-rigid gUFO Phase."@en ;
    rdfs:subClassOf cacontology-training:InternationalTraining .

cacontology-training:CertificationStatusValidationShape a sh:NodeShape ;
    rdfs:label "Certification Status Validation Shape"@en ;
    rdfs:comment "Validates certification status consistency."@en ;
    sh:sparql [ sh:message "Expired certifications should not have active status."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-training:certificationStatus "active" ;
                      uco-core:endTime ?endTime .
                FILTER (?endTime < NOW())
            }
        """ ] ;
    sh:targetClass cacontology-training:ProfessionalCertification .

cacontology-training:CertificationValidationShape a sh:NodeShape ;
    rdfs:label "Certification Validation Shape"@en ;
    rdfs:comment "Validates that certifications have certifying bodies."@en ;
    sh:sparql [ sh:message "Professional certification should have certifying body."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-training:ProfessionalCertification .
                FILTER NOT EXISTS {
                    $this cacontology-training:certifiedBy ?body .
                    ?body a cacontology-training:CertificationBody .
                }
            }
        """ ] ;
    sh:targetClass cacontology-training:ProfessionalCertification .

cacontology-training:CertificationValidityValidationShape a sh:NodeShape ;
    rdfs:label "Certification Validity Validation Shape"@en ;
    rdfs:comment "Validates certification validity periods."@en ;
    sh:sparql [ sh:message "Active certifications should have reasonable validity periods."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-training:certificationStatus "active" ;
                      cacontology-training:certificationValidityPeriod ?period .
                FILTER (?period < 6.0)
            }
        """ ] ;
    sh:targetClass cacontology-training:ProfessionalCertification .

cacontology-training:CertifiedProfessional a gufo:Role,
        owl:Class ;
    rdfs:label "Certified Professional"@en ;
    rdfs:comment "Professional who has achieved certification. Modeled as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf uco-role:Role .

cacontology-training:ChildProtectionTrainingShape a sh:NodeShape ;
    rdfs:label "Child Protection Training Shape"@en ;
    rdfs:comment "Validation shape for child protection training instances."@en ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 200.0 ;
            sh:message "Child protection training duration should be between 2 and 200 hours."@en ;
            sh:minCount 0 ;
            sh:minInclusive 2.0 ;
            sh:path cacontology-training:trainingDuration ] ;
    sh:targetClass cacontology-training:ChildProtectionTraining .

cacontology-training:CommunityEngagementMetricsShape a sh:NodeShape ;
    rdfs:label "Community Engagement Metrics Shape"@en ;
    rdfs:comment "Validation shape for community engagement metrics instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Community engagement metrics name should be 5-200 characters when specified."@en ;
            sh:minCount 0 ;
            sh:minLength 5 ;
            sh:path uco-core:name ] ;
    sh:targetClass cacontology-training:CommunityEngagementMetrics .

cacontology-training:CompetencyAssessmentShape a sh:NodeShape ;
    rdfs:label "Competency Assessment Shape"@en ;
    rdfs:comment "Validation shape for competency assessment instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "novice" "competent" "proficient" "expert" ) ;
            sh:maxCount 1 ;
            sh:message "Competency level must be from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-training:competencyLevel ] ;
    sh:targetClass cacontology-training:CompetencyAssessment .

cacontology-training:ContentDevelopmentPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Content Development Phase"@en ;
    rdfs:comment "Phase of developing training content and materials. Modeled as anti-rigid gUFO Phase."@en ;
    rdfs:subClassOf cacontology-training:CapacityBuildingProgram .

cacontology-training:ContinuingEducationShape a sh:NodeShape ;
    rdfs:label "Continuing Education Shape"@en ;
    rdfs:comment "Validation shape for continuing education instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Continuing education must have a name (5-200 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path uco-core:name ] ;
    sh:targetClass cacontology-training:ContinuingEducation .

cacontology-training:CriminalJusticeTrainingShape a sh:NodeShape ;
    rdfs:label "Criminal Justice Training Shape"@en ;
    rdfs:comment "Validation shape for criminal justice training instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "intermediate" "advanced" "expert" ) ;
            sh:maxCount 1 ;
            sh:message "Criminal justice training should be intermediate, advanced, or expert level."@en ;
            sh:minCount 0 ;
            sh:path cacontology-training:capacityLevel ] ;
    sh:targetClass cacontology-training:CriminalJusticeTraining .

cacontology-training:CurriculumModuleValidationShape a sh:NodeShape ;
    rdfs:label "Curriculum Module Validation Shape"@en ;
    rdfs:comment "Validates that curricula include training modules."@en ;
    sh:sparql [ sh:message "Training curriculum should include training modules."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-training:TrainingCurriculum .
                FILTER NOT EXISTS {
                    ?module cacontology-training:includedInCurriculum $this .
                    ?module a cacontology-training:TrainingModule .
                }
            }
        """ ] ;
    sh:targetClass cacontology-training:TrainingCurriculum .

cacontology-training:DataQualityShape a sh:NodeShape ;
    rdfs:label "Data Quality Shape"@en ;
    rdfs:comment "Validates data quality for training entities."@en ;
    sh:property [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Creation time should be specified when available."@en ;
            sh:minCount 0 ;
            sh:path uco-core:createdTime ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Modification time should be specified when available."@en ;
            sh:minCount 0 ;
            sh:path uco-core:modifiedTime ] ;
    sh:targetClass cacontology-training:CapacityBuildingProgram,
        cacontology-training:InternationalTraining,
        cacontology-training:ProfessionalCertification,
        cacontology-training:TrainingMetrics .

cacontology-training:DigitalForensicsTrainingShape a sh:NodeShape ;
    rdfs:label "Digital Forensics Training Shape"@en ;
    rdfs:comment "Validation shape for digital forensics training instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "intermediate" "advanced" "expert" ) ;
            sh:maxCount 1 ;
            sh:message "Digital forensics training must be intermediate, advanced, or expert level."@en ;
            sh:minCount 1 ;
            sh:path cacontology-training:capacityLevel ] ;
    sh:targetClass cacontology-training:DigitalForensicsTraining .

cacontology-training:GlobalTrainingReachShape a sh:NodeShape ;
    rdfs:label "Global Training Reach Shape"@en ;
    rdfs:comment "Validation shape for global training reach instances."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 1000000 ;
            sh:message "Professionals trained must be between 1 and 1000000 when specified."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1 ;
            sh:path cacontology-training:professionalsTrained ] ;
    sh:targetClass cacontology-training:GlobalTrainingReach .

cacontology-training:GlobalTrainingSituation a owl:Class ;
    rdfs:label "Global Training Situation"@en ;
    rdfs:comment "Situation involving global training initiatives across multiple countries and organizations. Modeled as gUFO Situation."@en ;
    rdfs:subClassOf gufo:Situation .

cacontology-training:HotlineTrainingShape a sh:NodeShape ;
    rdfs:label "Hotline Training Shape"@en ;
    rdfs:comment "Validation shape for hotline training instances."@en ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 100.0 ;
            sh:message "Hotline training duration should be between 8 and 100 hours."@en ;
            sh:minCount 0 ;
            sh:minInclusive 8.0 ;
            sh:path cacontology-training:trainingDuration ] ;
    sh:targetClass cacontology-training:HotlineTraining .

cacontology-training:HybridTrainingShape a sh:NodeShape ;
    rdfs:label "Hybrid Training Shape"@en ;
    rdfs:comment "Validation shape for hybrid training instances."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 10000 ;
            sh:message "Hybrid training reach count must be between 1 and 10000 when specified."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1 ;
            sh:path cacontology-training:trainingReachCount ] ;
    sh:targetClass cacontology-training:HybridTraining .

cacontology-training:InPersonTrainingShape a sh:NodeShape ;
    rdfs:label "In-Person Training Shape"@en ;
    rdfs:comment "Validation shape for in-person training instances."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 1000 ;
            sh:message "In-person training reach count must be between 1 and 1000 when specified."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1 ;
            sh:path cacontology-training:trainingReachCount ] ;
    sh:targetClass cacontology-training:InPersonTraining .

cacontology-training:InternationalTrainingShape a sh:NodeShape ;
    rdfs:label "International Training Shape"@en ;
    rdfs:comment "Validation shape for international training instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "International training must have a name (5-200 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path uco-core:name ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "International training must specify start time."@en ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "International training may specify end time."@en ;
            sh:minCount 0 ;
            sh:path uco-core:endTime ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 100000 ;
            sh:message "Training reach count must be between 1 and 100000 when specified."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1 ;
            sh:path cacontology-training:trainingReachCount ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 2000.0 ;
            sh:message "Training duration must be between 0.5 and 2000 hours."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.5 ;
            sh:path cacontology-training:trainingDuration ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Participation rate must be between 0.0 and 1.0."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-training:participationRate ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Completion rate must be between 0.0 and 1.0."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-training:completionRate ],
        [ sh:datatype xsd:string ;
            sh:maxCount 10 ;
            sh:maxLength 50 ;
            sh:message "Training language should be 2-50 characters (up to 10 languages)."@en ;
            sh:minCount 0 ;
            sh:minLength 2 ;
            sh:path cacontology-training:trainingLanguage ] ;
    sh:targetClass cacontology-training:InternationalTraining .

cacontology-training:InvestigationTrainingShape a sh:NodeShape ;
    rdfs:label "Investigation Training Shape"@en ;
    rdfs:comment "Validation shape for investigation training instances."@en ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 400.0 ;
            sh:message "Investigation training duration should be between 8 and 400 hours."@en ;
            sh:minCount 0 ;
            sh:minInclusive 8.0 ;
            sh:path cacontology-training:trainingDuration ] ;
    sh:targetClass cacontology-training:InvestigationTraining .

cacontology-training:K9ProgramMetricsShape a sh:NodeShape ;
    rdfs:label "K9 Program Metrics Shape"@en ;
    rdfs:comment "Validation shape for K9 program metrics instances."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 10000 ;
            sh:message "K9 search warrants assisted must be between 1 and 10000 when specified."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1 ;
            sh:path cacontology-training:k9SearchWarrantsAssisted ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 1000 ;
            sh:message "K9 public presentations must be between 1 and 1000 when specified."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1 ;
            sh:path cacontology-training:k9PublicPresentations ] ;
    sh:targetClass cacontology-training:K9ProgramMetrics .

cacontology-training:LegalTrainingShape a sh:NodeShape ;
    rdfs:label "Legal Training Shape"@en ;
    rdfs:comment "Validation shape for legal training instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "basic" "intermediate" "advanced" "expert" ) ;
            sh:maxCount 1 ;
            sh:message "Legal training capacity level must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-training:capacityLevel ] ;
    sh:targetClass cacontology-training:LegalTraining .

cacontology-training:MentorshipProgramShape a sh:NodeShape ;
    rdfs:label "Mentorship Program Shape"@en ;
    rdfs:comment "Validation shape for mentorship program instances."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 100 ;
            sh:message "Mentorship program reach count must be between 1 and 100 when specified."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1 ;
            sh:path cacontology-training:trainingReachCount ] ;
    sh:targetClass cacontology-training:MentorshipProgram .

cacontology-training:MetricsConsistencyValidationShape a sh:NodeShape ;
    rdfs:label "Metrics Consistency Validation Shape"@en ;
    rdfs:comment "Validates consistency between related metrics."@en ;
    sh:sparql [ sh:message "Total attendees should be reasonable relative to event count."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-training:outreachEventsCount ?events ;
                      cacontology-training:totalAttendeesReached ?attendees .
                FILTER (?attendees < ?events)
            }
        """ ] ;
    sh:targetClass cacontology-training:OutreachEventMetrics .

cacontology-training:MultiStakeholderTrainingSituation a owl:Class ;
    rdfs:label "Multi-Stakeholder Training Situation"@en ;
    rdfs:comment "Situation involving training coordination between multiple stakeholder organizations. Modeled as gUFO Situation."@en ;
    rdfs:subClassOf gufo:Situation .

cacontology-training:OnlineTrainingShape a sh:NodeShape ;
    rdfs:label "Online Training Shape"@en ;
    rdfs:comment "Validation shape for online training instances."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 100000 ;
            sh:message "Online training reach count must be between 1 and 100000 when specified."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1 ;
            sh:path cacontology-training:trainingReachCount ] ;
    sh:targetClass cacontology-training:OnlineTraining .

cacontology-training:OperationalTrainingMetricsShape a sh:NodeShape ;
    rdfs:label "Operational Training Metrics Shape"@en ;
    rdfs:comment "Validation shape for operational training metrics instances."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 10000 ;
            sh:message "Operational deployment count must be between 1 and 10000 when specified."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1 ;
            sh:path cacontology-training:operationalDeploymentCount ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Training to operation effectiveness must be between 0.0 and 1.0."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-training:trainingToOperationEffectiveness ] ;
    sh:targetClass cacontology-training:OperationalTrainingMetrics .

cacontology-training:OutreachEventMetricsShape a sh:NodeShape ;
    rdfs:label "Outreach Event Metrics Shape"@en ;
    rdfs:comment "Validation shape for outreach event metrics instances."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 10000 ;
            sh:message "Outreach events count must be between 1 and 10000 when specified."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1 ;
            sh:path cacontology-training:outreachEventsCount ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 1000000 ;
            sh:message "Total attendees reached must be between 1 and 1000000 when specified."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1 ;
            sh:path cacontology-training:totalAttendeesReached ] ;
    sh:targetClass cacontology-training:OutreachEventMetrics .

cacontology-training:ProfessionalCertificationShape a sh:NodeShape ;
    rdfs:label "Professional Certification Shape"@en ;
    rdfs:comment "Validation shape for professional certification instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Professional certification must have a name (5-200 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path uco-core:name ],
        [ sh:datatype xsd:string ;
            sh:in ( "active" "expired" "suspended" "revoked" "pending" ) ;
            sh:maxCount 1 ;
            sh:message "Certification status must be from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-training:certificationStatus ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 120.0 ;
            sh:message "Certification validity period must be between 1 and 120 months."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1.0 ;
            sh:path cacontology-training:certificationValidityPeriod ] ;
    sh:targetClass cacontology-training:ProfessionalCertification .

cacontology-training:ProfessionalDevelopmentShape a sh:NodeShape ;
    rdfs:label "Professional Development Shape"@en ;
    rdfs:comment "Validation shape for professional development instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Professional development must have a name (5-200 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path uco-core:name ] ;
    sh:targetClass cacontology-training:ProfessionalDevelopment .

cacontology-training:ProfessionalTrainingMetricsShape a sh:NodeShape ;
    rdfs:label "Professional Training Metrics Shape"@en ;
    rdfs:comment "Validation shape for professional training metrics instances."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 100000 ;
            sh:message "Professionals trained count must be between 1 and 100000 when specified."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1 ;
            sh:path cacontology-training:professionalsTrainedCount ] ;
    sh:targetClass cacontology-training:ProfessionalTrainingMetrics .

cacontology-training:ProgramPlanningPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Program Planning Phase"@en ;
    rdfs:comment "Phase of training program planning and curriculum development. Modeled as anti-rigid gUFO Phase."@en ;
    rdfs:subClassOf cacontology-training:CapacityBuildingProgram .

cacontology-training:SkillsDevelopmentProgramShape a sh:NodeShape ;
    rdfs:label "Skills Development Program Shape"@en ;
    rdfs:comment "Validation shape for skills development program instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "basic" "intermediate" "advanced" "expert" ) ;
            sh:maxCount 1 ;
            sh:message "Skills development program must specify capacity level."@en ;
            sh:minCount 1 ;
            sh:path cacontology-training:capacityLevel ] ;
    sh:targetClass cacontology-training:SkillsDevelopmentProgram .

cacontology-training:SkillsValidationShape a sh:NodeShape ;
    rdfs:label "Skills Validation Shape"@en ;
    rdfs:comment "Validation shape for skills validation instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 1000 ;
            sh:message "Skills acquired must be described (10-1000 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 10 ;
            sh:path cacontology-training:skillsAcquired ] ;
    sh:targetClass cacontology-training:SkillsValidation .

cacontology-training:SubjectMatterExpert a gufo:Role,
        owl:Class ;
    rdfs:label "Subject Matter Expert"@en ;
    rdfs:comment "Expert providing specialized knowledge in training. Modeled as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf uco-role:Role .

cacontology-training:TemporalValidationShape a sh:NodeShape ;
    rdfs:label "Temporal Validation Shape"@en ;
    rdfs:comment "Validates temporal consistency for training programs."@en ;
    sh:sparql [ sh:message "Start time must be before end time when both are specified."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this uco-core:startTime ?start ;
                      uco-core:endTime ?end .
                FILTER (?start >= ?end)
            }
        """ ] ;
    sh:targetClass cacontology-training:InternationalTraining .

cacontology-training:TrainingCertificateShape a sh:NodeShape ;
    rdfs:label "Training Certificate Shape"@en ;
    rdfs:comment "Validation shape for training certificate instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Training certificate must have a name (5-200 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path uco-core:name ] ;
    sh:targetClass cacontology-training:TrainingCertificate .

cacontology-training:TrainingCoordinator a gufo:Role,
        owl:Class ;
    rdfs:label "Training Coordinator"@en ;
    rdfs:comment "Coordinator responsible for organizing training programs. Modeled as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf uco-role:Role .

cacontology-training:TrainingCurriculumShape a sh:NodeShape ;
    rdfs:label "Training Curriculum Shape"@en ;
    rdfs:comment "Validation shape for training curriculum instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Training curriculum must have a name (5-200 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path uco-core:name ] ;
    sh:targetClass cacontology-training:TrainingCurriculum .

cacontology-training:TrainingDeliveryPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Training Delivery Phase"@en ;
    rdfs:comment "Phase of active training delivery and instruction. Modeled as anti-rigid gUFO Phase."@en ;
    rdfs:subClassOf cacontology-training:InternationalTraining .

cacontology-training:TrainingDeliveryValidationShape a sh:NodeShape ;
    rdfs:label "Training Delivery Validation Shape"@en ;
    rdfs:comment "Validates that training programs have delivery mechanisms."@en ;
    sh:sparql [ sh:message "International training should have assigned trainers."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-training:InternationalTraining .
                FILTER NOT EXISTS {
                    $this cacontology-training:deliveredBy ?trainer .
                    ?trainer a cacontology-training:InternationalTrainer .
                }
            }
        """ ] ;
    sh:targetClass cacontology-training:InternationalTraining .

cacontology-training:TrainingEffectivenessShape a sh:NodeShape ;
    rdfs:label "Training Effectiveness Shape"@en ;
    rdfs:comment "Validation shape for training effectiveness instances."@en ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Training effectiveness must be between 0.0 and 1.0."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-training:trainingEffectiveness ] ;
    sh:targetClass cacontology-training:TrainingEffectiveness .

cacontology-training:TrainingEffectivenessValidationShape a sh:NodeShape ;
    rdfs:label "Training Effectiveness Validation Shape"@en ;
    rdfs:comment "Validates training effectiveness metrics."@en ;
    sh:sparql [ sh:message "Training programs should have reasonable completion rates."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-training:participationRate ?participation ;
                      cacontology-training:completionRate ?completion .
                FILTER (?completion > ?participation)
            }
        """ ] ;
    sh:targetClass cacontology-training:InternationalTraining .

cacontology-training:TrainingInstitution a owl:Class ;
    rdfs:label "Training Institution"@en ;
    rdfs:comment "Institution providing child protection training. Modeled as gUFO Organization."@en ;
    rdfs:subClassOf gufo:Organization,
        uco-identity:Organization .

cacontology-training:TrainingMetricsShape a sh:NodeShape ;
    rdfs:label "Training Metrics Shape"@en ;
    rdfs:comment "Validation shape for training metrics instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Training metrics name should be 5-200 characters when specified."@en ;
            sh:minCount 0 ;
            sh:minLength 5 ;
            sh:path uco-core:name ] ;
    sh:targetClass cacontology-training:TrainingMetrics .

cacontology-training:TrainingModuleShape a sh:NodeShape ;
    rdfs:label "Training Module Shape"@en ;
    rdfs:comment "Validation shape for training module instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Training module must have a name (5-200 characters)."@en ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path uco-core:name ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 1000 ;
            sh:message "Training module description should be 10-1000 characters when specified."@en ;
            sh:minCount 0 ;
            sh:minLength 10 ;
            sh:path uco-core:description ] ;
    sh:targetClass cacontology-training:TrainingModule .

cacontology-training:TrainingReachValidationShape a sh:NodeShape ;
    rdfs:label "Training Reach Validation Shape"@en ;
    rdfs:comment "Validates training reach consistency by delivery method."@en ;
    sh:sparql [ sh:message "Training reach should be consistent with delivery method capabilities."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-training:InPersonTraining ;
                      cacontology-training:trainingReachCount ?reach .
                FILTER (?reach > 1000)
            }
        """ ] ;
    sh:targetClass cacontology-training:HybridTraining,
        cacontology-training:InPersonTraining,
        cacontology-training:OnlineTraining .

cacontology-training:VictimServiceTrainingShape a sh:NodeShape ;
    rdfs:label "Victim Service Training Shape"@en ;
    rdfs:comment "Validation shape for victim service training instances."@en ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 200.0 ;
            sh:message "Victim service training duration should be between 4 and 200 hours."@en ;
            sh:minCount 0 ;
            sh:minInclusive 4.0 ;
            sh:path cacontology-training:trainingDuration ] ;
    sh:targetClass cacontology-training:VictimServiceTraining .

cacontology-training:assessedBy a owl:ObjectProperty ;
    rdfs:label "assessed by"@en ;
    rdfs:comment "Assessment conducted for training participant."@en ;
    rdfs:domain cacontology-training:TrainingParticipant ;
    rdfs:range cacontology-training:CompetencyAssessment .

cacontology-training:buildsCapacityFor a owl:ObjectProperty ;
    rdfs:label "builds capacity for"@en ;
    rdfs:comment "Organization for which capacity is being built."@en ;
    rdfs:domain cacontology-training:CapacityBuildingProgram ;
    rdfs:range uco-identity:Organization .

cacontology-training:certifiedBy a owl:ObjectProperty ;
    rdfs:label "certified by"@en ;
    rdfs:comment "Organization providing the certification."@en ;
    rdfs:domain cacontology-training:ProfessionalCertification ;
    rdfs:range cacontology-training:CertificationBody .

cacontology-training:deliveredBy a owl:ObjectProperty ;
    rdfs:label "delivered by"@en ;
    rdfs:comment "Trainer delivering the training program."@en ;
    rdfs:domain cacontology-training:InternationalTraining ;
    rdfs:range cacontology-training:InternationalTrainer .

cacontology-training:hasPhaseBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has phase begin point"@en ;
    rdfs:comment "Temporal begin point for training phase."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-training:hasPhaseEndPoint a owl:DatatypeProperty ;
    rdfs:label "has phase end point"@en ;
    rdfs:comment "Temporal end point for training phase."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-training:hasRoleBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has role begin point"@en ;
    rdfs:comment "Temporal begin point for training role."@en ;
    rdfs:domain gufo:Role ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-training:hasRoleEndPoint a owl:DatatypeProperty ;
    rdfs:label "has role end point"@en ;
    rdfs:comment "Temporal end point for training role."@en ;
    rdfs:domain gufo:Role ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-training:hasTrainingBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has training begin point"@en ;
    rdfs:comment "Temporal begin point for training program."@en ;
    rdfs:domain cacontology-training:InternationalTraining ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-training:hasTrainingEndPoint a owl:DatatypeProperty ;
    rdfs:label "has training end point"@en ;
    rdfs:comment "Temporal end point for training program."@en ;
    rdfs:domain cacontology-training:InternationalTraining ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-training:improvesProficiency a owl:ObjectProperty ;
    rdfs:label "improves proficiency"@en ;
    rdfs:comment "Area of proficiency improved by training."@en ;
    rdfs:domain cacontology-training:InternationalTraining ;
    rdfs:range uco-core:UcoObject .

cacontology-training:includedInCurriculum a owl:ObjectProperty ;
    rdfs:label "included in curriculum"@en ;
    rdfs:comment "Training module included in curriculum."@en ;
    rdfs:domain cacontology-training:TrainingModule ;
    rdfs:range cacontology-training:TrainingCurriculum .

cacontology-training:mentors a owl:ObjectProperty ;
    rdfs:label "mentors"@en ;
    rdfs:comment "Participant being mentored by trainer."@en ;
    rdfs:domain cacontology-training:InternationalTrainer ;
    rdfs:range cacontology-training:TrainingParticipant .

cacontology-training:participatedIn a owl:ObjectProperty ;
    rdfs:label "participated in"@en ;
    rdfs:comment "Training program participated in by a person."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range cacontology-training:InternationalTraining .

cacontology-training:phaseDuration a owl:DatatypeProperty ;
    rdfs:label "phase duration"@en ;
    rdfs:comment "Duration of training phase."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:duration .

cacontology-training:roleDuration a owl:DatatypeProperty ;
    rdfs:label "role duration"@en ;
    rdfs:comment "Duration of individual's training role."@en ;
    rdfs:domain gufo:Role ;
    rdfs:range xsd:duration .

cacontology-training:supportedBy a owl:ObjectProperty ;
    rdfs:label "supported by"@en ;
    rdfs:comment "Partner supporting the training program."@en ;
    rdfs:domain cacontology-training:InternationalTraining ;
    rdfs:range cacontology-training:CapacityBuildingPartner .

cacontology-training:validatesSkills a owl:ObjectProperty ;
    rdfs:label "validates skills"@en ;
    rdfs:comment "Participant whose skills are being validated."@en ;
    rdfs:domain cacontology-training:SkillsValidation ;
    rdfs:range cacontology-training:TrainingParticipant .

cacontology-undercover:AgeAcknowledgmentShape a sh:NodeShape ;
    rdfs:label "Age Acknowledgment Shape"@en ;
    rdfs:comment "Validation shape for suspect acknowledgments of minor's age."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 17 ;
            sh:message "Age stated to suspect must be between 1 and 17."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1 ;
            sh:path cacontology-undercover:ageStatedToSuspect ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 100 ;
            sh:message "Acknowledged count must be between 1 and 100."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1 ;
            sh:path cacontology-undercover:acknowledgedCount ] ;
    sh:targetClass cacontology-undercover:AgeAcknowledgment .

cacontology-undercover:ChatInvestigationAgent a owl:Class ;
    rdfs:label "Chat Investigation Agent"@en ;
    rdfs:comment "Agent specialized in chat-based undercover investigations for predator identification."@en ;
    rdfs:subClassOf cacontology-undercover:SocialMediaAgent .

cacontology-undercover:ChildPersona a owl:Class ;
    rdfs:label "Child Persona"@en ;
    rdfs:comment "Undercover identity portraying a minor child for investigative purposes."@en ;
    rdfs:subClassOf cacontology-undercover:UndercoverIdentity .

cacontology-undercover:ClientResponseInterception a owl:Class ;
    rdfs:label "Client Response Interception"@en ;
    rdfs:comment "Undercover response to trafficking advertisement posing as potential client to gather evidence."@en ;
    rdfs:subClassOf cacontology-undercover:WebsiteAdvertisementResponse .

cacontology-undercover:CollectionDateValidationShape a sh:NodeShape ;
    rdfs:label "Collection Date Validation Shape"@en ;
    rdfs:comment "Validates evidence collection date consistency."@en ;
    sh:sparql [ sh:message "Evidence collection date should not be in the future."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-undercover:collectionDate ?date .
                FILTER (?date > NOW())
            }
        """ ] ;
    sh:targetClass cacontology-undercover:UndercoverEvidence .

cacontology-undercover:CollectsEvidenceShape a sh:PropertyShape ;
    sh:class cacontology-undercover:UndercoverEvidence ;
    sh:description "Links operation to evidence collected" ;
    sh:minCount 0 ;
    sh:name "collects evidence" ;
    sh:path cacontology-undercover:collectsEvidence .

cacontology-undercover:ControlledMeeting a owl:Class ;
    rdfs:label "Controlled Meeting"@en ;
    rdfs:comment "Planned in-person meeting between undercover agents and suspects under controlled conditions."@en ;
    rdfs:subClassOf cacontology-undercover:UndercoverOperation .

cacontology-undercover:CovertRecordingShape a sh:NodeShape ;
    rdfs:label "Covert Recording Shape"@en ;
    rdfs:comment "Validation shape for covert recording instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "audio_only" "video_only" "audio_video" "screen_recording" "call_recording" "meeting_recording" ) ;
            sh:maxCount 1 ;
            sh:message "Covert recording must specify recording type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-undercover:recordingType ],
        [ sh:datatype xsd:string ;
            sh:in ( "poor" "fair" "good" "excellent" "professional" ) ;
            sh:maxCount 1 ;
            sh:message "Covert recording must specify recording quality from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-undercover:recordingQuality ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 480.0 ;
            sh:message "Recording duration must be between 0.1 and 480 minutes (8 hours)."@en ;
            sh:minCount 1 ;
            sh:minInclusive 0.1 ;
            sh:path cacontology-undercover:recordingDuration ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Covert recording must specify if consent is required."@en ;
            sh:minCount 1 ;
            sh:path cacontology-undercover:consentRequired ] ;
    sh:targetClass cacontology-undercover:CovertRecording .

cacontology-undercover:CriminalItemAgreementActionShape a sh:NodeShape ;
    rdfs:label "Criminal Item Agreement Action Shape"@en ;
    rdfs:comment "Validation shape for suspect agreements to bring items for abuse."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:message "May specify items suspect agreed to bring."@en ;
            sh:minCount 0 ;
            sh:path cacontology-undercover:itemsAgreedToBring ] ;
    sh:targetClass cacontology-undercover:CriminalItemAgreementAction .

cacontology-undercover:CriminalSolicitation a owl:Class ;
    rdfs:label "Criminal Solicitation"@en ;
    rdfs:comment "Request or instruction from suspect to undercover agent to commit illegal acts."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:Message .

cacontology-undercover:DataQualityShape a sh:NodeShape ;
    rdfs:label "Data Quality Shape"@en ;
    rdfs:comment "Validates data quality for undercover operations."@en ;
    sh:property [ sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Label should be between 5 and 200 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 5 ;
            sh:nodeKind sh:Literal ;
            sh:path rdfs:label ],
        [ sh:maxCount 1 ;
            sh:maxLength 1000 ;
            sh:message "Comment should be between 10 and 1000 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 10 ;
            sh:nodeKind sh:Literal ;
            sh:path rdfs:comment ] ;
    sh:targetClass cacontology-undercover:UndercoverOperation .

cacontology-undercover:DigitalIdentityShape a sh:NodeShape ;
    rdfs:label "Digital Identity Shape"@en ;
    rdfs:comment "Validation shape for digital identity instances."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 15 ;
            sh:message "Digital identity may have between 0 and 15 social media profiles."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0 ;
            sh:path cacontology-undercover:socialMediaProfiles ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 10 ;
            sh:message "Digital identity must have between 1 and 10 email accounts."@en ;
            sh:minCount 1 ;
            sh:minInclusive 1 ;
            sh:path cacontology-undercover:emailAccounts ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 1095.0 ;
            sh:message "Digital history depth must be between 30 and 1095 days."@en ;
            sh:minCount 0 ;
            sh:minInclusive 30.0 ;
            sh:path cacontology-undercover:digitalHistoryDepth ] ;
    sh:targetClass cacontology-undercover:DigitalIdentity .

cacontology-undercover:DisguiseRequestActionShape a sh:NodeShape ;
    rdfs:label "Disguise Request Action Shape"@en ;
    rdfs:comment "Validation shape for suspect requests for victim to wear disguise items."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:message "May specify the disguise item requested."@en ;
            sh:minCount 0 ;
            sh:path cacontology-undercover:disguiseItemRequested ],
        [ sh:datatype xsd:string ;
            sh:in ( "avoid_detection" "conceal_identity" "evade_witnesses" "other" ) ;
            sh:maxCount 1 ;
            sh:message "Disguise purpose must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-undercover:disguisePurpose ] ;
    sh:targetClass cacontology-undercover:DisguiseRequestAction .

cacontology-undercover:EvidenceChainValidationShape a sh:NodeShape ;
    rdfs:label "Evidence Chain Validation Shape"@en ;
    rdfs:comment "Validates evidence chain of custody requirements."@en ;
    sh:sparql [ sh:message "All undercover evidence must maintain chain of custody."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-undercover:UndercoverEvidence ;
                      cacontology-undercover:chainOfCustodyMaintained false .
            }
        """ ] ;
    sh:targetClass cacontology-undercover:UndercoverEvidence .

cacontology-undercover:EvidenceGatheringPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Evidence Gathering Phase"@en ;
    rdfs:comment "Phase focused on collecting criminal evidence through undercover interactions."@en ;
    rdfs:subClassOf cacontology-undercover:UndercoverOperation .

cacontology-undercover:ExplicitMessageRequestActionShape a sh:NodeShape ;
    rdfs:label "Explicit Message Request Action Shape"@en ;
    rdfs:comment "Validation shape for suspect requests for explicit content."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "images" "videos" "video_call" "live_stream" ) ;
            sh:maxCount 1 ;
            sh:message "Request type must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-undercover:requestType ] ;
    sh:targetClass cacontology-undercover:ExplicitMessageRequestAction .

cacontology-undercover:ExtractionPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Extraction Phase"@en ;
    rdfs:comment "Phase involving safe withdrawal from undercover operation."@en ;
    rdfs:subClassOf cacontology-undercover:UndercoverOperation .

cacontology-undercover:FollowsPlanShape a sh:PropertyShape ;
    sh:class cacontology-undercover:OperationPlan ;
    sh:description "Links operation to operation plan followed" ;
    sh:maxCount 1 ;
    sh:minCount 1 ;
    sh:name "follows plan" ;
    sh:path cacontology-undercover:followsPlan .

cacontology-undercover:HotelShape a sh:NodeShape ;
    rdfs:label "Hotel Shape"@en ;
    rdfs:comment "Validation shape for hotel meeting location instances."@en ;
    sh:property [ sh:datatype rdf:langString ;
            sh:maxCount 1 ;
            sh:message "Hotel should have a label."@en ;
            sh:minCount 0 ;
            sh:path rdfs:label ] ;
    sh:targetClass cacontology-undercover:Hotel .

cacontology-undercover:ImplementsMonitoringShape a sh:PropertyShape ;
    sh:class cacontology-undercover:OperationMonitoring ;
    sh:description "Links operation to monitoring protocols" ;
    sh:minCount 1 ;
    sh:name "implements monitoring" ;
    sh:path cacontology-undercover:implementsMonitoring .

cacontology-undercover:ImplementsSafetyShape a sh:PropertyShape ;
    sh:class cacontology-undercover:SafetyProtocol ;
    sh:description "Links operation to safety protocols" ;
    sh:minCount 1 ;
    sh:name "implements safety" ;
    sh:path cacontology-undercover:implementsSafety .

cacontology-undercover:IncriminatingStatement a owl:Class ;
    rdfs:label "Incriminating Statement"@en ;
    rdfs:comment "Statement made by suspect that provides evidence of criminal intent or past crimes."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:Message .

cacontology-undercover:InfiltrationPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Infiltration Phase"@en ;
    rdfs:comment "Phase involving initial contact and establishment of undercover presence."@en ;
    rdfs:subClassOf cacontology-undercover:UndercoverOperation .

cacontology-undercover:MeetingLocationArrangementShape a sh:NodeShape ;
    rdfs:label "Meeting Location Arrangement Shape"@en ;
    rdfs:comment "Validation shape for suspect arrangements of meeting locations."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "motel" "hotel" "residence" "vehicle" "outdoor" "short_term_rental" "other" ) ;
            sh:maxCount 1 ;
            sh:message "Meeting location type must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-undercover:meetingLocationType ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:message "May specify the name of the meeting location."@en ;
            sh:minCount 0 ;
            sh:path cacontology-undercover:meetingLocationName ],
        [ sh:class cacontology-undercover:MeetingLocation ;
            sh:maxCount 1 ;
            sh:message "May link to the specific meeting location."@en ;
            sh:minCount 0 ;
            sh:path cacontology-undercover:arrangedForMeeting ] ;
    sh:targetClass cacontology-undercover:MeetingLocationArrangement .

cacontology-undercover:MeetingLocationShape a sh:NodeShape ;
    rdfs:label "Meeting Location Shape"@en ;
    rdfs:comment "Validation shape for meeting location instances used in undercover operations."@en ;
    sh:property [ sh:datatype rdf:langString ;
            sh:maxCount 1 ;
            sh:message "Meeting location should have a label."@en ;
            sh:minCount 0 ;
            sh:path rdfs:label ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Location name should be between 1 and 200 characters."@en ;
            sh:minCount 0 ;
            sh:minLength 1 ;
            sh:path cacontology-undercover:locationName ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:message "Meeting location may specify a room number."@en ;
            sh:minCount 0 ;
            sh:path cacontology-undercover:roomNumber ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Meeting location may specify an arranged meeting time."@en ;
            sh:minCount 0 ;
            sh:path cacontology-undercover:arrangedTime ] ;
    sh:targetClass cacontology-undercover:MeetingLocation .

cacontology-undercover:MotelShape a sh:NodeShape ;
    rdfs:label "Motel Shape"@en ;
    rdfs:comment "Validation shape for motel meeting location instances."@en ;
    sh:property [ sh:datatype rdf:langString ;
            sh:maxCount 1 ;
            sh:message "Motel should have a label."@en ;
            sh:minCount 0 ;
            sh:path rdfs:label ] ;
    sh:targetClass cacontology-undercover:Motel .

cacontology-undercover:MultiplePersonaOperationShape a sh:NodeShape ;
    rdfs:label "Multiple Persona Operation Shape"@en ;
    rdfs:comment "Validation shape for undercover operations using multiple minor personas."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 10 ;
            sh:message "Multiple persona operation must use between 2 and 10 personas."@en ;
            sh:minCount 0 ;
            sh:minInclusive 2 ;
            sh:path cacontology-undercover:personaCount ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 17 ;
            sh:message "Primary persona age must be between 10 and 17 years old."@en ;
            sh:minCount 0 ;
            sh:minInclusive 10 ;
            sh:path cacontology-undercover:primaryPersonaAge ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 17 ;
            sh:message "Secondary persona age must be between 8 and 17 years old."@en ;
            sh:minCount 0 ;
            sh:minInclusive 8 ;
            sh:path cacontology-undercover:secondaryPersonaAge ] ;
    sh:targetClass cacontology-undercover:MultiplePersonaOperation .

cacontology-undercover:OnlinePlatformSurveillance a owl:Class ;
    rdfs:label "Online Platform Surveillance"@en ;
    rdfs:comment "Covert monitoring of online platforms for criminal activity without direct participation."@en ;
    rdfs:subClassOf cacontology-undercover:UndercoverOperation .

cacontology-undercover:OnlineUndercoverOperationShape a sh:NodeShape ;
    rdfs:label "Online Undercover Operation Shape"@en ;
    rdfs:comment "Validation shape for online undercover operation instances."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 20 ;
            sh:message "Online undercover operation must use between 1 and 20 platforms."@en ;
            sh:minCount 1 ;
            sh:minInclusive 1 ;
            sh:path cacontology-undercover:platformsUsed ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Online undercover operation must specify digital footprint management."@en ;
            sh:minCount 1 ;
            sh:path cacontology-undercover:digitalFootprintManagement ] ;
    sh:targetClass cacontology-undercover:OnlineUndercoverOperation .

cacontology-undercover:OperationCrossReferenceShape a sh:NodeShape ;
    rdfs:label "Operation Cross Reference Shape"@en ;
    rdfs:comment "Validates cross-references between operation and related entities."@en ;
    sh:sparql [ sh:message "Undercover operation must use at least one identity and follow a plan."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-undercover:UndercoverOperation .
                FILTER NOT EXISTS {
                    $this cacontology-undercover:usesIdentity ?identity ;
                          cacontology-undercover:followsPlan ?plan .
                }
            }
        """ ] ;
    sh:targetClass cacontology-undercover:UndercoverOperation .

cacontology-undercover:OperationMonitoringShape a sh:NodeShape ;
    rdfs:label "Operation Monitoring Shape"@en ;
    rdfs:comment "Validation shape for operation monitoring instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "real_time" "periodic" "event_driven" "continuous" "scheduled" "emergency" ) ;
            sh:maxCount 1 ;
            sh:message "Operation monitoring must specify monitoring type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-undercover:monitoringType ],
        [ sh:datatype xsd:string ;
            sh:in ( "constant" "hourly" "daily" "weekly" "as_needed" "critical_events" ) ;
            sh:maxCount 1 ;
            sh:message "Operation monitoring must specify monitoring frequency from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-undercover:monitoringFrequency ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Operation monitoring must specify if supervisor is involved."@en ;
            sh:minCount 1 ;
            sh:path cacontology-undercover:supervisorInvolved ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Operation monitoring must specify if escalation protocol exists."@en ;
            sh:minCount 1 ;
            sh:path cacontology-undercover:escalationProtocol ] ;
    sh:targetClass cacontology-undercover:OperationMonitoring .

cacontology-undercover:OperationPlanShape a sh:NodeShape ;
    rdfs:label "Operation Plan Shape"@en ;
    rdfs:comment "Validation shape for operation plan instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "initial" "detailed" "tactical" "operational" "contingency" "final" ) ;
            sh:maxCount 1 ;
            sh:message "Operation plan must specify planning phase from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-undercover:planningPhase ],
        [ sh:datatype xsd:string ;
            sh:in ( "supervisor" "unit_commander" "division_chief" "agency_head" "multi_agency" "federal" ) ;
            sh:maxCount 1 ;
            sh:message "Operation plan must specify approval level from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-undercover:approvalLevel ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Operation plan must specify if risk assessment is completed."@en ;
            sh:minCount 1 ;
            sh:path cacontology-undercover:riskAssessmentCompleted ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Operation plan must specify if legal review is completed."@en ;
            sh:minCount 1 ;
            sh:path cacontology-undercover:legalReviewCompleted ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 20 ;
            sh:message "Plan revision must be between 0 and 20."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0 ;
            sh:path cacontology-undercover:planRevision ] ;
    sh:targetClass cacontology-undercover:OperationPlan .

cacontology-undercover:OperationTerminationShape a sh:NodeShape ;
    rdfs:label "Operation Termination Shape"@en ;
    rdfs:comment "Validation shape for operation termination instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "objective_achieved" "evidence_sufficient" "operation_compromised" "safety_concern" "legal_issue" "resource_constraint" "time_limit" ) ;
            sh:maxCount 1 ;
            sh:message "Operation termination must specify termination reason from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-undercover:terminationReason ],
        [ sh:datatype xsd:string ;
            sh:in ( "planned" "emergency" "gradual" "immediate" "phased" "suspended" ) ;
            sh:maxCount 1 ;
            sh:message "Operation termination must specify termination type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-undercover:terminationType ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Operation termination must specify if evidence is secured."@en ;
            sh:minCount 1 ;
            sh:path cacontology-undercover:evidenceSecured ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Operation termination must specify if identity is retired."@en ;
            sh:minCount 1 ;
            sh:path cacontology-undercover:identityRetirement ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Operation termination must specify termination date."@en ;
            sh:minCount 1 ;
            sh:path cacontology-undercover:terminationDate ] ;
    sh:targetClass cacontology-undercover:OperationTermination .

cacontology-undercover:ParentPersona a owl:Class ;
    rdfs:label "Parent Persona"@en ;
    rdfs:comment "Undercover identity portraying a parent or guardian of a child victim."@en ;
    rdfs:subClassOf cacontology-undercover:UndercoverIdentity .

cacontology-undercover:PlanApprovalValidationShape a sh:NodeShape ;
    rdfs:label "Plan Approval Validation Shape"@en ;
    rdfs:comment "Validates operation plan approval requirements."@en ;
    sh:sparql [ sh:message "High-risk operations require higher approval levels."@en ;
            sh:select """
            SELECT $this
            WHERE {
                ?operation cacontology-undercover:followsPlan $this ;
                          cacontology-undercover:riskLevel ?risk .
                $this cacontology-undercover:approvalLevel ?approval .
                FILTER (?risk IN ("high", "extreme", "critical") && ?approval IN ("supervisor", "unit_commander"))
            }
        """ ] ;
    sh:targetClass cacontology-undercover:OperationPlan .

cacontology-undercover:PreparationPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Preparation Phase"@en ;
    rdfs:comment "Phase involving setup of undercover identities and operational planning."@en ;
    rdfs:subClassOf cacontology-undercover:UndercoverOperation .

cacontology-undercover:ResultsInTerminationShape a sh:PropertyShape ;
    sh:class cacontology-undercover:OperationTermination ;
    sh:description "Links operation to termination details" ;
    sh:maxCount 1 ;
    sh:minCount 0 ;
    sh:name "results in termination" ;
    sh:path cacontology-undercover:resultsInTermination .

cacontology-undercover:RiskAssessmentShape a sh:NodeShape ;
    rdfs:label "Risk Assessment Shape"@en ;
    rdfs:comment "Validation shape for risk assessment instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "officer_safety" "operation_security" "legal_liability" "public_safety" "evidence_integrity" "agency_reputation" ) ;
            sh:maxCount 1 ;
            sh:message "Risk assessment must specify risk category from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-undercover:riskCategory ],
        [ sh:datatype xsd:string ;
            sh:in ( "very_low" "low" "moderate" "high" "very_high" "certain" ) ;
            sh:maxCount 1 ;
            sh:message "Risk assessment must specify risk probability from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-undercover:riskProbability ],
        [ sh:datatype xsd:string ;
            sh:in ( "negligible" "minor" "moderate" "major" "severe" "catastrophic" ) ;
            sh:maxCount 1 ;
            sh:message "Risk assessment must specify risk impact from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-undercover:riskImpact ],
        [ sh:datatype xsd:string ;
            sh:in ( "avoidance" "mitigation" "transfer" "acceptance" "monitoring" "contingency" ) ;
            sh:maxCount 1 ;
            sh:message "Risk assessment must specify mitigation strategy from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-undercover:mitigationStrategy ] ;
    sh:targetClass cacontology-undercover:RiskAssessment .

cacontology-undercover:SafetyProtocolShape a sh:NodeShape ;
    rdfs:label "Safety Protocol Shape"@en ;
    rdfs:comment "Validation shape for safety protocol instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "emergency_extraction" "panic_signal" "check_in_schedule" "backup_team" "medical_standby" "communication_protocol" ) ;
            sh:maxCount 1 ;
            sh:message "Safety protocol must specify protocol type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-undercover:protocolType ],
        [ sh:datatype xsd:string ;
            sh:in ( "officer_request" "missed_check_in" "threat_detected" "operation_compromise" "medical_emergency" "automatic_trigger" ) ;
            sh:maxCount 1 ;
            sh:message "Safety protocol must specify activation trigger from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-undercover:activationTrigger ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 60.0 ;
            sh:message "Safety protocol response time must be between 1 and 60 minutes."@en ;
            sh:minCount 1 ;
            sh:minInclusive 1.0 ;
            sh:path cacontology-undercover:responseTime ] ;
    sh:targetClass cacontology-undercover:SafetyProtocol .

cacontology-undercover:SexualIntentStatementShape a sh:NodeShape ;
    rdfs:label "Sexual Intent Statement Shape"@en ;
    rdfs:comment "Validation shape for explicit sexual intent statements by suspects."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:message "May specify types of sexual acts intended."@en ;
            sh:minCount 0 ;
            sh:path cacontology-undercover:sexualActsIntended ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "May specify if suspect targeted both personas in sibling operation."@en ;
            sh:minCount 0 ;
            sh:path cacontology-undercover:targetedBothPersonas ] ;
    sh:targetClass cacontology-undercover:SexualIntentStatement .

cacontology-undercover:ShortTermRentalShape a sh:NodeShape ;
    rdfs:label "Short Term Rental Shape"@en ;
    rdfs:comment "Validation shape for short-term rental meeting location instances."@en ;
    sh:property [ sh:datatype rdf:langString ;
            sh:maxCount 1 ;
            sh:message "Short-term rental should have a label."@en ;
            sh:minCount 0 ;
            sh:path rdfs:label ] ;
    sh:targetClass cacontology-undercover:ShortTermRental .

cacontology-undercover:SiblingPersonaOperationShape a sh:NodeShape ;
    rdfs:label "Sibling Persona Operation Shape"@en ;
    rdfs:comment "Validation shape for undercover operations using related sibling personas."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "sisters" "brothers" "brother_sister" "sister_brother" ) ;
            sh:maxCount 1 ;
            sh:message "Sibling relationship must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-undercover:siblingRelationship ] ;
    sh:targetClass cacontology-undercover:SiblingPersonaOperation .

cacontology-undercover:StingOperation a owl:Class ;
    rdfs:label "Sting Operation"@en ;
    rdfs:comment "Coordinated undercover operation designed to catch suspects in the act of committing crimes."@en ;
    rdfs:subClassOf cacontology-undercover:UndercoverOperation .

cacontology-undercover:SuspectCommunicationActionShape a sh:NodeShape ;
    rdfs:label "Suspect Communication Action Shape"@en ;
    rdfs:comment "Validation shape for criminal communication actions by suspects."@en ;
    sh:property [ sh:datatype rdf:langString ;
            sh:maxCount 1 ;
            sh:message "Suspect communication action should have a label."@en ;
            sh:minCount 0 ;
            sh:path rdfs:label ],
        [ sh:class cacontology-undercover:UndercoverOperation ;
            sh:maxCount 1 ;
            sh:message "Suspect communication action should link to an undercover operation."@en ;
            sh:minCount 0 ;
            sh:path cacontology-undercover:occurredDuringOperation ] ;
    sh:targetClass cacontology-undercover:SuspectCommunicationAction .

cacontology-undercover:TechnicalSupport a gufo:Role,
        owl:Class ;
    rdfs:label "Technical Support"@en ;
    rdfs:comment "Personnel providing technical infrastructure and monitoring for undercover operations."@en ;
    rdfs:subClassOf uco-role:Role .

cacontology-undercover:TemporalValidationShape a sh:NodeShape ;
    rdfs:label "Temporal Validation Shape"@en ;
    rdfs:comment "Validates temporal consistency in undercover operations."@en ;
    sh:sparql [ sh:message "Start time must be before end time when both are specified."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this uco-core:startTime ?start ;
                      uco-core:endTime ?end .
                FILTER (?start >= ?end)
            }
        """ ] ;
    sh:targetClass cacontology-undercover:UndercoverOperation .

cacontology-undercover:TransportArrangementActionShape a sh:NodeShape ;
    rdfs:label "Transport Arrangement Action Shape"@en ;
    rdfs:comment "Validation shape for suspect arrangements to transport alleged minor."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:message "May specify the pickup location."@en ;
            sh:minCount 0 ;
            sh:path cacontology-undercover:pickupLocation ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:message "May specify the destination location."@en ;
            sh:minCount 0 ;
            sh:path cacontology-undercover:destinationLocation ] ;
    sh:targetClass cacontology-undercover:TransportArrangementAction .

cacontology-undercover:UndercoverEvidenceShape a sh:NodeShape ;
    rdfs:label "Undercover Evidence Shape"@en ;
    rdfs:comment "Validation shape for undercover evidence instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "digital_communication" "audio_recording" "video_recording" "photographic" "documentary" "physical_evidence" "testimonial" ) ;
            sh:maxCount 1 ;
            sh:message "Undercover evidence must specify evidence type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-undercover:evidenceType ],
        [ sh:datatype xsd:string ;
            sh:in ( "covert_recording" "screen_capture" "digital_preservation" "physical_seizure" "witness_statement" "surveillance" ) ;
            sh:maxCount 1 ;
            sh:message "Undercover evidence must specify collection method from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-undercover:collectionMethod ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Undercover evidence must specify if chain of custody is maintained."@en ;
            sh:minCount 1 ;
            sh:path cacontology-undercover:chainOfCustodyMaintained ],
        [ sh:datatype xsd:string ;
            sh:in ( "verified" "authenticated" "questionable" "compromised" "inadmissible" ) ;
            sh:maxCount 1 ;
            sh:message "Undercover evidence must specify evidence authenticity from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-undercover:evidenceAuthenticity ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Undercover evidence must specify collection date."@en ;
            sh:minCount 1 ;
            sh:path cacontology-undercover:collectionDate ] ;
    sh:targetClass cacontology-undercover:UndercoverEvidence .

cacontology-undercover:UndercoverIdentityShape a sh:NodeShape ;
    rdfs:label "Undercover Identity Shape"@en ;
    rdfs:comment "Validation shape for undercover identity instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "complete_fabrication" "partial_legend" "borrowed_identity" "enhanced_real_identity" "digital_only" "physical_and_digital" ) ;
            sh:maxCount 1 ;
            sh:message "Undercover identity must specify identity type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-undercover:identityType ],
        [ sh:datatype xsd:string ;
            sh:in ( "basic" "intermediate" "advanced" "comprehensive" "deep_cover" ) ;
            sh:maxCount 1 ;
            sh:message "Undercover identity must specify identity complexity from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-undercover:identityComplexity ],
        [ sh:datatype xsd:string ;
            sh:in ( "minimal" "basic" "detailed" "comprehensive" "extensive" ) ;
            sh:maxCount 1 ;
            sh:message "Undercover identity must specify backstory depth from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-undercover:backstoryDepth ],
        [ sh:datatype xsd:string ;
            sh:in ( "none" "basic" "standard" "enhanced" "complete" "official" ) ;
            sh:maxCount 1 ;
            sh:message "Undercover identity must specify documentation level from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-undercover:documentationLevel ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 1095.0 ;
            sh:message "Identity lifespan must be between 1 and 1095 days (3 years)."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1.0 ;
            sh:path cacontology-undercover:identityLifespan ] ;
    sh:targetClass cacontology-undercover:UndercoverIdentity .

cacontology-undercover:UndercoverOperationShape a sh:NodeShape ;
    rdfs:label "Undercover Operation Shape"@en ;
    rdfs:comment "Validation shape for undercover operation instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "online_investigation" "physical_surveillance" "sting_operation" "long_term_infiltration" "reactive_investigation" "proactive_investigation" "joint_operation" ) ;
            sh:maxCount 1 ;
            sh:message "Undercover operation must specify operation type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-undercover:operationType ],
        [ sh:datatype xsd:string ;
            sh:in ( "low" "moderate" "high" "extreme" "critical" "unacceptable" ) ;
            sh:maxCount 1 ;
            sh:message "Undercover operation must specify risk level from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-undercover:riskLevel ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 365.0 ;
            sh:message "Operation duration must be between 1 and 365 days."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1.0 ;
            sh:path cacontology-undercover:operationDuration ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Undercover operation may have a start time."@en ;
            sh:minCount 0 ;
            sh:path uco-core:startTime ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Undercover operation may have an end time."@en ;
            sh:minCount 0 ;
            sh:path uco-core:endTime ],
        [ sh:datatype xsd:string ;
            sh:in ( "planning" "active" "suspended" "completed" "terminated" "compromised" "under_review" ) ;
            sh:maxCount 1 ;
            sh:message "Undercover operation must specify operation status from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-undercover:operationStatus ] ;
    sh:targetClass cacontology-undercover:UndercoverOperation .

cacontology-undercover:UsesIdentityShape a sh:PropertyShape ;
    sh:class cacontology-undercover:UndercoverIdentity ;
    sh:description "Links operation to undercover identity used" ;
    sh:minCount 1 ;
    sh:name "uses identity" ;
    sh:path cacontology-undercover:usesIdentity .

cacontology-undercover:VideoCallRequestActionShape a sh:NodeShape ;
    rdfs:label "Video Call Request Action Shape"@en ;
    rdfs:comment "Validation shape for suspect requests for video calls."@en ;
    sh:property [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "May specify if request was conditional on parent being absent."@en ;
            sh:minCount 0 ;
            sh:path cacontology-undercover:whenParentAbsent ] ;
    sh:targetClass cacontology-undercover:VideoCallRequestAction .

cacontology-undercover:advertisementLiveTime a owl:DatatypeProperty ;
    rdfs:label "advertisement live time"@en ;
    rdfs:comment "Duration the trafficking advertisement was active before response in hours."@en ;
    rdfs:domain cacontology-undercover:LiveAdvertisementMonitoring ;
    rdfs:range xsd:decimal .

cacontology-undercover:advertisementURL a owl:DatatypeProperty ;
    rdfs:label "advertisement URL"@en ;
    rdfs:comment "Web address of trafficking advertisement being responded to."@en ;
    rdfs:domain cacontology-undercover:WebsiteAdvertisementResponse ;
    rdfs:range xsd:anyURI .

cacontology-undercover:agentOperatesAs a owl:ObjectProperty ;
    rdfs:label "agent operates as"@en ;
    rdfs:comment "Links agent to persona or identity used in operation."@en ;
    rdfs:domain cacontology-undercover:SocialMediaAgent ;
    rdfs:range cacontology-undercover:UndercoverIdentity .

cacontology-undercover:apartmentType a owl:DatatypeProperty ;
    rdfs:label "apartment type"@en ;
    rdfs:comment "Type of residential property used for sting (studio, one_bedroom, two_bedroom, etc.)."@en ;
    rdfs:domain cacontology-undercover:ApartmentStingOperation ;
    rdfs:range xsd:string .

cacontology-undercover:backstoryDetails a owl:DatatypeProperty ;
    rdfs:label "backstory details"@en ;
    rdfs:comment "Biographical details created for the undercover identity."@en ;
    rdfs:domain cacontology-undercover:UndercoverIdentity ;
    rdfs:range xsd:string .

cacontology-undercover:backupTeamAssigned a owl:DatatypeProperty ;
    rdfs:label "backup team assigned"@en ;
    rdfs:comment "Whether a backup/surveillance team was assigned to the operation."@en ;
    rdfs:domain cacontology-undercover:UndercoverOperation ;
    rdfs:range xsd:boolean .

cacontology-undercover:chatDurationHours a owl:DatatypeProperty ;
    rdfs:label "chat duration hours"@en ;
    rdfs:comment "Total duration of chat investigation in hours."@en ;
    rdfs:domain cacontology-undercover:UndercoverChatInvestigation ;
    rdfs:range xsd:decimal .

cacontology-undercover:chatPlatformType a owl:DatatypeProperty ;
    rdfs:label "chat platform type"@en ;
    rdfs:comment "Type of chat platform used (social_media, messaging_app, gaming_platform, forum)."@en ;
    rdfs:domain cacontology-undercover:UndercoverChatInvestigation ;
    rdfs:range xsd:string .

cacontology-undercover:chatRoomTopic a owl:DatatypeProperty ;
    rdfs:label "chat room topic"@en ;
    rdfs:comment "Stated topic or theme of the chat room being infiltrated."@en ;
    rdfs:domain cacontology-undercover:ChatRoomInfiltration ;
    rdfs:range xsd:string .

cacontology-undercover:clientContactMethod a owl:DatatypeProperty ;
    rdfs:label "client contact method"@en ;
    rdfs:comment "Method victims are instructed to use for client communication (phone, text, app)."@en ;
    rdfs:domain cacontology-undercover:ClientCommunicationInterception ;
    rdfs:range xsd:string .

cacontology-undercover:communicationMethod a owl:DatatypeProperty ;
    rdfs:label "communication method"@en ;
    rdfs:comment "Primary method of communication (text_chat, voice_chat, video_chat, direct_message)."@en ;
    rdfs:domain cacontology-undercover:UndercoverChatInvestigation ;
    rdfs:range xsd:string .

cacontology-undercover:communicationPlatform a owl:ObjectProperty ;
    rdfs:label "communication platform"@en ;
    rdfs:comment "Digital platform where undercover communication took place."@en ;
    rdfs:domain cacontology-undercover:UndercoverCommunication ;
    rdfs:range uco-observable:DigitalService .

cacontology-undercover:conductedOnPlatform a owl:ObjectProperty ;
    rdfs:label "conducted on platform"@en ;
    rdfs:comment "Links undercover operation to social media platform used."@en ;
    rdfs:domain cacontology-undercover:SocialMediaUndercoverOperation ;
    rdfs:range uco-observable:ObservableObject .

cacontology-undercover:containsCriminalContent a owl:DatatypeProperty ;
    rdfs:label "contains criminal content"@en ;
    rdfs:comment "Whether the communication contains content of criminal nature."@en ;
    rdfs:domain cacontology-undercover:UndercoverCommunication ;
    rdfs:range xsd:boolean .

cacontology-undercover:conversationCount a owl:DatatypeProperty ;
    rdfs:label "conversation count"@en ;
    rdfs:comment "Number of separate conversations conducted during chat investigation."@en ;
    rdfs:domain cacontology-undercover:UndercoverChatInvestigation ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-undercover:coversTimeframe a owl:ObjectProperty ;
    rdfs:label "covers timeframe"@en ;
    rdfs:comment "Time period during which the undercover operation was active."@en ;
    rdfs:domain cacontology-undercover:UndercoverOperation .

cacontology-undercover:documentsViolationAt a owl:ObjectProperty ;
    rdfs:label "documents violation at"@en ;
    rdfs:comment "Links violation evidence to specific location where violation occurred."@en ;
    rdfs:domain cacontology-undercover:BathroomViolationEvidence ;
    rdfs:range uco-location:Location .

cacontology-undercover:emergencySignal a owl:DatatypeProperty ;
    rdfs:label "emergency signal"@en ;
    rdfs:comment "Predetermined signal or code word for emergency situations."@en ;
    rdfs:domain cacontology-undercover:UndercoverOperation ;
    rdfs:range xsd:string .

cacontology-undercover:evidenceCollected a owl:ObjectProperty ;
    rdfs:label "evidence collected"@en ;
    rdfs:comment "Evidence gathered during the undercover operation."@en ;
    rdfs:domain cacontology-undercover:UndercoverOperation ;
    rdfs:range cacontology-undercover:OperationalEvidence .

cacontology-undercover:evidentiaryValue a owl:DatatypeProperty ;
    rdfs:label "evidentiary value"@en ;
    rdfs:comment "Assessment of the communication's value as evidence (high, medium, low)."@en ;
    rdfs:domain cacontology-undercover:UndercoverCommunication ;
    rdfs:range xsd:string .

cacontology-undercover:floorLevel a owl:DatatypeProperty ;
    rdfs:label "floor level"@en ;
    rdfs:comment "Floor level of apartment used in sting operation for tactical planning."@en ;
    rdfs:domain cacontology-undercover:ResidentialStingLocation ;
    rdfs:range xsd:integer .

cacontology-undercover:generatesEvidence a owl:ObjectProperty ;
    rdfs:label "generates evidence"@en ;
    rdfs:comment "Links undercover operation to evidence generated."@en ;
    rdfs:domain cacontology-undercover:SocialMediaUndercoverOperation ;
    rdfs:range cacontology-undercover:UndercoverEvidence .

cacontology-undercover:handledBy a owl:ObjectProperty ;
    rdfs:label "handled by"@en ;
    rdfs:comment "Links an undercover operation to its supervising handler."@en ;
    rdfs:domain cacontology-undercover:UndercoverOperation ;
    rdfs:range cacontology-undercover:OperationHandler .

cacontology-undercover:hasOperationPhaseBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has operation phase begin point"@en ;
    rdfs:comment "Temporal begin point for undercover operation phase."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-undercover:hasOperationPhaseEndPoint a owl:DatatypeProperty ;
    rdfs:label "has operation phase end point"@en ;
    rdfs:comment "Temporal end point for undercover operation phase."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-undercover:hasRoleBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has role begin point"@en ;
    rdfs:comment "Temporal begin point for undercover role."@en ;
    rdfs:domain gufo:Role ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-undercover:hasRoleEndPoint a owl:DatatypeProperty ;
    rdfs:label "has role end point"@en ;
    rdfs:comment "Temporal end point for undercover role."@en ;
    rdfs:domain gufo:Role ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-undercover:hasSecureExit a owl:DatatypeProperty ;
    rdfs:label "has secure exit"@en ;
    rdfs:comment "Whether the sting location has secure exit routes for officer safety."@en ;
    rdfs:domain cacontology-undercover:ResidentialStingLocation ;
    rdfs:range xsd:boolean .

cacontology-undercover:identificationSuccessRate a owl:DatatypeProperty ;
    rdfs:label "identification success rate"@en ;
    rdfs:comment "Success rate for identifying and prosecuting predators (0.0-1.0)."@en ;
    rdfs:domain cacontology-undercover:PredatorTargetingOperation ;
    rdfs:range xsd:decimal .

cacontology-undercover:identifiesPredator a owl:ObjectProperty ;
    rdfs:label "identifies predator"@en ;
    rdfs:comment "Links undercover operation to predator identified."@en ;
    rdfs:domain cacontology-undercover:PredatorTargetingOperation ;
    rdfs:range uco-identity:Person .

cacontology-undercover:identifiesVictimPhotos a owl:ObjectProperty ;
    rdfs:label "identifies victim photos"@en ;
    rdfs:comment "Links advertisement evidence to specific victim photographs identified."@en ;
    rdfs:domain cacontology-undercover:AdvertisementPhotographyEvidence ;
    rdfs:range uco-observable:Image .

cacontology-undercover:infiltrationDuration a owl:DatatypeProperty ;
    rdfs:label "infiltration duration"@en ;
    rdfs:comment "Length of time the agent spent in the chat room (in hours)."@en ;
    rdfs:domain cacontology-undercover:ChatRoomInfiltration ;
    rdfs:range xsd:decimal .

cacontology-undercover:instructionType a owl:DatatypeProperty ;
    rdfs:label "instruction type"@en ;
    rdfs:comment "Type of instruction provided to victim (client_communication, pricing, location, safety)."@en ;
    rdfs:domain cacontology-undercover:VictimInstructionEvidence ;
    rdfs:range xsd:string .

cacontology-undercover:interceptsInstruction a owl:ObjectProperty ;
    rdfs:label "intercepts instruction"@en ;
    rdfs:comment "Links monitoring operation to specific trafficking instructions intercepted."@en ;
    rdfs:domain cacontology-undercover:ClientCommunicationInterception ;
    rdfs:range cacontology-undercover:VictimInstructionEvidence .

cacontology-undercover:investigatesViolation a owl:ObjectProperty ;
    rdfs:label "investigates violation"@en ;
    rdfs:comment "Links investigation to specific privacy violation being investigated."@en ;
    rdfs:domain cacontology-undercover:PrivacyViolationInvestigation ;
    rdfs:range cacontology-undercover:BathroomViolationEvidence .

cacontology-undercover:involvesChatInvestigation a owl:ObjectProperty ;
    rdfs:label "involves chat investigation"@en ;
    rdfs:comment "Links social media operation to chat investigation component."@en ;
    rdfs:domain cacontology-undercover:SocialMediaUndercoverOperation ;
    rdfs:range cacontology-undercover:UndercoverChatInvestigation .

cacontology-undercover:judicialAuthorization a owl:ObjectProperty ;
    rdfs:label "judicial authorization"@en ;
    rdfs:comment "Court order or warrant authorizing the undercover operation."@en ;
    rdfs:domain cacontology-undercover:UndercoverOperation ;
    rdfs:range uco-observable:ObservableObject .

cacontology-undercover:leadToArrest a owl:ObjectProperty ;
    rdfs:label "lead to arrest"@en ;
    rdfs:comment "Links meeting arrangement to resulting arrest operation."@en ;
    rdfs:domain cacontology-undercover:MeetingLocationArrangement ;
    rdfs:range uco-action:Action .

cacontology-undercover:leadsToDevelopment a owl:ObjectProperty ;
    rdfs:label "leads to development"@en ;
    rdfs:comment "Additional investigative leads generated by the undercover operation."@en ;
    rdfs:domain cacontology-undercover:UndercoverOperation ;
    rdfs:range uco-action:Action .

cacontology-undercover:leadsToSolicitation a owl:ObjectProperty ;
    rdfs:label "leads to solicitation"@en ;
    rdfs:comment "Links chat investigation to in-person meeting solicitation identified."@en ;
    rdfs:domain cacontology-undercover:UndercoverChatInvestigation ;
    rdfs:range cacontology-undercover:InPersonMeetingSolicitation .

cacontology-undercover:maintainsSurveillance a owl:ObjectProperty ;
    rdfs:label "maintains surveillance"@en ;
    rdfs:comment "Links sting operation to surveillance positions maintained by backup officers."@en ;
    rdfs:domain cacontology-undercover:PhysicalLocationSting ;
    rdfs:range cacontology-undercover:SurveillancePosition .

cacontology-undercover:meetingSolicitationAttempts a owl:DatatypeProperty ;
    rdfs:label "meeting solicitation attempts"@en ;
    rdfs:comment "Number of in-person meeting solicitation attempts identified."@en ;
    rdfs:domain cacontology-undercover:InPersonMeetingSolicitation ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-undercover:monitorsPhoneCommunication a owl:ObjectProperty ;
    rdfs:label "monitors phone communication"@en ;
    rdfs:comment "Links investigation to phone communications being monitored."@en ;
    rdfs:domain cacontology-undercover:PhoneInstructionMonitoring ;
    rdfs:range uco-observable:PhoneCall .

cacontology-undercover:operatesAtLocation a owl:ObjectProperty ;
    rdfs:label "operates at location"@en ;
    rdfs:comment "Links physical sting operation to specific location where it occurs."@en ;
    rdfs:domain cacontology-undercover:PhysicalLocationSting ;
    rdfs:range cacontology-undercover:ResidentialStingLocation .

cacontology-undercover:operatesUnderIdentity a owl:ObjectProperty ;
    rdfs:label "operates under identity"@en ;
    rdfs:comment "Links an undercover agent to the false identity they are using."@en ;
    rdfs:domain cacontology-undercover:UndercoverAgent ;
    rdfs:range cacontology-undercover:UndercoverIdentity .

cacontology-undercover:operationClassification a owl:DatatypeProperty ;
    rdfs:label "operation classification"@en ;
    rdfs:comment "Security classification level of the undercover operation."@en ;
    rdfs:domain cacontology-undercover:UndercoverOperation ;
    rdfs:range xsd:string .

cacontology-undercover:operationOutcome a owl:DatatypeProperty ;
    rdfs:label "operation outcome"@en ;
    rdfs:comment "Result of the undercover operation (successful, compromised, terminated, ongoing)."@en ;
    rdfs:domain cacontology-undercover:UndercoverOperation ;
    rdfs:range xsd:string .

cacontology-undercover:operationPhaseDuration a owl:DatatypeProperty ;
    rdfs:label "operation phase duration"@en ;
    rdfs:comment "Duration of undercover operation phase."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:duration .

cacontology-undercover:participantCount a owl:DatatypeProperty ;
    rdfs:label "participant count"@en ;
    rdfs:comment "Number of active participants in the chat room."@en ;
    rdfs:domain cacontology-undercover:ChatRoomInfiltration ;
    rdfs:range xsd:integer .

cacontology-undercover:personaAge a owl:DatatypeProperty ;
    rdfs:label "persona age"@en ;
    rdfs:comment "Age of minor persona used by undercover agent."@en ;
    rdfs:domain cacontology-undercover:MinorPersonaAgent ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-undercover:personaGender a owl:DatatypeProperty ;
    rdfs:label "persona gender"@en ;
    rdfs:comment "Gender of minor persona used by undercover agent."@en ;
    rdfs:domain cacontology-undercover:MinorPersonaAgent ;
    rdfs:range xsd:string .

cacontology-undercover:personaLocation a owl:DatatypeProperty ;
    rdfs:label "persona location"@en ;
    rdfs:comment "Geographic location represented by minor persona."@en ;
    rdfs:domain cacontology-undercover:MinorPersonaAgent ;
    rdfs:range xsd:string .

cacontology-undercover:personaProfile a owl:DatatypeProperty ;
    rdfs:label "persona profile"@en ;
    rdfs:comment "Detailed profile information for minor persona (interests, background, characteristics)."@en ;
    rdfs:domain cacontology-undercover:MinorPersonaAgent ;
    rdfs:range xsd:string .

cacontology-undercover:phoneNumberMonitored a owl:DatatypeProperty ;
    rdfs:label "phone number monitored"@en ;
    rdfs:comment "Phone number under surveillance for trafficking instruction calls."@en ;
    rdfs:domain cacontology-undercover:PhoneInstructionMonitoring ;
    rdfs:range xsd:string .

cacontology-undercover:platformUsername a owl:DatatypeProperty ;
    rdfs:label "platform username"@en ;
    rdfs:comment "Username used for the undercover identity on digital platforms."@en ;
    rdfs:domain cacontology-undercover:PlatformAccount ;
    rdfs:range xsd:string .

cacontology-undercover:portraysAge a owl:DatatypeProperty ;
    rdfs:label "portrays age"@en ;
    rdfs:comment "The age that the undercover identity claims to be."@en ;
    rdfs:domain cacontology-undercover:UndercoverIdentity ;
    rdfs:range xsd:integer .

cacontology-undercover:predatorContactAttempts a owl:DatatypeProperty ;
    rdfs:label "predator contact attempts"@en ;
    rdfs:comment "Number of contact attempts by potential predators during operation."@en ;
    rdfs:domain cacontology-undercover:PredatorTargetingOperation ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-undercover:respondsToAdvertisement a owl:ObjectProperty ;
    rdfs:label "responds to advertisement"@en ;
    rdfs:comment "Links undercover operation to specific trafficking advertisement being responded to."@en ;
    rdfs:domain cacontology-undercover:WebsiteAdvertisementResponse ;
    rdfs:range uco-observable:WebPage .

cacontology-undercover:safetyProtocol a owl:DatatypeProperty ;
    rdfs:label "safety protocol"@en ;
    rdfs:comment "Safety measures implemented for the undercover operation."@en ;
    rdfs:domain cacontology-undercover:UndercoverOperation ;
    rdfs:range xsd:string .

cacontology-undercover:socialMediaPlatformsUsed a owl:DatatypeProperty ;
    rdfs:label "social media platforms used"@en ;
    rdfs:comment "Number of different social media platforms used in undercover operation."@en ;
    rdfs:domain cacontology-undercover:MultiPlatformUndercoverOperation ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-undercover:supervisoryApproval a owl:ObjectProperty ;
    rdfs:label "supervisory approval"@en ;
    rdfs:comment "Administrative approval from law enforcement supervisors."@en ;
    rdfs:domain cacontology-undercover:UndercoverOperation ;
    rdfs:range uco-identity:Person .

cacontology-undercover:surveillanceTeamCount a owl:DatatypeProperty ;
    rdfs:label "surveillance team count"@en ;
    rdfs:comment "Number of surveillance officers assigned to the sting operation."@en ;
    rdfs:domain cacontology-undercover:PhysicalLocationSting ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-undercover:targetBehaviorType a owl:DatatypeProperty ;
    rdfs:label "target behavior type"@en ;
    rdfs:comment "Type of behavior targeted (in_person_meeting_solicitation, sexual_conversation, grooming, image_requests)."@en ;
    rdfs:domain cacontology-undercover:PredatorTargetingOperation ;
    rdfs:range xsd:string .

cacontology-undercover:targetsIndividual a owl:ObjectProperty ;
    rdfs:label "targets individual"@en ;
    rdfs:comment "Links predator targeting operation to specific individuals targeted."@en ;
    rdfs:domain cacontology-undercover:PredatorTargetingOperation ;
    rdfs:range uco-identity:Person .

cacontology-undercover:targetsSubject a owl:ObjectProperty ;
    rdfs:label "targets subject"@en ;
    rdfs:comment "Links an undercover operation to the suspect being investigated."@en ;
    rdfs:domain cacontology-undercover:UndercoverOperation ;
    rdfs:range uco-identity:Person .

cacontology-undercover:triggeredBy a owl:ObjectProperty ;
    rdfs:label "triggered by"@en ;
    rdfs:comment "Links communication action to the message that triggered it."@en ;
    rdfs:domain cacontology-undercover:SuspectCommunicationAction ;
    rdfs:range cacontology-undercover:UndercoverCommunication .

cacontology-undercover:utilizesPersona a owl:ObjectProperty ;
    rdfs:label "utilizes persona"@en ;
    rdfs:comment "Links operation to minor persona used by agent."@en ;
    rdfs:domain cacontology-undercover:MinorPersonaOperation ;
    rdfs:range cacontology-undercover:MinorPersonaAgent .

cacontology-undercover:victimPhotoCount a owl:DatatypeProperty ;
    rdfs:label "victim photo count"@en ;
    rdfs:comment "Number of victim photographs identified in trafficking advertisement."@en ;
    rdfs:domain cacontology-undercover:AdvertisementPhotographyEvidence ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-undercover:violationLocation a owl:DatatypeProperty ;
    rdfs:label "violation location"@en ;
    rdfs:comment "Specific location where privacy violation occurred (bathroom, bedroom, changing_area)."@en ;
    rdfs:domain cacontology-undercover:BathroomViolationEvidence ;
    rdfs:range xsd:string .

cacontology-undercover:violationType a owl:DatatypeProperty ;
    rdfs:label "violation type"@en ;
    rdfs:comment "Type of privacy violation investigated (forced_undressing, inappropriate_touching, voyeurism)."@en ;
    rdfs:domain cacontology-undercover:PrivacyViolationInvestigation ;
    rdfs:range xsd:string .

cacontology-undercover:websitePlatform a owl:DatatypeProperty ;
    rdfs:label "website platform"@en ;
    rdfs:comment "Name of website platform hosting the trafficking advertisement."@en ;
    rdfs:domain cacontology-undercover:WebsiteAdvertisementResponse ;
    rdfs:range xsd:string .

cacontology-us-ncmec:AccountLinkingShape a sh:NodeShape ;
    rdfs:label "Account Linking Shape"@en ;
    rdfs:comment "Validation shape for account linking instances."@en ;
    sh:property [ rdfs:comment "Account confidence must be from the allowed list."@en ;
            sh:datatype xsd:string ;
            sh:in ( "verified" "probable" "possible" ) ;
            sh:maxCount 1 ;
            sh:minCount 0 ;
            sh:path cacontology-us-ncmec:accountConfidence ],
        [ rdfs:comment "Account linking must link to at least one digital account."@en ;
            sh:class uco-observable:DigitalAccount ;
            sh:minCount 1 ;
            sh:path cacontology-us-ncmec:linkedToAccount ] ;
    sh:targetClass cacontology-us-ncmec:AccountLinking .

cacontology-us-ncmec:AnalysisReportCrossReferenceShape a sh:NodeShape ;
    rdfs:label "Analysis Report Cross Reference Shape"@en ;
    rdfs:comment "Validates that tip analysis references valid reports."@en ;
    sh:sparql [ sh:message "Tip analysis should analyze valid NCMEC reports."@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/us/ncmec#"^^xsd:anyURI ;
                            sh:prefix "icacus" ] ] ;
            sh:select """
            SELECT $this WHERE {
                $this a cacontology-us-ncmec:CyberTipAnalysis .
                FILTER NOT EXISTS {
                    $this cacontology-us-ncmec:analysisOf ?report .
                    ?report a cacontology-us-ncmec:NCMECCybertipReport .
                }
            }
        """ ] ;
    sh:targetClass cacontology-us-ncmec:CyberTipAnalysis .

cacontology-us-ncmec:CSAMSolicitationAnnotationShape a sh:NodeShape ;
    rdfs:label "CSAM Solicitation Annotation Shape"@en ;
    rdfs:comment "Validation shape for CSAM solicitation annotation instances."@en ;
    sh:property [ rdfs:comment "CSAM solicitation annotation name should contain 'CSAM' or 'solicitation'."@en ;
            sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:minCount 0 ;
            sh:path uco-core:name ;
            sh:pattern ".*(CSAM|[Ss]olicitation).*" ] ;
    sh:targetClass cacontology-us-ncmec:CSAMSolicitationAnnotation .

cacontology-us-ncmec:ChildSexTourismIncidentShape a sh:NodeShape ;
    rdfs:label "Child Sex Tourism Incident Shape"@en ;
    rdfs:comment "Validation shape for child sex tourism incident instances."@en ;
    sh:property [ rdfs:comment "Child sex tourism incidents must have CST code."@en ;
            sh:hasValue "CST" ;
            sh:path cacontology-us-ncmec:incidentCode ] ;
    sh:targetClass cacontology-us-ncmec:ChildSexTourismIncident .

cacontology-us-ncmec:ChildSexTraffickingIncidentShape a sh:NodeShape ;
    rdfs:label "Child Sex Trafficking Incident Shape"@en ;
    rdfs:comment "Validation shape for child sex trafficking incident instances."@en ;
    sh:property [ rdfs:comment "Child sex trafficking incidents must have CST code."@en ;
            sh:hasValue "CST" ;
            sh:path cacontology-us-ncmec:incidentCode ] ;
    sh:targetClass cacontology-us-ncmec:ChildSexTraffickingIncident .

cacontology-us-ncmec:ConfidenceValidationShape a sh:NodeShape ;
    rdfs:label "Confidence Validation Shape"@en ;
    rdfs:comment "Validates confidence level consistency."@en ;
    sh:sparql [ sh:message "High confidence analysis should have supporting evidence."@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/us/ncmec#"^^xsd:anyURI ;
                            sh:prefix "icacus" ] ] ;
            sh:select """
            SELECT $this WHERE {
                $this cacontology-us-ncmec:analysisConfidence "high" .
                FILTER NOT EXISTS {
                    $this cacontology-us-ncmec:supportedBy ?cooperation .
                    ?cooperation a cacontology-us-ncmec:PlatformCooperation .
                }
            }
        """ ] ;
    sh:targetClass cacontology-us-ncmec:AccountLinking,
        cacontology-us-ncmec:CyberTipAnalysis .

cacontology-us-ncmec:ContentIdentificationShape a sh:NodeShape ;
    rdfs:label "Content Identification Shape"@en ;
    rdfs:comment "Validation shape for content identification instances."@en ;
    sh:property [ rdfs:comment "Content identification must identify at least one digital artifact."@en ;
            sh:class uco-observable:DigitalArtifact ;
            sh:minCount 1 ;
            sh:path cacontology-us-ncmec:identifiedContent ] ;
    sh:targetClass cacontology-us-ncmec:ContentIdentification .

cacontology-us-ncmec:CooperationLevelValidationShape a sh:NodeShape ;
    rdfs:label "Cooperation Level Validation Shape"@en ;
    rdfs:comment "Validates cooperation level consistency with data provided."@en ;
    sh:sparql [ sh:message "Full cooperation should provide comprehensive data."@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/us/ncmec#"^^xsd:anyURI ;
                            sh:prefix "icacus" ] ] ;
            sh:select """
            SELECT $this WHERE {
                $this cacontology-us-ncmec:cooperationLevel "full" .
                FILTER NOT EXISTS {
                    $this cacontology-us-ncmec:dataProvided ?data1 .
                    $this cacontology-us-ncmec:dataProvided ?data2 .
                    FILTER (?data1 != ?data2)
                }
            }
        """ ] ;
    sh:targetClass cacontology-us-ncmec:PlatformCooperation .

cacontology-us-ncmec:CyberTipAnalysisShape a sh:NodeShape ;
    rdfs:label "CyberTip Analysis Shape"@en ;
    rdfs:comment "Validation shape for CyberTip analysis instances."@en ;
    sh:property [ rdfs:comment "Analysis must specify start time."@en ;
            sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ],
        [ rdfs:comment "Analysis may specify end time."@en ;
            sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:minCount 0 ;
            sh:path uco-core:endTime ],
        [ rdfs:comment "Analysis confidence must be from the allowed list."@en ;
            sh:datatype xsd:string ;
            sh:in ( "high" "medium" "low" ) ;
            sh:maxCount 1 ;
            sh:minCount 0 ;
            sh:path cacontology-us-ncmec:analysisConfidence ],
        [ rdfs:comment "Analysis must be of exactly one NCMEC tip."@en ;
            sh:class cacontology-us-ncmec:NCMECCybertipReport ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:path cacontology-us-ncmec:analysisOf ],
        [ rdfs:comment "Analysis must specify performing analyst."@en ;
            sh:class uco-identity:Person ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:path uco-action:performer ] ;
    sh:targetClass cacontology-us-ncmec:CyberTipAnalysis .

cacontology-us-ncmec:DataQualityShape a sh:NodeShape ;
    rdfs:label "Data Quality Shape"@en ;
    rdfs:comment "Validates data quality for NCMEC entities."@en ;
    sh:property [ rdfs:comment "Creation time should be specified when available."@en ;
            sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:minCount 0 ;
            sh:path uco-core:createdTime ],
        [ rdfs:comment "Modification time should be specified when available."@en ;
            sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:minCount 0 ;
            sh:path uco-core:modifiedTime ] ;
    sh:targetClass cacontology-us-ncmec:CyberTipAnalysis,
        cacontology-us-ncmec:InvestigationTrigger,
        cacontology-us-ncmec:NCMECCybertipReport,
        cacontology-us-ncmec:PlatformCooperation,
        cacontology-us-ncmec:TipProcessing .

cacontology-us-ncmec:FederalReferralShape a sh:NodeShape ;
    rdfs:label "Federal Referral Shape"@en ;
    rdfs:comment "Validation shape for federal referral instances."@en ;
    sh:property [ rdfs:comment "Federal referrals must have federal jurisdiction."@en ;
            sh:hasValue "federal" ;
            sh:path cacontology-us-ncmec:referralJurisdiction ] ;
    sh:targetClass cacontology-us-ncmec:FederalReferral .

cacontology-us-ncmec:InvestigationTriggerShape a sh:NodeShape ;
    rdfs:label "Investigation Trigger Shape"@en ;
    rdfs:comment "Validation shape for investigation trigger instances."@en ;
    sh:property [ rdfs:comment "Investigation trigger must specify start time."@en ;
            sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ],
        [ rdfs:comment "Trigger criteria must be from the allowed list."@en ;
            sh:datatype xsd:string ;
            sh:in ( "content_volume" "suspect_profile" "victim_age" "repeat_offender" "imminent_danger" ) ;
            sh:maxCount 5 ;
            sh:minCount 0 ;
            sh:path cacontology-us-ncmec:triggerCriteria ],
        [ rdfs:comment "Urgency level must be from the allowed list."@en ;
            sh:datatype xsd:string ;
            sh:in ( "immediate" "urgent" "routine" ) ;
            sh:maxCount 1 ;
            sh:minCount 0 ;
            sh:path cacontology-us-ncmec:urgencyLevel ],
        [ rdfs:comment "Referral jurisdiction must be from the allowed list."@en ;
            sh:datatype xsd:string ;
            sh:in ( "federal" "state" "local" "international" ) ;
            sh:maxCount 1 ;
            sh:minCount 0 ;
            sh:path cacontology-us-ncmec:referralJurisdiction ],
        [ rdfs:comment "Investigation trigger must be triggered by exactly one NCMEC tip."@en ;
            sh:class cacontology-us-ncmec:NCMECCybertipReport ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:path cacontology-us-ncmec:triggeredBy ] ;
    sh:targetClass cacontology-us-ncmec:InvestigationTrigger .

cacontology-us-ncmec:LocalLawEnforcementReferralShape a sh:NodeShape ;
    rdfs:label "Local Law Enforcement Referral Shape"@en ;
    rdfs:comment "Validation shape for local law enforcement referral instances."@en ;
    sh:property [ rdfs:comment "Local law enforcement referrals must have local jurisdiction."@en ;
            sh:hasValue "local" ;
            sh:path cacontology-us-ncmec:referralJurisdiction ] ;
    sh:targetClass cacontology-us-ncmec:LocalLawEnforcementReferral .

cacontology-us-ncmec:MinorToMinorInteractionAnnotationShape a sh:NodeShape ;
    rdfs:label "Minor to Minor Interaction Annotation Shape"@en ;
    rdfs:comment "Validation shape for minor to minor interaction annotation instances."@en ;
    sh:property [ rdfs:comment "Minor to minor annotation name should contain 'minor'."@en ;
            sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:minCount 0 ;
            sh:path uco-core:name ;
            sh:pattern ".*[Mm]inor.*" ] ;
    sh:targetClass cacontology-us-ncmec:MinorToMinorInteractionAnnotation .

cacontology-us-ncmec:NCMECCybertipReportShape a sh:NodeShape ;
    rdfs:label "NCMEC Cybertip Report Shape"@en ;
    rdfs:comment "Validation shape for NCMEC Cybertip report instances."@en ;
    sh:property [ rdfs:comment "Report name should be 5-200 characters when specified."@en ;
            sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:minCount 0 ;
            sh:minLength 5 ;
            sh:path uco-core:name ],
        [ rdfs:comment "Report description should be 10-5000 characters when specified."@en ;
            sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 5000 ;
            sh:minCount 0 ;
            sh:minLength 10 ;
            sh:path uco-core:description ],
        [ rdfs:comment "Report creation timestamp."@en ;
            sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:minCount 0 ;
            sh:path uco-core:createdTime ],
        [ rdfs:comment "Report must have exactly one NCMEC incident type."@en ;
            sh:class cacontology-us-ncmec:NCMECIncidentType ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:path cacontology-us-ncmec:hasNCMECIncidentType ] ;
    sh:targetClass cacontology-us-ncmec:NCMECCybertipReport .

cacontology-us-ncmec:NCMECIncidentTypeShape a sh:NodeShape ;
    rdfs:label "NCMEC Incident Type Shape"@en ;
    rdfs:comment "Validation shape for NCMEC incident type instances."@en ;
    sh:property [ rdfs:comment "Incident type must have a name (5-100 characters)."@en ;
            sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 100 ;
            sh:minCount 1 ;
            sh:minLength 5 ;
            sh:path uco-core:name ],
        [ rdfs:comment "Incident code must be from the allowed NCMEC list."@en ;
            sh:datatype xsd:string ;
            sh:in ( "CST" "OE" "CSAM" "CP" "MISC" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:path cacontology-us-ncmec:incidentCode ] ;
    sh:targetClass cacontology-us-ncmec:NCMECIncidentType .

cacontology-us-ncmec:NCMECReportAnnotationShape a sh:NodeShape ;
    rdfs:label "NCMEC Report Annotation Shape"@en ;
    rdfs:comment "Validation shape for NCMEC report annotation instances."@en ;
    sh:property [ rdfs:comment "Annotation name should be 3-100 characters when specified."@en ;
            sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 100 ;
            sh:minCount 0 ;
            sh:minLength 3 ;
            sh:path uco-core:name ],
        [ rdfs:comment "Annotation description should be 10-500 characters when specified."@en ;
            sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 500 ;
            sh:minCount 0 ;
            sh:minLength 10 ;
            sh:path uco-core:description ] ;
    sh:targetClass cacontology-us-ncmec:NCMECReportAnnotation .

cacontology-us-ncmec:OnlineEnticementIncidentShape a sh:NodeShape ;
    rdfs:label "Online Enticement Incident Shape"@en ;
    rdfs:comment "Validation shape for online enticement incident instances."@en ;
    sh:property [ rdfs:comment "Online enticement incidents must have OE code."@en ;
            sh:hasValue "OE" ;
            sh:path cacontology-us-ncmec:incidentCode ] ;
    sh:targetClass cacontology-us-ncmec:OnlineEnticementIncident .

cacontology-us-ncmec:PhoneNumberTraceShape a sh:NodeShape ;
    rdfs:label "Phone Number Trace Shape"@en ;
    rdfs:comment "Validation shape for phone number trace instances."@en ;
    sh:property [ rdfs:comment "Phone verification status must be from the allowed list."@en ;
            sh:datatype xsd:string ;
            sh:in ( "verified" "unverified" "disconnected" ) ;
            sh:maxCount 1 ;
            sh:minCount 0 ;
            sh:path cacontology-us-ncmec:phoneVerificationStatus ],
        [ rdfs:comment "Phone trace must trace to exactly one phone number."@en ;
            sh:class uco-observable:PhoneNumber ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:path cacontology-us-ncmec:tracedToPhone ] ;
    sh:targetClass cacontology-us-ncmec:PhoneNumberTrace .

cacontology-us-ncmec:PlatformCooperationCrossReferenceShape a sh:NodeShape ;
    rdfs:label "Platform Cooperation Cross Reference Shape"@en ;
    rdfs:comment "Validates that platform cooperation involves digital services."@en ;
    sh:sparql [ sh:message "Platform cooperation should involve digital services."@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/us/ncmec#"^^xsd:anyURI ;
                            sh:prefix "icacus" ],
                        [ sh:namespace "https://ontology.unifiedcyberontology.org/uco/observable/"^^xsd:anyURI ;
                            sh:prefix "uco-observable" ] ] ;
            sh:select """
            SELECT $this WHERE {
                $this a cacontology-us-ncmec:PlatformCooperation .
                FILTER NOT EXISTS {
                    $this cacontology-us-ncmec:involvesPlatform ?platform .
                    ?platform a uco-observable:DigitalService .
                }
            }
        """ ] ;
    sh:targetClass cacontology-us-ncmec:PlatformCooperation .

cacontology-us-ncmec:PlatformCooperationShape a sh:NodeShape ;
    rdfs:label "Platform Cooperation Shape"@en ;
    rdfs:comment "Validation shape for platform cooperation instances."@en ;
    sh:property [ rdfs:comment "Platform response time must be between 0.1 and 8760 hours."@en ;
            sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 8760.0 ;
            sh:minCount 0 ;
            sh:minInclusive 0.1 ;
            sh:path cacontology-us-ncmec:platformResponseTime ],
        [ rdfs:comment "Cooperation level must be from the allowed list."@en ;
            sh:datatype xsd:string ;
            sh:in ( "full" "partial" "limited" "none" ) ;
            sh:maxCount 1 ;
            sh:minCount 0 ;
            sh:path cacontology-us-ncmec:cooperationLevel ],
        [ rdfs:comment "Data provided must be from the allowed list."@en ;
            sh:datatype xsd:string ;
            sh:in ( "account_info" "user_data" "content" "metadata" "logs" ) ;
            sh:maxCount 5 ;
            sh:minCount 0 ;
            sh:path cacontology-us-ncmec:dataProvided ],
        [ rdfs:comment "Platform cooperation must involve exactly one digital service."@en ;
            sh:class uco-observable:DigitalService ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:path cacontology-us-ncmec:involvesPlatform ] ;
    sh:targetClass cacontology-us-ncmec:PlatformCooperation .

cacontology-us-ncmec:PossessionIndicatorShape a sh:NodeShape ;
    rdfs:label "Possession Indicator Shape"@en ;
    rdfs:comment "Validation shape for possession indicator instances."@en ;
    sh:property [ rdfs:comment "Indicator strength must be from the allowed list."@en ;
            sh:datatype xsd:string ;
            sh:in ( "strong" "moderate" "weak" ) ;
            sh:maxCount 1 ;
            sh:minCount 0 ;
            sh:path cacontology-us-ncmec:indicatorStrength ] ;
    sh:targetClass cacontology-us-ncmec:PossessionIndicator .

cacontology-us-ncmec:ProcessingSequenceValidationShape a sh:NodeShape ;
    rdfs:label "Processing Sequence Validation Shape"@en ;
    rdfs:comment "Validates that investigation triggers occur after tip processing."@en ;
    sh:sparql [ sh:message "Investigation trigger should occur after tip processing."@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/us/ncmec#"^^xsd:anyURI ;
                            sh:prefix "icacus" ],
                        [ sh:namespace "https://ontology.unifiedcyberontology.org/uco/core/"^^xsd:anyURI ;
                            sh:prefix "uco-core" ] ] ;
            sh:select """
            SELECT $this WHERE {
                $this a cacontology-us-ncmec:InvestigationTrigger ;
                      uco-core:startTime ?triggerTime ;
                      cacontology-us-ncmec:triggeredBy ?tip .
                ?processing cacontology-us-ncmec:processedTip ?tip ;
                           uco-core:endTime ?processTime .
                FILTER (?triggerTime < ?processTime)
            }
        """ ] ;
    sh:targetClass cacontology-us-ncmec:InvestigationTrigger .

cacontology-us-ncmec:ProcessingTimeValidationShape a sh:NodeShape ;
    rdfs:label "Processing Time Validation Shape"@en ;
    rdfs:comment "Validates processing time reasonableness."@en ;
    sh:sparql [ sh:message "Processing time should be consistent with start and end times."@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/us/ncmec#"^^xsd:anyURI ;
                            sh:prefix "icacus" ],
                        [ sh:namespace "https://ontology.unifiedcyberontology.org/uco/core/"^^xsd:anyURI ;
                            sh:prefix "uco-core" ] ] ;
            sh:select """
            SELECT $this WHERE {
                $this uco-core:startTime ?start ;
                      uco-core:endTime ?end ;
                      cacontology-us-ncmec:processingTime ?declaredTime .
                BIND((?end - ?start) / 3600 AS ?actualHours)
                FILTER (ABS(?actualHours - ?declaredTime) > 1.0)
            }
        """ ] ;
    sh:targetClass cacontology-us-ncmec:TipProcessing .

cacontology-us-ncmec:ReportIncidentTypeCrossReferenceShape a sh:NodeShape ;
    rdfs:label "Report Incident Type Cross Reference Shape"@en ;
    rdfs:comment "Validates that NCMEC reports have appropriate incident types."@en ;
    sh:sparql [ sh:message "NCMEC report should have valid incident type relationship."@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/us/ncmec#"^^xsd:anyURI ;
                            sh:prefix "icacus" ] ] ;
            sh:select """
            SELECT $this WHERE {
                $this a cacontology-us-ncmec:NCMECCybertipReport .
                FILTER NOT EXISTS {
                    $this cacontology-us-ncmec:hasNCMECIncidentType ?incidentType .
                    ?incidentType a cacontology-us-ncmec:NCMECIncidentType .
                }
            }
        """ ] ;
    sh:targetClass cacontology-us-ncmec:NCMECCybertipReport .

cacontology-us-ncmec:SextortionAnnotationShape a sh:NodeShape ;
    rdfs:label "Sextortion Annotation Shape"@en ;
    rdfs:comment "Validation shape for sextortion annotation instances."@en ;
    sh:property [ rdfs:comment "Sextortion annotation name should contain 'sextortion'."@en ;
            sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:minCount 0 ;
            sh:path uco-core:name ;
            sh:pattern ".*[Ss]extortion.*" ] ;
    sh:targetClass cacontology-us-ncmec:SextortionAnnotation .

cacontology-us-ncmec:SpamAnnotationShape a sh:NodeShape ;
    rdfs:label "Spam Annotation Shape"@en ;
    rdfs:comment "Validation shape for spam annotation instances."@en ;
    sh:property [ rdfs:comment "Spam annotation name should contain 'spam'."@en ;
            sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:minCount 0 ;
            sh:path uco-core:name ;
            sh:pattern ".*[Ss]pam.*" ] ;
    sh:targetClass cacontology-us-ncmec:SpamAnnotation .

cacontology-us-ncmec:TaskForceReferralShape a sh:NodeShape ;
    rdfs:label "Task Force Referral Shape"@en ;
    rdfs:comment "Validation shape for task force referral instances."@en ;
    sh:property [ rdfs:comment "Task force referrals should be to state or local jurisdiction."@en ;
            sh:datatype xsd:string ;
            sh:in ( "state" "local" ) ;
            sh:maxCount 1 ;
            sh:minCount 0 ;
            sh:path cacontology-us-ncmec:referralJurisdiction ] ;
    sh:targetClass cacontology-us-ncmec:TaskForceReferral .

cacontology-us-ncmec:TemporalValidationShape a sh:NodeShape ;
    rdfs:label "Temporal Validation Shape"@en ;
    rdfs:comment "Validates temporal consistency for NCMEC operations."@en ;
    sh:sparql [ sh:message "Start time must be before end time when both are specified."@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://ontology.unifiedcyberontology.org/uco/core/"^^xsd:anyURI ;
                            sh:prefix "uco-core" ] ] ;
            sh:select """
            SELECT $this WHERE {
                $this uco-core:startTime ?start ;
                      uco-core:endTime ?end .
                FILTER (?start >= ?end)
            }
        """ ] ;
    sh:targetClass cacontology-us-ncmec:CyberTipAnalysis,
        cacontology-us-ncmec:InvestigationTrigger,
        cacontology-us-ncmec:TipProcessing .

cacontology-us-ncmec:TipEnrichmentShape a sh:NodeShape ;
    rdfs:label "Tip Enrichment Shape"@en ;
    rdfs:comment "Validation shape for tip enrichment instances."@en ;
    sh:property [ rdfs:comment "Enrichment type must be specified from the allowed list."@en ;
            sh:datatype xsd:string ;
            sh:in ( "geographic" "demographic" "technical" "behavioral" "historical" ) ;
            sh:maxCount 5 ;
            sh:minCount 1 ;
            sh:path cacontology-us-ncmec:enrichmentType ] ;
    sh:targetClass cacontology-us-ncmec:TipEnrichment .

cacontology-us-ncmec:TipPrioritizationShape a sh:NodeShape ;
    rdfs:label "Tip Prioritization Shape"@en ;
    rdfs:comment "Validation shape for tip prioritization instances."@en ;
    sh:property [ rdfs:comment "Priority level must be specified from the allowed list."@en ;
            sh:datatype xsd:string ;
            sh:in ( "critical" "high" "medium" "low" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:path cacontology-us-ncmec:priorityLevel ] ;
    sh:targetClass cacontology-us-ncmec:TipPrioritization .

cacontology-us-ncmec:TipProcessingShape a sh:NodeShape ;
    rdfs:label "Tip Processing Shape"@en ;
    rdfs:comment "Validation shape for tip processing instances."@en ;
    sh:property [ rdfs:comment "Tip processing must specify start time."@en ;
            sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:path uco-core:startTime ],
        [ rdfs:comment "Tip processing may specify end time."@en ;
            sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:minCount 0 ;
            sh:path uco-core:endTime ],
        [ rdfs:comment "Processing time must be between 0.1 and 720 hours (30 days)."@en ;
            sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 720.0 ;
            sh:minCount 0 ;
            sh:minInclusive 0.1 ;
            sh:path cacontology-us-ncmec:processingTime ],
        [ rdfs:comment "Tip processing must process exactly one NCMEC tip."@en ;
            sh:class cacontology-us-ncmec:NCMECCybertipReport ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:path cacontology-us-ncmec:processedTip ] ;
    sh:targetClass cacontology-us-ncmec:TipProcessing .

cacontology-us-ncmec:TipValidationShape a sh:NodeShape ;
    rdfs:label "Tip Validation Shape"@en ;
    rdfs:comment "Validation shape for tip validation instances."@en ;
    sh:property [ rdfs:comment "Validation status must be specified from the allowed list."@en ;
            sh:datatype xsd:string ;
            sh:in ( "validated" "partially_validated" "not_validated" ) ;
            sh:maxCount 1 ;
            sh:minCount 1 ;
            sh:path cacontology-us-ncmec:validationStatus ] ;
    sh:targetClass cacontology-us-ncmec:TipValidation .

cacontology-us-ncmec:TransferDetectionShape a sh:NodeShape ;
    rdfs:label "Transfer Detection Shape"@en ;
    rdfs:comment "Validation shape for transfer detection instances."@en ;
    sh:property [ rdfs:comment "Transfer volume must be between 0.001 and 100000 MB."@en ;
            sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 100000.0 ;
            sh:minCount 0 ;
            sh:minInclusive 0.001 ;
            sh:path cacontology-us-ncmec:transferVolume ],
        [ rdfs:comment "Transfer frequency must be from the allowed list."@en ;
            sh:datatype xsd:string ;
            sh:in ( "single" "multiple" "ongoing" ) ;
            sh:maxCount 1 ;
            sh:minCount 0 ;
            sh:path cacontology-us-ncmec:transferFrequency ] ;
    sh:targetClass cacontology-us-ncmec:TransferDetection .

cacontology-us-ncmec:TriggerInvestigationCrossReferenceShape a sh:NodeShape ;
    rdfs:label "Trigger Investigation Cross Reference Shape"@en ;
    rdfs:comment "Validates that investigation triggers result in investigations."@en ;
    sh:sparql [ sh:message "Investigation trigger should result in actual investigation."@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/us/ncmec#"^^xsd:anyURI ;
                            sh:prefix "icacus" ],
                        [ sh:namespace "https://cacontology.projectvic.org#"^^xsd:anyURI ;
                            sh:prefix "icac" ] ] ;
            sh:select """
            SELECT $this WHERE {
                $this a cacontology-us-ncmec:InvestigationTrigger .
                FILTER NOT EXISTS {
                    $this cacontology-us-ncmec:resultedInInvestigation ?investigation .
                    ?investigation a cacontology:Investigation .
                }
            }
        """ ] ;
    sh:targetClass cacontology-us-ncmec:InvestigationTrigger .

cacontology-us-ncmec:UrgencyConsistencyValidationShape a sh:NodeShape ;
    rdfs:label "Urgency Consistency Validation Shape"@en ;
    rdfs:comment "Validates urgency level consistency with trigger criteria."@en ;
    sh:sparql [ sh:message "Immediate urgency should have appropriate trigger criteria."@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/us/ncmec#"^^xsd:anyURI ;
                            sh:prefix "icacus" ] ] ;
            sh:select """
            SELECT $this WHERE {
                $this cacontology-us-ncmec:urgencyLevel "immediate" .
                FILTER NOT EXISTS {
                    $this cacontology-us-ncmec:triggerCriteria ?criteria .
                    FILTER (?criteria IN ("imminent_danger", "victim_age"))
                }
            }
        """ ] ;
    sh:targetClass cacontology-us-ncmec:InvestigationTrigger .

cacontology-us-ncmec1:CSAMSolicitationAnnotation a owl:Class ;
    rdfs:label "CSAM Solicitation Annotation"@en ;
    rdfs:comment "Annotation indicating the report is associated with solicitation of CSAM. Source: NCMEC Cybertip API Section B.1.1, reportAnnotations/csamSolicitation element."@en ;
    rdfs:subClassOf cacontology-us-ncmec1:NCMECReportAnnotation .

cacontology-us-ncmec1:ChildSexTourismIncident a owl:Class ;
    rdfs:label "Child Sex Tourism Incident"@en ;
    rdfs:comment "Incidents involving child sex tourism. Source: NCMEC Cybertip API Section B.1.1, incidentType 'Child Sex Tourism'."@en ;
    rdfs:subClassOf cacontology-us-ncmec1:NCMECIncidentType ;
    skos:exactMatch "CST" ;
    cacontology-us-ncmec1:incidentCode "CST" .

cacontology-us-ncmec1:ChildSexTraffickingIncident a owl:Class ;
    rdfs:label "Child Sex Trafficking Incident"@en ;
    rdfs:comment "Incidents involving child sex trafficking. Source: NCMEC Cybertip API Section B.1.1, incidentType 'Child Sex Trafficking'."@en ;
    rdfs:subClassOf cacontology-us-ncmec1:NCMECIncidentType ;
    skos:exactMatch "CST" ;
    cacontology-us-ncmec1:incidentCode "CST" .

cacontology-us-ncmec1:FederalReferral a owl:Class ;
    rdfs:label "Federal Referral"@en ;
    rdfs:comment "Referral of NCMEC tip to federal law enforcement agencies."@en ;
    rdfs:subClassOf cacontology-us-ncmec1:InvestigationTrigger .

cacontology-us-ncmec1:LocalLawEnforcementReferral a owl:Class ;
    rdfs:label "Local Law Enforcement Referral"@en ;
    rdfs:comment "Referral of NCMEC tip to local law enforcement agency."@en ;
    rdfs:subClassOf cacontology-us-ncmec1:InvestigationTrigger .

cacontology-us-ncmec1:MinorToMinorInteractionAnnotation a owl:Class ;
    rdfs:label "Minor to Minor Interaction Annotation"@en ;
    rdfs:comment "Annotation indicating the report is associated with an interaction between minors. Source: NCMEC Cybertip API Section B.1.1, reportAnnotations/minorToMinorInteraction element."@en ;
    rdfs:subClassOf cacontology-us-ncmec1:NCMECReportAnnotation .

cacontology-us-ncmec1:OnlineEnticementIncident a owl:Class ;
    rdfs:label "Online Enticement Incident"@en ;
    rdfs:comment "Incidents involving online enticement of children for sexual acts. Source: NCMEC Cybertip API Section B.1.1, incidentType 'Online Enticement of Children for Sexual Acts'."@en ;
    rdfs:subClassOf cacontology-us-ncmec1:NCMECIncidentType ;
    skos:exactMatch "OE" ;
    cacontology-us-ncmec1:incidentCode "OE" .

cacontology-us-ncmec1:SextortionAnnotation a owl:Class ;
    rdfs:label "Sextortion Annotation"@en ;
    rdfs:comment "Annotation indicating the report is associated with sextortion. Source: NCMEC Cybertip API Section B.1.1, reportAnnotations/sextortion element."@en ;
    rdfs:subClassOf cacontology-us-ncmec1:NCMECReportAnnotation .

cacontology-us-ncmec1:SpamAnnotation a owl:Class ;
    rdfs:label "Spam Annotation"@en ;
    rdfs:comment "Annotation indicating the report is associated with spam. Source: NCMEC Cybertip API Section B.1.1, reportAnnotations/spam element."@en ;
    rdfs:subClassOf cacontology-us-ncmec1:NCMECReportAnnotation .

cacontology-us-ncmec1:TaskForceReferral a owl:Class ;
    rdfs:label "Task Force Referral"@en ;
    rdfs:comment "Referral of NCMEC tip to appropriate ICAC task force for investigation."@en ;
    rdfs:subClassOf cacontology-us-ncmec1:InvestigationTrigger .

cacontology-us-ncmec1:accountConfidence a owl:DatatypeProperty ;
    rdfs:label "account confidence"@en ;
    rdfs:comment "Confidence level in account linking (verified, probable, possible)."@en ;
    rdfs:domain cacontology-us-ncmec1:AccountLinking ;
    rdfs:range xsd:string .

cacontology-us-ncmec1:analysisConfidence a owl:DatatypeProperty ;
    rdfs:label "analysis confidence"@en ;
    rdfs:comment "Confidence level in tip analysis (high, medium, low)."@en ;
    rdfs:domain cacontology-us-ncmec1:CyberTipAnalysis ;
    rdfs:range xsd:string .

cacontology-us-ncmec1:analysisOf a owl:ObjectProperty ;
    rdfs:label "analysis of"@en ;
    rdfs:comment "Links analysis to the NCMEC tip being analyzed."@en ;
    rdfs:domain cacontology-us-ncmec1:CyberTipAnalysis ;
    rdfs:range cacontology-us-ncmec1:NCMECCybertipReport .

cacontology-us-ncmec1:cooperationLevel a owl:DatatypeProperty ;
    rdfs:label "cooperation level"@en ;
    rdfs:comment "Level of platform cooperation (full, partial, limited, none)."@en ;
    rdfs:domain cacontology-us-ncmec1:PlatformCooperation ;
    rdfs:range xsd:string .

cacontology-us-ncmec1:dataProvided a owl:DatatypeProperty ;
    rdfs:label "data provided"@en ;
    rdfs:comment "Type of data provided by platform (account_info, user_data, content, metadata)."@en ;
    rdfs:domain cacontology-us-ncmec1:PlatformCooperation ;
    rdfs:range xsd:string .

cacontology-us-ncmec1:enrichmentType a owl:DatatypeProperty ;
    rdfs:label "enrichment type"@en ;
    rdfs:comment "Type of enrichment added (geographic, demographic, technical, behavioral)."@en ;
    rdfs:domain cacontology-us-ncmec1:TipEnrichment ;
    rdfs:range xsd:string .

cacontology-us-ncmec1:hasNCMECIncidentType a owl:ObjectProperty ;
    rdfs:label "has NCMEC incident type"@en ;
    rdfs:comment "Links a NCMEC report to its incident type. Source: NCMEC Cybertip API Section B.1.1, incidentType element."@en ;
    rdfs:domain cacontology-us-ncmec1:NCMECCybertipReport ;
    rdfs:range cacontology-us-ncmec1:NCMECIncidentType .

cacontology-us-ncmec1:hasNCMECReportAnnotation a owl:ObjectProperty ;
    rdfs:label "has NCMEC report annotation"@en ;
    rdfs:comment "Links a NCMEC report to its annotations. Source: NCMEC Cybertip API Section B.1.1, reportAnnotations element."@en ;
    rdfs:domain cacontology-us-ncmec1:NCMECCybertipReport ;
    rdfs:range cacontology-us-ncmec1:NCMECReportAnnotation .

cacontology-us-ncmec1:identifiedContent a owl:ObjectProperty ;
    rdfs:label "identified content"@en ;
    rdfs:comment "Links content identification to identified digital content."@en ;
    rdfs:domain cacontology-us-ncmec1:ContentIdentification ;
    rdfs:range uco-observable:DigitalArtifact .

cacontology-us-ncmec1:incidentCode a owl:DatatypeProperty ;
    rdfs:label "incident code"@en ;
    rdfs:comment "The official NCMEC incident type code. Source: NCMEC Cybertip API Section B.1.1, incidentType element."@en ;
    rdfs:domain cacontology-us-ncmec1:NCMECIncidentType ;
    rdfs:range xsd:string .

cacontology-us-ncmec1:indicatorStrength a owl:DatatypeProperty ;
    rdfs:label "indicator strength"@en ;
    rdfs:comment "Strength of possession or transfer indicators (strong, moderate, weak)."@en ;
    rdfs:domain cacontology-us-ncmec1:PossessionIndicator ;
    rdfs:range xsd:string .

cacontology-us-ncmec1:involvesPlatform a owl:ObjectProperty ;
    rdfs:label "involves platform"@en ;
    rdfs:comment "Links platform cooperation to the digital platform involved."@en ;
    rdfs:domain cacontology-us-ncmec1:PlatformCooperation ;
    rdfs:range uco-observable:DigitalService .

cacontology-us-ncmec1:linkedToAccount a owl:ObjectProperty ;
    rdfs:label "linked to account"@en ;
    rdfs:comment "Links account linking to digital account."@en ;
    rdfs:domain cacontology-us-ncmec1:AccountLinking ;
    rdfs:range uco-observable:DigitalAccount .

cacontology-us-ncmec1:phoneVerificationStatus a owl:DatatypeProperty ;
    rdfs:label "phone verification status"@en ;
    rdfs:comment "Status of phone number verification (verified, unverified, disconnected)."@en ;
    rdfs:domain cacontology-us-ncmec1:PhoneNumberTrace ;
    rdfs:range xsd:string .

cacontology-us-ncmec1:platformResponseTime a owl:DatatypeProperty ;
    rdfs:label "platform response time"@en ;
    rdfs:comment "Time taken by platform to respond to information request in hours."@en ;
    rdfs:domain cacontology-us-ncmec1:PlatformCooperation ;
    rdfs:range xsd:decimal .

cacontology-us-ncmec1:priorityLevel a owl:DatatypeProperty ;
    rdfs:label "priority level"@en ;
    rdfs:comment "Priority level assigned to tip (critical, high, medium, low)."@en ;
    rdfs:domain cacontology-us-ncmec1:TipPrioritization ;
    rdfs:range xsd:string .

cacontology-us-ncmec1:processedTip a owl:ObjectProperty ;
    rdfs:label "processed tip"@en ;
    rdfs:comment "Links processing activity to the tip being processed."@en ;
    rdfs:domain cacontology-us-ncmec1:TipProcessing ;
    rdfs:range cacontology-us-ncmec1:NCMECCybertipReport .

cacontology-us-ncmec1:processingTime a owl:DatatypeProperty ;
    rdfs:label "processing time"@en ;
    rdfs:comment "Time taken to process tip in hours."@en ;
    rdfs:domain cacontology-us-ncmec1:TipProcessing ;
    rdfs:range xsd:decimal .

cacontology-us-ncmec1:referralJurisdiction a owl:DatatypeProperty ;
    rdfs:label "referral jurisdiction"@en ;
    rdfs:comment "Jurisdiction to which tip is referred (federal, state, local)."@en ;
    rdfs:domain cacontology-us-ncmec1:InvestigationTrigger ;
    rdfs:range xsd:string .

cacontology-us-ncmec1:resultedInInvestigation a owl:ObjectProperty ;
    rdfs:label "resulted in investigation"@en ;
    rdfs:comment "Links investigation trigger to the investigation it initiated."@en ;
    rdfs:domain cacontology-us-ncmec1:InvestigationTrigger ;
    rdfs:range cacontology1:Investigation .

cacontology-us-ncmec1:supportedBy a owl:ObjectProperty ;
    rdfs:label "supported by"@en ;
    rdfs:comment "Links tip analysis to platform cooperation that supported it."@en ;
    rdfs:domain cacontology-us-ncmec1:CyberTipAnalysis ;
    rdfs:range cacontology-us-ncmec1:PlatformCooperation .

cacontology-us-ncmec1:tracedToPhone a owl:ObjectProperty ;
    rdfs:label "traced to phone"@en ;
    rdfs:comment "Links phone trace to specific phone number."@en ;
    rdfs:domain cacontology-us-ncmec1:PhoneNumberTrace ;
    rdfs:range uco-observable:PhoneNumber .

cacontology-us-ncmec1:transferFrequency a owl:DatatypeProperty ;
    rdfs:label "transfer frequency"@en ;
    rdfs:comment "Frequency of transfer activity (single, multiple, ongoing)."@en ;
    rdfs:domain cacontology-us-ncmec1:TransferDetection ;
    rdfs:range xsd:string .

cacontology-us-ncmec1:transferVolume a owl:DatatypeProperty ;
    rdfs:label "transfer volume"@en ;
    rdfs:comment "Volume of material transferred in megabytes."@en ;
    rdfs:domain cacontology-us-ncmec1:TransferDetection ;
    rdfs:range xsd:decimal .

cacontology-us-ncmec1:triggerCriteria a owl:DatatypeProperty ;
    rdfs:label "trigger criteria"@en ;
    rdfs:comment "Criteria that triggered investigation (content_volume, suspect_profile, victim_age, repeat_offender)."@en ;
    rdfs:domain cacontology-us-ncmec1:InvestigationTrigger ;
    rdfs:range xsd:string .

cacontology-us-ncmec1:triggeredBy a owl:ObjectProperty ;
    rdfs:label "triggered by"@en ;
    rdfs:comment "Links investigation trigger to the tip that triggered it."@en ;
    rdfs:domain cacontology-us-ncmec1:InvestigationTrigger ;
    rdfs:range cacontology-us-ncmec1:NCMECCybertipReport .

cacontology-us-ncmec1:urgencyLevel a owl:DatatypeProperty ;
    rdfs:label "urgency level"@en ;
    rdfs:comment "Urgency level for investigation (immediate, urgent, routine)."@en ;
    rdfs:domain cacontology-us-ncmec1:InvestigationTrigger ;
    rdfs:range xsd:string .

cacontology-us-ncmec1:validationStatus a owl:DatatypeProperty ;
    rdfs:label "validation status"@en ;
    rdfs:comment "Validation status of tip (validated, partially_validated, not_validated)."@en ;
    rdfs:domain cacontology-us-ncmec1:TipValidation ;
    rdfs:range xsd:string .

cacontology-usa-federal:CEOSAttorneyRoleShape a sh:NodeShape ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "child-exploitation" "obscenity" ) ;
            sh:message "CEOS attorney must specialize in child-exploitation or obscenity"@en ;
            sh:minCount 1 ;
            sh:path cacontology-usa-federal:roleSpecialization ],
        [ sh:datatype xsd:integer ;
            sh:maxCount 1 ;
            sh:message "CEOS attorney must have at least 2 years experience"@en ;
            sh:minInclusive 2 ;
            sh:path cacontology-usa-federal:roleExperience ] ;
    sh:targetClass cacontology-usa-federal:CEOSAttorneyRole .

cacontology-usa-federal:ChildPornographyProductionShape a sh:NodeShape ;
    sh:property [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Child pornography production must have exactly one begin timestamp"@en ;
            sh:minCount 1 ;
            sh:path gufo:hasBeginPointInXSDDateTimeStamp ],
        [ sh:datatype xsd:integer ;
            sh:maxCount 1 ;
            sh:message "Child pornography production has mandatory minimum of 15 years"@en ;
            sh:minInclusive 15 ;
            sh:path cacontology-usa-federal:mandatoryMinimumSentence ],
        [ sh:datatype xsd:integer ;
            sh:maxCount 1 ;
            sh:maxInclusive 5 ;
            sh:message "Child pornography production severity level must be 4 or 5"@en ;
            sh:minInclusive 4 ;
            sh:path cacontology-usa-federal:crimeSeverityLevel ],
        [ sh:datatype xsd:string ;
            sh:in ( "interstate-commerce" "foreign-commerce" "federal-jurisdiction" ) ;
            sh:message "Must specify federal jurisdiction basis"@en ;
            sh:minCount 1 ;
            sh:path cacontology-usa-federal:crimeJurisdiction ] ;
    sh:targetClass cacontology-usa-federal:ChildPornographyProduction .

cacontology-usa-federal:ComplexCaseBusinessRule a sh:NodeShape ;
    sh:sparql [ sh:message "Complex prosecutions require experienced CEOS attorney"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/usa-federal-law#"^^xsd:anyURI ;
                            sh:prefix "cacontology-usa-federal" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-usa-federal:prosecutionComplexity "complex" .
                $this cacontology-usa-federal:prosecutedBy ?prosecutor .
                ?prosecutor rdf:type cacontology-usa-federal:CEOSAttorneyRole .
                ?prosecutor cacontology-usa-federal:roleExperience ?experience .
                FILTER (?experience < 5)
            }
        """ ] ;
    sh:targetClass cacontology-usa-federal:FederalProsecution .

cacontology-usa-federal:DigitalEvidenceBusinessRule a sh:NodeShape ;
    sh:sparql [ sh:message "Investigations with digital evidence must require forensic analysis"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/usa-federal-law#"^^xsd:anyURI ;
                            sh:prefix "cacontology-usa-federal" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-usa-federal:involvesDigitalEvidence true .
                $this cacontology-usa-federal:requiresForensicAnalysis false .
            }
        """ ] ;
    sh:targetClass cacontology-usa-federal:FederalInvestigation .

cacontology-usa-federal:EventParticipationValidationShape a sh:NodeShape ;
    sh:property [ sh:message "Every federal criminal event must have at least one participant"@en ;
            sh:minCount 1 ;
            sh:path [ sh:alternativePath ( cacontology-usa-federal:prosecutedBy cacontology-usa-federal:investigatedBy cacontology-usa-federal:defendedBy cacontology-usa-federal:victimizedBy ) ] ] ;
    sh:targetClass gufo:Event .

cacontology-usa-federal:EventTypeValidationShape a sh:NodeShape ;
    sh:message "Every EventType must extend gufo:Event"@en ;
    sh:property [ sh:class gufo:Event ;
            sh:minCount 1 ;
            sh:path rdfs:subClassOf ],
        [ sh:hasValue gufo:EventType ;
            sh:minCount 1 ;
            sh:path rdf:type ] ;
    sh:targetClass gufo:EventType .

cacontology-usa-federal:ExtraterritorialCrimeShape a sh:NodeShape ;
    sh:property [ sh:datatype xsd:boolean ;
            sh:hasValue true ;
            sh:message "Extraterritorial crimes must involve international elements"@en ;
            sh:minCount 1 ;
            sh:path cacontology-usa-federal:involvesInternationalElements ],
        [ sh:datatype xsd:string ;
            sh:message "Extraterritorial crimes must specify foreign countries involved"@en ;
            sh:minCount 1 ;
            sh:path cacontology-usa-federal:foreignCountriesInvolved ] ;
    sh:targetNode cacontology-usa-federal:ExtraterritorialProduction,
        cacontology-usa-federal:ForeignCommerceExploitation,
        cacontology-usa-federal:SexTourism,
        cacontology-usa-federal:TransportationForSexualExploitation .

cacontology-usa-federal:FederalDefendantRoleShape a sh:NodeShape ;
    sh:property [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Federal defendant role must have exactly one begin point"@en ;
            sh:minCount 1 ;
            sh:path cacontology-usa-federal:hasRoleBeginPoint ],
        [ sh:class gufo:Event ;
            sh:message "Defendant role must be linked to at least one criminal event"@en ;
            sh:minCount 1 ;
            sh:path cacontology-usa-federal:defendedBy ] ;
    sh:targetClass cacontology-usa-federal:FederalDefendantRole .

cacontology-usa-federal:FederalInvestigationShape a sh:NodeShape ;
    sh:property [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Federal investigation must have exactly one begin timestamp"@en ;
            sh:minCount 1 ;
            sh:path gufo:hasBeginPointInXSDDateTimeStamp ],
        [ sh:class cacontology-usa-federal:FederalInvestigatorRole ;
            sh:message "Federal investigation must have at least one investigator"@en ;
            sh:minCount 1 ;
            sh:path cacontology-usa-federal:investigatedBy ],
        [ sh:class uco-observable:ObservableObject ;
            sh:message "Federal investigation must collect at least one piece of evidence"@en ;
            sh:minCount 1 ;
            sh:path cacontology-usa-federal:collectsEvidence ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Must specify if investigation involves digital evidence"@en ;
            sh:path cacontology-usa-federal:involvesDigitalEvidence ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Must specify if investigation requires forensic analysis"@en ;
            sh:path cacontology-usa-federal:requiresForensicAnalysis ] ;
    sh:targetClass cacontology-usa-federal:FederalInvestigation .

cacontology-usa-federal:FederalProsecutionShape a sh:NodeShape ;
    sh:property [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Federal prosecution must have at most one begin point timestamp"@en ;
            sh:path cacontology-usa-federal:hasProsecutionBeginPoint ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Federal prosecution must have at most one end point timestamp"@en ;
            sh:path cacontology-usa-federal:hasProsecutionEndPoint ],
        [ sh:class cacontology-usa-federal:FederalProsecutorRole ;
            sh:message "Federal prosecution must have at least one prosecutor"@en ;
            sh:minCount 1 ;
            sh:path cacontology-usa-federal:prosecutedBy ],
        [ sh:class gufo:Phase ;
            sh:message "Federal prosecution must have at least one legal phase"@en ;
            sh:minCount 1 ;
            sh:path cacontology-usa-federal:hasLegalPhase ],
        [ sh:datatype xsd:string ;
            sh:in ( "simple" "moderate" "complex" "highly-complex" ) ;
            sh:maxCount 1 ;
            sh:message "Prosecution complexity must be simple, moderate, complex, or highly-complex"@en ;
            sh:path cacontology-usa-federal:prosecutionComplexity ],
        [ sh:datatype xsd:string ;
            sh:in ( "misdemeanor" "felony" "aggravated-felony" ) ;
            sh:maxCount 1 ;
            sh:message "Prosecution severity must be misdemeanor, felony, or aggravated-felony"@en ;
            sh:path cacontology-usa-federal:prosecutionSeverity ],
        [ sh:datatype xsd:string ;
            sh:in ( "pending" "active" "resolved" "dismissed" "appealed" ) ;
            sh:maxCount 1 ;
            sh:message "Prosecution status must be pending, active, resolved, dismissed, or appealed"@en ;
            sh:path cacontology-usa-federal:prosecutionStatus ] ;
    sh:targetClass cacontology-usa-federal:FederalProsecution .

cacontology-usa-federal:FederalProsecutorRoleShape a sh:NodeShape ;
    sh:property [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Federal prosecutor role must have exactly one begin point"@en ;
            sh:minCount 1 ;
            sh:path cacontology-usa-federal:hasRoleBeginPoint ],
        [ sh:datatype xsd:string ;
            sh:in ( "child-exploitation" "sex-trafficking" "cybercrime" "obscenity" "general" ) ;
            sh:maxCount 1 ;
            sh:message "Prosecutor specialization must be specified from valid options"@en ;
            sh:path cacontology-usa-federal:roleSpecialization ],
        [ sh:datatype xsd:integer ;
            sh:maxCount 1 ;
            sh:message "Role experience must be non-negative integer"@en ;
            sh:minInclusive 0 ;
            sh:path cacontology-usa-federal:roleExperience ] ;
    sh:targetClass cacontology-usa-federal:FederalProsecutorRole .

cacontology-usa-federal:FederalVictimRoleShape a sh:NodeShape ;
    sh:property [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Federal victim role must have exactly one begin point"@en ;
            sh:minCount 1 ;
            sh:path cacontology-usa-federal:hasRoleBeginPoint ],
        [ sh:class gufo:Event ;
            sh:message "Victim role must be linked to at least one criminal event"@en ;
            sh:minCount 1 ;
            sh:path cacontology-usa-federal:victimizedBy ] ;
    sh:targetClass cacontology-usa-federal:FederalVictimRole .

cacontology-usa-federal:FinancialControlPattern a gufo:SituationType,
        owl:Class ;
    rdfs:label "Financial Control Pattern"@en ;
    rdfs:comment "Pattern where child support evasion is used as mechanism of control in exploitation cases."@en ;
    rdfs:subClassOf cacontology-usa-federal:ChildSupportExploitationLink .

cacontology-usa-federal:InterstateCOmmerceBusinessRule a sh:NodeShape ;
    sh:property [ sh:datatype xsd:string ;
            sh:message "Child pornography distribution must specify interstate commerce nexus"@en ;
            sh:minCount 1 ;
            sh:path cacontology-usa-federal:hasInterstateNexus ] ;
    sh:targetClass cacontology-usa-federal:ChildPornographyDistribution .

cacontology-usa-federal:KindValidationShape a sh:NodeShape ;
    sh:message "Every Kind must be declared as rdf:type gufo:Kind"@en ;
    sh:property [ sh:hasValue gufo:Kind ;
            sh:minCount 1 ;
            sh:path rdf:type ] ;
    sh:targetClass gufo:Kind .

cacontology-usa-federal:MandatoryMinimumBusinessRule a sh:NodeShape ;
    sh:sparql [ sh:message "Child pornography production with multiple victims requires enhanced sentence"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/usa-federal-law#"^^xsd:anyURI ;
                            sh:prefix "cacontology-usa-federal" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-usa-federal:victimizedBy ?victim1 .
                $this cacontology-usa-federal:victimizedBy ?victim2 .
                FILTER (?victim1 != ?victim2)
                $this cacontology-usa-federal:mandatoryMinimumSentence ?sentence .
                FILTER (?sentence < 25)
            }
        """ ] ;
    sh:targetClass cacontology-usa-federal:ChildPornographyProduction .

cacontology-usa-federal:PhaseOrderingValidationShape a sh:NodeShape ;
    sh:sparql [ sh:message "Pre-trial phase must precede trial phase in federal prosecution"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/usa-federal-law#"^^xsd:anyURI ;
                            sh:prefix "cacontology-usa-federal" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-usa-federal:hasLegalPhase ?preTrialPhase .
                $this cacontology-usa-federal:hasLegalPhase ?trialPhase .
                ?preTrialPhase rdf:type cacontology-usa-federal:PreTrialPhase .
                ?trialPhase rdf:type cacontology-usa-federal:TrialPhase .
                ?preTrialPhase cacontology-usa-federal:hasPhaseBeginPoint ?preTrialBegin .
                ?trialPhase cacontology-usa-federal:hasPhaseBeginPoint ?trialBegin .
                FILTER (?preTrialBegin >= ?trialBegin)
            }
        """ ] ;
    sh:targetClass cacontology-usa-federal:FederalProsecution .

cacontology-usa-federal:PhaseValidationShape a sh:NodeShape ;
    sh:message "Phases are anti-rigid and cannot be subclasses of rigid Kinds"@en ;
    sh:not [ sh:property [ sh:class gufo:Kind ;
                    sh:path rdfs:subClassOf ] ] ;
    sh:property [ sh:hasValue gufo:Phase ;
            sh:minCount 1 ;
            sh:path rdf:type ] ;
    sh:targetClass gufo:Phase .

cacontology-usa-federal:PostConvictionPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Post-Conviction Phase"@en ;
    rdfs:comment "Post-conviction phase including appeals and compliance monitoring. Modeled as anti-rigid gUFO Phase that prosecution temporarily exemplifies."@en ;
    rdfs:subClassOf gufo:Object,
        cacontology-usa-federal:FederalProsecution .

cacontology-usa-federal:PreTrialPhaseShape a sh:NodeShape ;
    sh:property [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Pre-trial phase must have exactly one begin point"@en ;
            sh:minCount 1 ;
            sh:path cacontology-usa-federal:hasPhaseBeginPoint ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Pre-trial phase must have at most one end point"@en ;
            sh:path cacontology-usa-federal:hasPhaseEndPoint ],
        [ sh:class cacontology-usa-federal:FederalProsecution ;
            sh:maxCount 1 ;
            sh:message "Pre-trial phase must be part of exactly one federal prosecution"@en ;
            sh:minCount 1 ;
            sh:path cacontology-usa-federal:isPhaseOf ] ;
    sh:targetClass cacontology-usa-federal:PreTrialPhase .

cacontology-usa-federal:ProsecutionTemporalValidationShape a sh:NodeShape ;
    sh:sparql [ sh:message "Prosecution end point must be after begin point"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/usa-federal-law#"^^xsd:anyURI ;
                            sh:prefix "cacontology-usa-federal" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-usa-federal:hasProsecutionBeginPoint ?beginPoint .
                $this cacontology-usa-federal:hasProsecutionEndPoint ?endPoint .
                FILTER (?endPoint <= ?beginPoint)
            }
        """ ] ;
    sh:targetClass cacontology-usa-federal:FederalProsecution .

cacontology-usa-federal:ProsecutorCollaborationBusinessRule a sh:NodeShape ;
    sh:property [ sh:class cacontology-usa-federal:FederalInvestigatorRole ;
            sh:message "CEOS attorney must collaborate with at least one federal investigator"@en ;
            sh:minCount 1 ;
            sh:path cacontology-usa-federal:collaboratesWith ] ;
    sh:targetClass cacontology-usa-federal:CEOSAttorneyRole .

cacontology-usa-federal:RoleValidationShape a sh:NodeShape ;
    sh:message "Roles are anti-rigid and cannot be subclasses of rigid Kinds"@en ;
    sh:not [ sh:property [ sh:class gufo:Kind ;
                    sh:path rdfs:subClassOf ] ] ;
    sh:property [ sh:hasValue gufo:Role ;
            sh:minCount 1 ;
            sh:path rdf:type ] ;
    sh:targetClass gufo:Role .

cacontology-usa-federal:SentencingPhaseShape a sh:NodeShape ;
    sh:property [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Sentencing phase must have exactly one begin point"@en ;
            sh:minCount 1 ;
            sh:path cacontology-usa-federal:hasPhaseBeginPoint ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Sentencing phase must have at most one end point"@en ;
            sh:path cacontology-usa-federal:hasPhaseEndPoint ],
        [ sh:class cacontology-usa-federal:FederalProsecution ;
            sh:maxCount 1 ;
            sh:message "Sentencing phase must be part of exactly one federal prosecution"@en ;
            sh:minCount 1 ;
            sh:path cacontology-usa-federal:isPhaseOf ] ;
    sh:targetClass cacontology-usa-federal:SentencingPhase .

cacontology-usa-federal:SexTraffickingOfMinorsShape a sh:NodeShape ;
    sh:property [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Sex trafficking must have exactly one begin timestamp"@en ;
            sh:minCount 1 ;
            sh:path gufo:hasBeginPointInXSDDateTimeStamp ],
        [ sh:datatype xsd:integer ;
            sh:maxCount 1 ;
            sh:message "Sex trafficking of minors has mandatory minimum of 10 years"@en ;
            sh:minInclusive 10 ;
            sh:path cacontology-usa-federal:mandatoryMinimumSentence ],
        [ sh:datatype xsd:integer ;
            sh:hasValue 5 ;
            sh:maxCount 1 ;
            sh:message "Sex trafficking of minors has maximum severity level 5"@en ;
            sh:path cacontology-usa-federal:crimeSeverityLevel ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Must specify if trafficking involves multiple states"@en ;
            sh:path cacontology-usa-federal:involvesMultipleStates ] ;
    sh:targetClass cacontology-usa-federal:SexTraffickingOfMinors .

cacontology-usa-federal:SubKindValidationShape a sh:NodeShape ;
    sh:message "Every SubKind must be a subclass of a Kind"@en ;
    sh:property [ sh:class gufo:Kind ;
            sh:minCount 1 ;
            sh:path rdfs:subClassOf ] ;
    sh:targetClass gufo:SubKind .

cacontology-usa-federal:TrialPhaseShape a sh:NodeShape ;
    sh:property [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Trial phase must have exactly one begin point"@en ;
            sh:minCount 1 ;
            sh:path cacontology-usa-federal:hasPhaseBeginPoint ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Trial phase must have at most one end point"@en ;
            sh:path cacontology-usa-federal:hasPhaseEndPoint ],
        [ sh:class cacontology-usa-federal:FederalProsecution ;
            sh:maxCount 1 ;
            sh:message "Trial phase must be part of exactly one federal prosecution"@en ;
            sh:minCount 1 ;
            sh:path cacontology-usa-federal:isPhaseOf ] ;
    sh:targetClass cacontology-usa-federal:TrialPhase .

cacontology-usa-federal:followsPhase a owl:ObjectProperty ;
    rdfs:label "follows phase"@en ;
    rdfs:comment "Temporal succession relationship between federal legal phases (gUFO temporal ordering)."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range gufo:Phase ;
    owl:inverseOf cacontology-usa-federal:precedesPhase .

cacontology-usa-federal:hasDivision a owl:ObjectProperty ;
    rdfs:label "has division"@en ;
    rdfs:comment "Links DOJ to its divisions like CEOS (gUFO functional complex structure)."@en ;
    rdfs:domain gufo:FunctionalComplex ;
    rdfs:range cacontology-usa-federal:CEOSdivision ;
    rdfs:subPropertyOf gufo:isComponentOf .

cacontology-usa-federal:hasRoleEndPoint a owl:DatatypeProperty ;
    rdfs:label "has role end point"@en ;
    rdfs:comment "Temporal end point for federal role."@en ;
    rdfs:domain gufo:Role ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-usa-federal:phaseDuration a owl:DatatypeProperty ;
    rdfs:label "phase duration"@en ;
    rdfs:comment "Duration of federal legal phase."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:duration .

cacontology-usa-federal:prosecutionDuration a owl:DatatypeProperty ;
    rdfs:label "prosecution duration"@en ;
    rdfs:comment "Duration of federal prosecution from charge to resolution."@en ;
    rdfs:domain cacontology-usa-federal:FederalProsecution ;
    rdfs:range xsd:duration .

cacontology-usa-federal:requiresRole a owl:ObjectProperty ;
    rdfs:label "requires role"@en ;
    rdfs:comment "Dependency relationship between federal legal roles (gUFO relational dependence)."@en ;
    rdfs:domain gufo:Role ;
    rdfs:range gufo:Role .

cacontology-usa-federal:roleDuration a owl:DatatypeProperty ;
    rdfs:label "role duration"@en ;
    rdfs:comment "Duration of individual's federal role."@en ;
    rdfs:domain gufo:Role ;
    rdfs:range xsd:duration .

cacontology-usa-federal:usesEvidence a owl:ObjectProperty ;
    rdfs:label "uses evidence"@en ;
    rdfs:comment "Links prosecution to evidence used (gUFO object-aspect relationship)."@en ;
    rdfs:domain cacontology-usa-federal:FederalProsecution ;
    rdfs:range uco-observable:ObservableObject .

cacontology-usa-leg:FBI a cacontology-usa-leg:USSubCabinetAgency ;
    rdfs:label "Federal Bureau of Investigation"@en ;
    cacontology-legal:jurisdictionScope "US" ;
    cacontology-usa-leg:acronym "FBI" ;
    cacontology-usa-leg:parentAgency cacontology-usa-leg:DOJ .

cacontology-usa-leg:HSI a cacontology-usa-leg:USFederalDirectorate ;
    rdfs:label "Homeland Security Investigations"@en ;
    rdfs:comment "Principal criminal investigative arm of DHS, operating as a directorate within ICE."@en ;
    cacontology-legal:jurisdictionScope "US" ;
    cacontology-usa-leg:acronym "HSI" ;
    cacontology-usa-leg:parentAgency cacontology-usa-leg:ICE .

cacontology-usa-leg:NCMEC a uco-identity:Organization ;
    rdfs:label "National Center for Missing & Exploited Children"@en ;
    rdfs:comment "Nonprofit organization that serves as the national clearinghouse for missing and exploited children."@en ;
    cacontology-legal:countryCode "US" ;
    cacontology-legal:jurisdictionScope "US" ;
    cacontology-usa-leg:acronym "NCMEC" ;
    cacontology-usa-leg:organizationType "nonprofit" .

cacontology-usa-leg:OJJDP a cacontology-usa-leg:USFederalAgencyOffice ;
    rdfs:label "Office of Juvenile Justice and Delinquency Prevention"@en ;
    cacontology-legal:jurisdictionScope "US" ;
    cacontology-usa-leg:acronym "OJJDP" ;
    cacontology-usa-leg:parentAgency cacontology-usa-leg:DOJ .

cacontology-usa-leg:USMS a cacontology-usa-leg:USSubCabinetAgency ;
    rdfs:label "United States Marshals Service"@en ;
    cacontology-legal:jurisdictionScope "US" ;
    cacontology-usa-leg:acronym "USMS" ;
    cacontology-usa-leg:parentAgency cacontology-usa-leg:DOJ .

cacontology-usa-leg:USPS_OIG a cacontology-usa-leg:USFederalAgencyOffice ;
    rdfs:label "USPS Office of Inspector General"@en ;
    cacontology-legal:jurisdictionScope "US" ;
    cacontology-usa-leg:acronym "USPS-OIG" .

cacontology-usa-leg:USStateICACtaskForce a owl:Class ;
    rdfs:label "U.S. State ICAC Task Force"@en ;
    rdfs:comment "State-level ICAC Task Force in the United States."@en ;
    rdfs:subClassOf cacontology:ICACtaskForce ;
    cacontology-legal:countryCode "US" ;
    cacontology-legal:isCountrySpecific true ;
    cacontology-legal:jurisdictionScope "US" .

cacontology-usa-leg:USStateLegislature a owl:Class ;
    rdfs:label "U.S. State Legislature"@en ;
    rdfs:comment "Legislative body of a U.S. state."@en ;
    rdfs:subClassOf gufo:Organization,
        uco-identity:Organization ;
    cacontology-legal:countryCode "US" ;
    cacontology-legal:isCountrySpecific true ;
    cacontology-legal:jurisdictionScope "US" .

cacontology-usa-leg:addressedBy a owl:ObjectProperty ;
    rdfs:label "Addressed By"@en ;
    rdfs:comment "Links a funding need to legislation that addresses it."@en ;
    rdfs:domain cacontology-usa-leg:FundingNeed ;
    rdfs:range cacontology-legal:LegislativeInstrument .

cacontology-usa-leg:alignedWithFederalLaw a owl:ObjectProperty ;
    rdfs:label "Aligned With Federal Law"@en ;
    rdfs:comment "U.S. state law aligned with federal legislation."@en ;
    rdfs:domain cacontology-legal:Statute ;
    rdfs:range cacontology-legal:Statute ;
    cacontology-legal:isCountrySpecific true ;
    cacontology-legal:jurisdictionScope "US" .

cacontology-usa-leg:appropriation_enacted a cacontology-usa-leg:Outcome ;
    rdfs:label "Appropriation Enacted"@en ;
    cacontology-usa-leg:isPositive true .

cacontology-usa-leg:bill_failed a cacontology-usa-leg:Outcome ;
    rdfs:label "Bill Failed"@en ;
    cacontology-usa-leg:isPositive false .

cacontology-usa-leg:bill_passed a cacontology-usa-leg:Outcome ;
    rdfs:label "Bill Passed"@en ;
    cacontology-usa-leg:isPositive true .

cacontology-usa-leg:conference a cacontology-usa-leg:LegislativeStage ;
    rdfs:label "In Conference"@en ;
    cacontology-usa-leg:stageOrder 6 .

cacontology-usa-leg:congressionally_directed a cacontology-usa-leg:FundingStream ;
    rdfs:label "Congressionally Directed Spending"@en .

cacontology-usa-leg:continuing_resolution a cacontology-usa-leg:AppropriationType ;
    rdfs:label "Continuing Resolution"@en .

cacontology-usa-leg:enacted a cacontology-usa-leg:LegislativeStage ;
    rdfs:label "Enacted"@en ;
    cacontology-usa-leg:isFinal true ;
    cacontology-usa-leg:stageOrder 7 .

cacontology-usa-leg:expressesFundingNeed a owl:ObjectProperty ;
    rdfs:label "Expresses Funding Need"@en ;
    rdfs:comment "Links a task force to its funding needs."@en ;
    rdfs:domain cacontology:ICACtaskForce ;
    rdfs:range cacontology-usa-leg:FundingNeed .

cacontology-usa-leg:formula_grants a cacontology-usa-leg:FundingStream ;
    rdfs:label "Formula Grants"@en .

cacontology-usa-leg:grant_awarded a cacontology-usa-leg:Outcome ;
    rdfs:label "Grant Awarded"@en ;
    cacontology-usa-leg:isPositive true .

cacontology-usa-leg:hasSubAgency a owl:ObjectProperty ;
    rdfs:label "Has Sub-Agency"@en ;
    rdfs:comment "Links a cabinet agency to its sub-cabinet agencies."@en ;
    rdfs:domain cacontology-usa-leg:USCabinetAgency ;
    rdfs:range uco-identity:Organization ;
    owl:inverseOf cacontology-usa-leg:parentAgency .

cacontology-usa-leg:house_appropriations a cacontology-usa-leg:USCongressionalCommittee ;
    rdfs:label "House Appropriations Committee"@en ;
    cacontology-legal:jurisdictionScope "US" ;
    cacontology-usa-leg:chamber "house" .

cacontology-usa-leg:house_energy_commerce a cacontology-usa-leg:USCongressionalCommittee ;
    rdfs:label "House Energy and Commerce Committee"@en ;
    cacontology-legal:jurisdictionScope "US" ;
    cacontology-usa-leg:chamber "house" .

cacontology-usa-leg:house_judiciary a cacontology-usa-leg:USCongressionalCommittee ;
    rdfs:label "House Judiciary Committee"@en ;
    cacontology-legal:jurisdictionScope "US" ;
    cacontology-usa-leg:chamber "house" .

cacontology-usa-leg:implementsUSModelLaw a owl:ObjectProperty ;
    rdfs:label "Implements U.S. Model Law"@en ;
    rdfs:comment "U.S. state law implementing a model law (e.g., NCSL model)."@en ;
    rdfs:domain cacontology-legal:Statute ;
    rdfs:range cacontology-legal:CSAMModelLaw ;
    cacontology-legal:isCountrySpecific true ;
    cacontology-legal:jurisdictionScope "US" .

cacontology-usa-leg:in_committee a cacontology-usa-leg:LegislativeStage ;
    rdfs:label "In Committee"@en ;
    cacontology-usa-leg:stageOrder 2 .

cacontology-usa-leg:introduced a cacontology-usa-leg:LegislativeStage ;
    rdfs:label "Introduced"@en ;
    cacontology-usa-leg:stageOrder 1 .

cacontology-usa-leg:ojjdp_grants a cacontology-usa-leg:FundingStream ;
    rdfs:label "OJJDP Grants"@en ;
    rdfs:comment "Grants from the Office of Juvenile Justice and Delinquency Prevention."@en .

cacontology-usa-leg:organizationType a owl:DatatypeProperty ;
    rdfs:label "Organization Type"@en ;
    rdfs:comment "Type of organization (federal, state, nonprofit, private)."@en ;
    rdfs:domain uco-identity:Organization ;
    rdfs:range xsd:string .

cacontology-usa-leg:passed_both a cacontology-usa-leg:LegislativeStage ;
    rdfs:label "Passed Both Chambers"@en ;
    cacontology-usa-leg:stageOrder 5 .

cacontology-usa-leg:passed_chamber a cacontology-usa-leg:LegislativeStage ;
    rdfs:label "Passed Chamber"@en ;
    cacontology-usa-leg:stageOrder 4 .

cacontology-usa-leg:regular_appropriation a cacontology-usa-leg:AppropriationType ;
    rdfs:label "Regular Appropriation"@en .

cacontology-usa-leg:reported a cacontology-usa-leg:LegislativeStage ;
    rdfs:label "Reported from Committee"@en ;
    cacontology-usa-leg:stageOrder 3 .

cacontology-usa-leg:senate_appropriations a cacontology-usa-leg:USCongressionalCommittee ;
    rdfs:label "Senate Appropriations Committee"@en ;
    cacontology-legal:jurisdictionScope "US" ;
    cacontology-usa-leg:chamber "senate" .

cacontology-usa-leg:senate_commerce a cacontology-usa-leg:USCongressionalCommittee ;
    rdfs:label "Senate Commerce Committee"@en ;
    cacontology-legal:jurisdictionScope "US" ;
    cacontology-usa-leg:chamber "senate" .

cacontology-usa-leg:senate_judiciary a cacontology-usa-leg:USCongressionalCommittee ;
    rdfs:label "Senate Judiciary Committee"@en ;
    cacontology-legal:jurisdictionScope "US" ;
    cacontology-usa-leg:chamber "senate" .

cacontology-usa-leg:servesOn a owl:ObjectProperty ;
    rdfs:label "Serves On"@en ;
    rdfs:comment "Links a legislator to committees they serve on."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range cacontology-usa-leg:USCongressionalCommittee ;
    cacontology-legal:jurisdictionScope "US" .

cacontology-usa-leg:state_appropriations a cacontology-usa-leg:FundingStream ;
    rdfs:label "State Appropriations"@en .

cacontology-usa-leg:supplemental_appropriation a cacontology-usa-leg:AppropriationType ;
    rdfs:label "Supplemental Appropriation"@en .

cacontology-usa-leg:usStateFederalHarmonization a owl:DatatypeProperty ;
    rdfs:label "U.S. State-Federal Harmonization Level"@en ;
    rdfs:comment "Level of harmonization between state and federal law (full, partial, none)."@en ;
    rdfs:domain cacontology-multi:Jurisdiction ;
    rdfs:range xsd:string ;
    cacontology-legal:isCountrySpecific true ;
    cacontology-legal:jurisdictionScope "US" .

cacontology-usa-leg:vetoed a cacontology-usa-leg:LegislativeStage ;
    rdfs:label "Vetoed"@en ;
    cacontology-usa-leg:isFinal true ;
    cacontology-usa-leg:stageOrder 7 .

cacontology-usa-leg-shapes:AppropriationTypeShape a sh:NodeShape ;
    rdfs:label "Appropriation Type Shape"@en ;
    rdfs:comment "Validates appropriation type instances."@en ;
    sh:property [ sh:datatype rdf:langString ;
            sh:message "Appropriation type must have a label"@en ;
            sh:minCount 1 ;
            sh:path rdfs:label ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-usa-leg:AppropriationType .

cacontology-usa-leg-shapes:FundingNeedShape a sh:NodeShape ;
    rdfs:label "Funding Need Shape"@en ;
    rdfs:comment "Validates funding need instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:message "Funding need should have a description (at least 10 characters)"@en ;
            sh:minCount 1 ;
            sh:minLength 10 ;
            sh:path cacontology-usa-leg:needDescription ;
            sh:severity sh:Warning ],
        [ sh:datatype xsd:decimal ;
            sh:message "Funding need should have a positive requested amount"@en ;
            sh:minCount 1 ;
            sh:minExclusive 0 ;
            sh:path cacontology-usa-leg:requestedAmount ;
            sh:severity sh:Warning ],
        [ sh:datatype xsd:string ;
            sh:in ( "low" "medium" "high" "urgent" "critical" ) ;
            sh:maxCount 1 ;
            sh:message "Priority level should be one of: low, medium, high, urgent, critical"@en ;
            sh:path cacontology-usa-leg:priorityLevel ;
            sh:severity sh:Info ] ;
    sh:targetClass cacontology-usa-leg:FundingNeed .

cacontology-usa-leg-shapes:LegislativeStageOrderingShape a sh:NodeShape ;
    rdfs:label "Legislative Stage Ordering Shape"@en ;
    rdfs:comment "Validates proper ordering of legislative stages."@en ;
    sh:sparql [ sh:message "Final stages should have the highest stage order"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/usa-legislative#"^^xsd:anyURI ;
                            sh:prefix "cacontology-usa-leg" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-usa-leg:isFinal true .
                $this cacontology-usa-leg:stageOrder ?order .
                FILTER (?order < 6)
            }
        """ ;
            sh:severity sh:Warning ] ;
    sh:targetClass cacontology-usa-leg:LegislativeStage .

cacontology-usa-leg-shapes:LegislativeStageShape a sh:NodeShape ;
    rdfs:label "Legislative Stage Shape"@en ;
    rdfs:comment "Validates U.S. legislative stage instances as gUFO Phases."@en ;
    sh:property [ sh:datatype xsd:integer ;
            sh:maxCount 1 ;
            sh:maxInclusive 10 ;
            sh:message "Legislative stage should have a stage order (1-10)"@en ;
            sh:minCount 1 ;
            sh:minInclusive 1 ;
            sh:path cacontology-usa-leg:stageOrder ;
            sh:severity sh:Warning ],
        [ sh:datatype rdf:langString ;
            sh:message "Legislative stage must have a label"@en ;
            sh:minCount 1 ;
            sh:path rdfs:label ;
            sh:severity sh:Violation ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Legislative stage may indicate if it is a final stage"@en ;
            sh:path cacontology-usa-leg:isFinal ;
            sh:severity sh:Info ] ;
    sh:targetClass cacontology-usa-leg:LegislativeStage .

cacontology-usa-leg-shapes:OrganizationHierarchyConsistencyShape a sh:NodeShape ;
    rdfs:label "Organization Hierarchy Consistency Shape"@en ;
    rdfs:comment "Validates that organization hierarchy is consistent."@en ;
    sh:sparql [ sh:message "Organization cannot be its own parent"@en ;
            sh:prefixes [ sh:declare [ sh:namespace "https://cacontology.projectvic.org/usa-legislative#"^^xsd:anyURI ;
                            sh:prefix "cacontology-usa-leg" ] ] ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-usa-leg:parentAgency $this .
            }
        """ ;
            sh:severity sh:Violation ] ;
    sh:targetSubjectsOf cacontology-usa-leg:parentAgency .

cacontology-usa-leg-shapes:OutcomeShape a sh:NodeShape ;
    rdfs:label "Outcome Shape"@en ;
    rdfs:comment "Validates advocacy outcome instances."@en ;
    sh:property [ sh:datatype rdf:langString ;
            sh:message "Outcome must have a label"@en ;
            sh:minCount 1 ;
            sh:path rdfs:label ;
            sh:severity sh:Violation ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Outcome should indicate if it is positive"@en ;
            sh:minCount 1 ;
            sh:path cacontology-usa-leg:isPositive ;
            sh:severity sh:Warning ] ;
    sh:targetClass cacontology-usa-leg:Outcome .

cacontology-usa-leg-shapes:USCabinetAgencyShape a sh:NodeShape ;
    rdfs:label "U.S. Cabinet Agency Shape"@en ;
    rdfs:comment "Validates U.S. cabinet-level agency instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 10 ;
            sh:message "Cabinet agency should have an acronym (2-10 characters)"@en ;
            sh:minCount 1 ;
            sh:minLength 2 ;
            sh:path cacontology-usa-leg:acronym ;
            sh:severity sh:Warning ],
        [ sh:datatype rdf:langString ;
            sh:message "Cabinet agency must have a label"@en ;
            sh:minCount 1 ;
            sh:path rdfs:label ;
            sh:severity sh:Violation ],
        [ sh:hasValue "US" ;
            sh:message "Cabinet agency should have jurisdiction scope 'US'"@en ;
            sh:minCount 1 ;
            sh:path cacontology-legal:jurisdictionScope ;
            sh:severity sh:Warning ] ;
    sh:targetClass cacontology-usa-leg:USCabinetAgency .

cacontology-usa-leg-shapes:USConferenceCommitteeShape a sh:NodeShape ;
    rdfs:label "U.S. Conference Committee Shape"@en ;
    sh:property [ sh:hasValue gufo:EventType ;
            sh:message "Conference committee process must be classified as gUFO EventType"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-usa-leg:USConferenceCommittee .

cacontology-usa-leg-shapes:USCongressionalCommitteeShape a sh:NodeShape ;
    rdfs:label "U.S. Congressional Committee Shape"@en ;
    rdfs:comment "Validates U.S. congressional committee instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "house" "senate" ) ;
            sh:maxCount 1 ;
            sh:message "Congressional committee must specify chamber (house or senate)"@en ;
            sh:minCount 1 ;
            sh:path cacontology-usa-leg:chamber ;
            sh:severity sh:Violation ],
        [ sh:datatype rdf:langString ;
            sh:message "Congressional committee must have a label"@en ;
            sh:minCount 1 ;
            sh:path rdfs:label ;
            sh:severity sh:Violation ],
        [ sh:hasValue "US" ;
            sh:message "Congressional committee should have jurisdiction scope 'US'"@en ;
            sh:minCount 1 ;
            sh:path cacontology-legal:jurisdictionScope ;
            sh:severity sh:Warning ] ;
    sh:targetClass cacontology-usa-leg:USCongressionalCommittee .

cacontology-usa-leg-shapes:USExecutiveActionShape a sh:NodeShape ;
    rdfs:label "U.S. Executive Action Shape"@en ;
    sh:property [ sh:hasValue gufo:EventType ;
            sh:message "Executive action must be classified as gUFO EventType"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-usa-leg:USExecutiveAction .

cacontology-usa-leg-shapes:USFederalAgencyOfficeShape a sh:NodeShape ;
    rdfs:label "U.S. Federal Agency Office Shape"@en ;
    rdfs:comment "Validates U.S. federal agency office instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:message "Federal agency office should have an acronym"@en ;
            sh:minCount 1 ;
            sh:path cacontology-usa-leg:acronym ;
            sh:severity sh:Warning ],
        [ sh:maxCount 1 ;
            sh:message "Federal agency office must have exactly one parent agency"@en ;
            sh:minCount 1 ;
            sh:or ( [ sh:class cacontology-usa-leg:USCabinetAgency ] [ sh:class cacontology-usa-leg:USSubCabinetAgency ] ) ;
            sh:path cacontology-usa-leg:parentAgency ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-usa-leg:USFederalAgencyOffice .

cacontology-usa-leg-shapes:USFederalDirectorateShape a sh:NodeShape ;
    rdfs:label "U.S. Federal Directorate Shape"@en ;
    rdfs:comment "Validates U.S. federal directorate instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:message "Federal directorate should have an acronym"@en ;
            sh:minCount 1 ;
            sh:path cacontology-usa-leg:acronym ;
            sh:severity sh:Warning ],
        [ sh:class cacontology-usa-leg:USSubCabinetAgency ;
            sh:maxCount 1 ;
            sh:message "Federal directorate must have exactly one parent sub-cabinet agency"@en ;
            sh:minCount 1 ;
            sh:path cacontology-usa-leg:parentAgency ;
            sh:severity sh:Violation ],
        [ sh:datatype rdf:langString ;
            sh:message "Federal directorate must have a label"@en ;
            sh:minCount 1 ;
            sh:path rdfs:label ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-usa-leg:USFederalDirectorate .

cacontology-usa-leg-shapes:USReconciliationShape a sh:NodeShape ;
    rdfs:label "U.S. Budget Reconciliation Shape"@en ;
    sh:property [ sh:hasValue gufo:EventType ;
            sh:message "Budget reconciliation must be classified as gUFO EventType"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-usa-leg:USReconciliation .

cacontology-usa-leg-shapes:USRulemakingProcessShape a sh:NodeShape ;
    rdfs:label "U.S. Rulemaking Process Shape"@en ;
    sh:property [ sh:hasValue gufo:EventType ;
            sh:message "Rulemaking process must be classified as gUFO EventType"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-usa-leg:USRulemakingProcess .

cacontology-usa-leg-shapes:USStateAgencyShape a sh:NodeShape ;
    rdfs:label "U.S. State Agency Shape"@en ;
    rdfs:comment "Validates U.S. state agency instances."@en ;
    sh:property [ sh:datatype rdf:langString ;
            sh:message "State agency must have a label"@en ;
            sh:minCount 1 ;
            sh:path rdfs:label ;
            sh:severity sh:Violation ],
        [ sh:hasValue "US" ;
            sh:message "State agency should have jurisdiction scope 'US'"@en ;
            sh:minCount 1 ;
            sh:path cacontology-legal:jurisdictionScope ;
            sh:severity sh:Warning ] ;
    sh:targetClass cacontology-usa-leg:USStateAgency .

cacontology-usa-leg-shapes:USStateAttorneyGeneralShape a sh:NodeShape ;
    rdfs:label "U.S. State Attorney General Shape"@en ;
    rdfs:comment "Validates U.S. state attorney general office instances."@en ;
    sh:property [ sh:datatype rdf:langString ;
            sh:message "State Attorney General office must have a label"@en ;
            sh:minCount 1 ;
            sh:path rdfs:label ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-usa-leg:USStateAttorneyGeneral .

cacontology-usa-leg-shapes:USSubCabinetAgencyShape a sh:NodeShape ;
    rdfs:label "U.S. Sub-Cabinet Agency Shape"@en ;
    rdfs:comment "Validates U.S. sub-cabinet agency instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:message "Sub-cabinet agency should have an acronym"@en ;
            sh:minCount 1 ;
            sh:path cacontology-usa-leg:acronym ;
            sh:severity sh:Warning ],
        [ sh:class cacontology-usa-leg:USCabinetAgency ;
            sh:maxCount 1 ;
            sh:message "Sub-cabinet agency must have exactly one parent cabinet agency"@en ;
            sh:minCount 1 ;
            sh:path cacontology-usa-leg:parentAgency ;
            sh:severity sh:Violation ],
        [ sh:datatype rdf:langString ;
            sh:message "Sub-cabinet agency must have a label"@en ;
            sh:minCount 1 ;
            sh:path rdfs:label ;
            sh:severity sh:Violation ] ;
    sh:targetClass cacontology-usa-leg:USSubCabinetAgency .

cacontology-impact:AcuteImpactPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Acute Impact Phase"@en ;
    rdfs:comment "Immediate phase following victimization with acute psychological impact."@en ;
    rdfs:subClassOf cacontology-impact:VictimImpactAssessment .

cacontology-impact:AcuteTrauma a owl:Class ;
    rdfs:label "Acute Trauma"@en ;
    rdfs:comment "Immediate psychological trauma following victimization."@en ;
    rdfs:subClassOf cacontology-impact:PsychologicalHarm .

cacontology-impact:AddressesHarmShape a sh:PropertyShape ;
    sh:class cacontology-impact:PsychologicalHarm ;
    sh:description "Links intervention to harm being addressed" ;
    sh:minCount 0 ;
    sh:name "addresses harm" ;
    sh:path cacontology-impact:addressesHarm .

cacontology-impact:AssessesVictimShape a sh:PropertyShape ;
    sh:class uco-identity:Person ;
    sh:description "Links assessment to victim being assessed" ;
    sh:maxCount 1 ;
    sh:minCount 1 ;
    sh:name "assesses victim" ;
    sh:path cacontology-impact:assessesVictim .

cacontology-impact:AssessmentDateValidationShape a sh:NodeShape ;
    rdfs:label "Assessment Date Validation Shape"@en ;
    rdfs:comment "Validates assessment date consistency."@en ;
    sh:sparql [ sh:message "Assessment date should not be in the future."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-impact:assessmentDate ?date .
                FILTER (?date > NOW())
            }
        """ ] ;
    sh:targetClass cacontology-impact:VictimImpactAssessment .

cacontology-impact:BehavioralIndicator a owl:Class ;
    rdfs:label "Behavioral Indicator"@en ;
    rdfs:comment "Changes in behavior that indicate trauma or distress."@en ;
    rdfs:subClassOf cacontology-impact:TraumaIndicator .

cacontology-impact:ChildExploitationTaskForce a owl:Class ;
    rdfs:label "Child Exploitation Task Force"@en ;
    rdfs:comment "Joint task force between FBI and local law enforcement for child exploitation cases."@en ;
    rdfs:subClassOf uco-identity:Organization .

cacontology-impact:ChronicTrauma a owl:Class ;
    rdfs:label "Chronic Trauma"@en ;
    rdfs:comment "Long-term psychological trauma from prolonged or repeated victimization."@en ;
    rdfs:subClassOf cacontology-impact:PsychologicalHarm .

cacontology-impact:CognitiveBehavioralTherapy a owl:Class ;
    rdfs:label "Cognitive Behavioral Therapy"@en ;
    rdfs:comment "CBT-based therapeutic intervention for trauma and behavioral issues."@en ;
    rdfs:subClassOf cacontology-impact:TherapeuticIntervention .

cacontology-impact:CognitiveIndicator a owl:Class ;
    rdfs:label "Cognitive Indicator"@en ;
    rdfs:comment "Changes in thinking, memory, or learning ability due to trauma."@en ;
    rdfs:subClassOf cacontology-impact:TraumaIndicator .

cacontology-impact:CommunitySupport a owl:Class ;
    rdfs:label "Community Support"@en ;
    rdfs:comment "Community-based support services for trafficking victims during reintegration."@en ;
    rdfs:subClassOf cacontology-impact:VictimSupport .

cacontology-impact:ComplexTraumaShape a sh:NodeShape ;
    rdfs:label "Complex Trauma Shape"@en ;
    rdfs:comment "Validation shape for complex trauma instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "complex" "developmental" "relational" "attachment" "chronic" "repeated" ) ;
            sh:maxCount 1 ;
            sh:message "Complex trauma must specify trauma type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-impact:traumaType ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Complex trauma must specify if there is developmental impact."@en ;
            sh:minCount 1 ;
            sh:path cacontology-impact:developmentalImpact ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Complex trauma may specify attachment disruption."@en ;
            sh:minCount 0 ;
            sh:path cacontology-impact:attachmentDisruption ] ;
    sh:targetClass cacontology-impact:ComplexTrauma .

cacontology-impact:ComprehensiveImpactAssessmentShape a sh:NodeShape ;
    rdfs:label "Comprehensive Impact Assessment Shape"@en ;
    rdfs:comment "Validation shape for comprehensive impact assessment instances."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 10 ;
            sh:message "Comprehensive assessment must cover between 3 and 10 assessment domains."@en ;
            sh:minCount 1 ;
            sh:minInclusive 3 ;
            sh:path cacontology-impact:assessmentDomains ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Comprehensive assessment must specify if standardized instruments are used."@en ;
            sh:minCount 1 ;
            sh:path cacontology-impact:standardizedInstruments ] ;
    sh:targetClass cacontology-impact:ComprehensiveImpactAssessment .

cacontology-impact:CrisisIntervention a owl:Class ;
    rdfs:label "Crisis Intervention"@en ;
    rdfs:comment "Immediate therapeutic intervention for acute crisis situations."@en ;
    rdfs:subClassOf cacontology-impact:TherapeuticIntervention .

cacontology-impact:DataQualityShape a sh:NodeShape ;
    rdfs:label "Data Quality Shape"@en ;
    rdfs:comment "Validates data quality for victim impact assessments."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Label should be between 5 and 200 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 5 ;
            sh:path rdfs:label ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 1000 ;
            sh:message "Comment should be between 10 and 1000 characters when provided."@en ;
            sh:minCount 0 ;
            sh:minLength 10 ;
            sh:path rdfs:comment ] ;
    sh:targetClass cacontology-impact:VictimImpactAssessment .

cacontology-impact:DevelopmentalImpactShape a sh:NodeShape ;
    rdfs:label "Developmental Impact Shape"@en ;
    rdfs:comment "Validation shape for developmental impact instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "cognitive" "emotional" "social" "physical" "language" "motor" "adaptive" "academic" ) ;
            sh:maxCount 1 ;
            sh:message "Developmental impact must specify developmental domain from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-impact:developmentalDomain ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 18 ;
            sh:message "Age at impact must be between 0 and 18 years."@en ;
            sh:minCount 1 ;
            sh:minInclusive 0 ;
            sh:path cacontology-impact:ageAtImpact ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Developmental impact may specify developmental delay."@en ;
            sh:minCount 0 ;
            sh:path cacontology-impact:developmentalDelay ] ;
    sh:targetClass cacontology-impact:DevelopmentalImpact .

cacontology-impact:EducationalSupport a owl:Class ;
    rdfs:label "Educational Support"@en ;
    rdfs:comment "Educational accommodations and support for victim's schooling."@en ;
    rdfs:subClassOf cacontology-impact:VictimSupport .

cacontology-impact:EmotionalIndicator a owl:Class ;
    rdfs:label "Emotional Indicator"@en ;
    rdfs:comment "Emotional symptoms or reactions indicating trauma."@en ;
    rdfs:subClassOf cacontology-impact:TraumaIndicator .

cacontology-impact:FamilyTherapy a owl:Class ;
    rdfs:label "Family Therapy"@en ;
    rdfs:comment "Therapeutic intervention involving the victim's family."@en ;
    rdfs:subClassOf cacontology-impact:TherapeuticIntervention .

cacontology-impact:FearlessHudsonValleySupport a owl:Class ;
    rdfs:label "Fearless Hudson Valley Support"@en ;
    rdfs:comment "Support services provided by Fearless! Hudson Valley organization for trafficking victims."@en ;
    rdfs:subClassOf cacontology-impact:VictimSupport .

cacontology-impact:GroupTherapy a owl:Class ;
    rdfs:label "Group Therapy"@en ;
    rdfs:comment "Therapeutic intervention conducted in group settings with other victims."@en ;
    rdfs:subClassOf cacontology-impact:TherapeuticIntervention .

cacontology-impact:HumanTraffickingSquad a owl:Class ;
    rdfs:label "Human Trafficking Squad"@en ;
    rdfs:comment "Specialized law enforcement unit focused on human trafficking investigations."@en ;
    rdfs:subClassOf uco-identity:Organization .

cacontology-impact:IdentifiesHarmShape a sh:PropertyShape ;
    sh:class cacontology-impact:PsychologicalHarm ;
    sh:description "Links assessment to psychological harm identified" ;
    sh:minCount 0 ;
    sh:name "identifies harm" ;
    sh:path cacontology-impact:identifiesHarm .

cacontology-impact:ImpactCrossReferenceShape a sh:NodeShape ;
    rdfs:label "Impact Cross Reference Shape"@en ;
    rdfs:comment "Validates cross-references between impact assessment and related entities."@en ;
    sh:sparql [ sh:message "Victim impact assessment must assess at least one victim."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-impact:VictimImpactAssessment .
                FILTER NOT EXISTS {
                    $this cacontology-impact:assessesVictim ?victim .
                }
            }
        """ ] ;
    sh:targetClass cacontology-impact:VictimImpactAssessment .

cacontology-impact:InitialImpactAssessment a owl:Class ;
    rdfs:label "Initial Impact Assessment"@en ;
    rdfs:comment "Initial evaluation of victim impact conducted early in investigation."@en ;
    rdfs:subClassOf cacontology-impact:VictimImpactAssessment .

cacontology-impact:InterventionHarmAlignmentShape a sh:NodeShape ;
    rdfs:label "Intervention Harm Alignment Shape"@en ;
    rdfs:comment "Validates alignment between intervention and harm addressed."@en ;
    sh:sparql [ sh:message "Trauma therapy should address trauma-related harm."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this a cacontology-impact:TraumaTherapy ;
                      cacontology-impact:addressesHarm ?harm .
                ?harm cacontology-impact:harmType ?type .
                FILTER (?type NOT IN ("trauma", "ptsd", "complex_trauma"))
            }
        """ ] ;
    sh:targetClass cacontology-impact:TherapeuticIntervention .

cacontology-impact:LegalSupport a owl:Class ;
    rdfs:label "Legal Support"@en ;
    rdfs:comment "Legal assistance and representation for victims in proceedings."@en ;
    rdfs:subClassOf cacontology-impact:VictimSupport .

cacontology-impact:LongTermEffectShape a sh:NodeShape ;
    rdfs:label "Long Term Effect Shape"@en ;
    rdfs:comment "Validation shape for long-term effect instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "psychological" "behavioral" "social" "academic" "occupational" "relational" "physical" "developmental" ) ;
            sh:maxCount 1 ;
            sh:message "Long-term effect must specify effect type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-impact:effectType ],
        [ sh:datatype xsd:string ;
            sh:in ( "minimal" "mild" "moderate" "severe" "extreme" "life_altering" ) ;
            sh:maxCount 1 ;
            sh:message "Long-term effect must specify severity from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-impact:effectSeverity ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 50.0 ;
            sh:message "Effect duration must be between 1 and 50 years."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1.0 ;
            sh:path cacontology-impact:effectDuration ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Long-term effect may specify functional impairment."@en ;
            sh:minCount 0 ;
            sh:path cacontology-impact:functionalImpairment ] ;
    sh:targetClass cacontology-impact:LongTermEffect .

cacontology-impact:LongTermMonitoringPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Long Term Monitoring Phase"@en ;
    rdfs:comment "Extended phase monitoring long-term effects and continued support needs."@en ;
    rdfs:subClassOf cacontology-impact:VictimImpactAssessment .

cacontology-impact:ManifestsAsShape a sh:PropertyShape ;
    sh:class cacontology-impact:TraumaIndicator ;
    sh:description "Links harm to trauma indicators" ;
    sh:minCount 0 ;
    sh:name "manifests as" ;
    sh:path cacontology-impact:manifestsAs .

cacontology-impact:MedicalTraumaAssessment a owl:Class ;
    rdfs:label "Medical Trauma Assessment"@en ;
    rdfs:comment "Medical assessment of physical and psychological trauma in trafficking victims."@en ;
    rdfs:subClassOf cacontology-impact:VictimImpactAssessment .

cacontology-impact:OngoingImpactMonitoring a owl:Class ;
    rdfs:label "Ongoing Impact Monitoring"@en ;
    rdfs:comment "Continuous monitoring of victim impact during investigation and recovery."@en ;
    rdfs:subClassOf cacontology-impact:VictimImpactAssessment .

cacontology-impact:PhysicalIndicator a owl:Class ;
    rdfs:label "Physical Indicator"@en ;
    rdfs:comment "Physical symptoms or manifestations of psychological trauma."@en ;
    rdfs:subClassOf cacontology-impact:TraumaIndicator .

cacontology-impact:PortAuthorityYouthServices a owl:Class ;
    rdfs:label "Port Authority Youth Services"@en ;
    rdfs:comment "Specialized youth services unit within Port Authority Police Department."@en ;
    rdfs:subClassOf uco-identity:Organization .

cacontology-impact:PsychologicalHarmShape a sh:NodeShape ;
    rdfs:label "Psychological Harm Shape"@en ;
    rdfs:comment "Validation shape for psychological harm instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "trauma" "anxiety" "depression" "ptsd" "complex_trauma" "behavioral_changes" "emotional_dysregulation" "attachment_disruption" ) ;
            sh:maxCount 1 ;
            sh:message "Psychological harm must specify harm type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-impact:harmType ],
        [ sh:datatype xsd:string ;
            sh:in ( "mild" "moderate" "severe" "extreme" "debilitating" "life_threatening" ) ;
            sh:maxCount 1 ;
            sh:message "Psychological harm must specify severity from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-impact:severity ],
        [ sh:datatype xsd:string ;
            sh:in ( "immediate" "delayed" "gradual" "episodic" "chronic" "progressive" ) ;
            sh:maxCount 1 ;
            sh:message "Onset timing must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-impact:onsetTiming ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 20.0 ;
            sh:message "Harm duration must be between 0 and 20 years."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-impact:duration ] ;
    sh:targetClass cacontology-impact:PsychologicalHarm .

cacontology-impact:RecoveryPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Recovery Phase"@en ;
    rdfs:comment "Phase focused on healing and therapeutic intervention."@en ;
    rdfs:subClassOf cacontology-impact:VictimImpactAssessment .

cacontology-impact:RecoveryProcessShape a sh:NodeShape ;
    rdfs:label "Recovery Process Shape"@en ;
    rdfs:comment "Validation shape for recovery process instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "crisis" "stabilization" "processing" "integration" "growth" "maintenance" "relapse_prevention" ) ;
            sh:maxCount 1 ;
            sh:message "Recovery process must specify recovery stage from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-impact:recoveryStage ],
        [ sh:datatype xsd:string ;
            sh:in ( "declining" "stable" "slow_progress" "steady_progress" "rapid_progress" "complete_recovery" ) ;
            sh:maxCount 1 ;
            sh:message "Recovery process must specify recovery progress from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-impact:recoveryProgress ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 10.0 ;
            sh:message "Time in recovery must be between 0 and 10 years."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-impact:timeInRecovery ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 20 ;
            sh:message "Recovery milestones must be between 0 and 20."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0 ;
            sh:path cacontology-impact:recoveryMilestones ] ;
    sh:targetClass cacontology-impact:RecoveryProcess .

cacontology-impact:RecoveryProgressValidationShape a sh:NodeShape ;
    rdfs:label "Recovery Progress Validation Shape"@en ;
    rdfs:comment "Validates recovery progress consistency."@en ;
    sh:sparql [ sh:message "Complete recovery should have significant time in recovery."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this cacontology-impact:recoveryProgress "complete_recovery" ;
                      cacontology-impact:timeInRecovery ?time .
                FILTER (?time < 1.0)
            }
        """ ] ;
    sh:targetClass cacontology-impact:RecoveryProcess .

cacontology-impact:ReintegrationPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Reintegration Phase"@en ;
    rdfs:comment "Phase involving return to normal activities and social reintegration."@en ;
    rdfs:subClassOf cacontology-impact:VictimImpactAssessment .

cacontology-impact:ResilienceFactorShape a sh:NodeShape ;
    rdfs:label "Resilience Factor Shape"@en ;
    rdfs:comment "Validation shape for resilience factor instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "individual" "family" "social" "community" "cultural" "spiritual" "environmental" "protective" ) ;
            sh:maxCount 1 ;
            sh:message "Resilience factor must specify factor type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-impact:factorType ],
        [ sh:datatype xsd:string ;
            sh:in ( "weak" "moderate" "strong" "very_strong" "exceptional" ) ;
            sh:maxCount 1 ;
            sh:message "Resilience factor must specify factor strength from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-impact:factorStrength ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 1.0 ;
            sh:message "Protective value must be between 0.0 and 1.0."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.0 ;
            sh:path cacontology-impact:protectiveValue ] ;
    sh:targetClass cacontology-impact:ResilienceFactor .

cacontology-impact:ResilienceFactors a owl:Class ;
    rdfs:label "Resilience Factors"@en ;
    rdfs:comment "Protective factors that promote victim resilience and recovery."@en ;
    rdfs:subClassOf gufo:IntrinsicMoment,
        uco-observable:ObservableObject .

cacontology-impact:ResultsInOutcomeShape a sh:PropertyShape ;
    sh:class cacontology-impact:TreatmentOutcome ;
    sh:description "Links intervention to treatment outcome" ;
    sh:minCount 0 ;
    sh:name "results in outcome" ;
    sh:path cacontology-impact:resultsInOutcome .

cacontology-impact:SafetyPlanning a owl:Class ;
    rdfs:label "Safety Planning"@en ;
    rdfs:comment "Development of safety plans to protect victims from further harm."@en ;
    rdfs:subClassOf cacontology-impact:VictimSupport .

cacontology-impact:SocialIndicator a owl:Class ;
    rdfs:label "Social Indicator"@en ;
    rdfs:comment "Changes in social behavior or relationships due to trauma."@en ;
    rdfs:subClassOf cacontology-impact:TraumaIndicator .

cacontology-impact:SuicidalIdeationResponse a owl:Class ;
    rdfs:label "Suicidal Ideation Response"@en ;
    rdfs:comment "Emergency response to trafficking victim reporting suicidal thoughts or intentions."@en ;
    rdfs:subClassOf cacontology-impact:EmergencyResponse .

cacontology-impact:SupportServiceShape a sh:NodeShape ;
    rdfs:label "Support Service Shape"@en ;
    rdfs:comment "Validation shape for support service instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "victim_advocacy" "case_management" "crisis_intervention" "legal_support" "educational_support" "peer_support" "family_support" "financial_assistance" ) ;
            sh:maxCount 1 ;
            sh:message "Support service must specify service type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-impact:serviceType ],
        [ sh:datatype xsd:string ;
            sh:in ( "victim_services" "nonprofit_organization" "government_agency" "healthcare_system" "educational_institution" "faith_based" "community_organization" ) ;
            sh:maxCount 1 ;
            sh:message "Support service must specify service provider from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-impact:serviceProvider ],
        [ sh:datatype xsd:string ;
            sh:in ( "minimal" "low" "moderate" "intensive" "crisis_level" "ongoing" ) ;
            sh:maxCount 1 ;
            sh:message "Service intensity must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-impact:serviceIntensity ] ;
    sh:targetClass cacontology-impact:SupportService .

cacontology-impact:SupportsRecoveryShape a sh:PropertyShape ;
    sh:class cacontology-impact:RecoveryProcess ;
    sh:description "Links intervention to recovery process supported" ;
    sh:minCount 0 ;
    sh:name "supports recovery" ;
    sh:path cacontology-impact:supportsRecovery .

cacontology-impact:TemporalValidationShape a sh:NodeShape ;
    rdfs:label "Temporal Validation Shape"@en ;
    rdfs:comment "Validates temporal consistency in therapeutic interventions."@en ;
    sh:sparql [ sh:message "Start time must be before end time when both are specified."@en ;
            sh:select """
            SELECT $this
            WHERE {
                $this uco-core:startTime ?start ;
                      uco-core:endTime ?end .
                FILTER (?start >= ?end)
            }
        """ ] ;
    sh:targetClass cacontology-impact:TherapeuticIntervention .

cacontology-impact:TherapeuticInterventionShape a sh:NodeShape ;
    rdfs:label "Therapeutic Intervention Shape"@en ;
    rdfs:comment "Validation shape for therapeutic intervention instances."@en ;
    sh:property [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxCount 1 ;
            sh:maxInclusive 200 ;
            sh:message "Session count must be between 1 and 200 when specified."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1 ;
            sh:path cacontology-impact:sessionCount ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 104.0 ;
            sh:message "Treatment duration must be between 1 and 104 weeks."@en ;
            sh:minCount 0 ;
            sh:minInclusive 1.0 ;
            sh:path cacontology-impact:treatmentDuration ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Therapeutic intervention may have a start time."@en ;
            sh:minCount 0 ;
            sh:path uco-core:startTime ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Therapeutic intervention may have an end time."@en ;
            sh:minCount 0 ;
            sh:path uco-core:endTime ],
        [ sh:datatype xsd:string ;
            sh:in ( "individual_therapy" "group_therapy" "family_therapy" "trauma_therapy" "cognitive_behavioral" "play_therapy" "art_therapy" "emdr" ) ;
            sh:maxCount 1 ;
            sh:message "Therapeutic intervention must specify intervention type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-impact:interventionType ],
        [ sh:datatype xsd:string ;
            sh:in ( "CBT" "TF_CBT" "EMDR" "DBT" "play_therapy" "narrative_therapy" "somatic_therapy" "psychodynamic" ) ;
            sh:maxCount 1 ;
            sh:message "Therapeutic intervention must specify treatment modality from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-impact:treatmentModality ] ;
    sh:targetClass cacontology-impact:TherapeuticIntervention .

cacontology-impact:TherapistRole a gufo:Role,
        owl:Class ;
    rdfs:label "Therapist Role"@en ;
    rdfs:comment "Role of mental health professional providing therapeutic services."@en ;
    rdfs:subClassOf uco-role:Role .

cacontology-impact:TherapyParticipant a gufo:Role,
        owl:Class ;
    rdfs:label "Therapy Participant"@en ;
    rdfs:comment "Role of victim participating in therapeutic interventions."@en ;
    rdfs:subClassOf uco-role:Role .

cacontology-impact:TraffickerControlBarrier a owl:Class ;
    rdfs:label "Trafficker Control Barrier"@en ;
    rdfs:comment "Control mechanisms used by traffickers that prevent victims from seeking help."@en ;
    rdfs:subClassOf cacontology-impact:HelpSeekingBarrier .

cacontology-impact:TraumaIndicatorShape a sh:NodeShape ;
    rdfs:label "Trauma Indicator Shape"@en ;
    rdfs:comment "Validation shape for trauma indicator instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "behavioral" "emotional" "cognitive" "physical" "social" "developmental" "academic" "relational" ) ;
            sh:maxCount 1 ;
            sh:message "Trauma indicator must specify indicator type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-impact:indicatorType ],
        [ sh:datatype xsd:string ;
            sh:in ( "mild" "moderate" "severe" "extreme" "critical" ) ;
            sh:maxCount 1 ;
            sh:message "Trauma indicator must specify severity from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-impact:indicatorSeverity ],
        [ sh:datatype xsd:string ;
            sh:in ( "rare" "occasional" "frequent" "daily" "constant" "episodic" ) ;
            sh:maxCount 1 ;
            sh:message "Indicator frequency must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-impact:frequency ] ;
    sh:targetClass cacontology-impact:TraumaIndicator .

cacontology-impact:TraumaTherapyShape a sh:NodeShape ;
    rdfs:label "Trauma Therapy Shape"@en ;
    rdfs:comment "Validation shape for trauma therapy instances."@en ;
    sh:property [ sh:datatype xsd:boolean ;
            sh:hasValue true ;
            sh:maxCount 1 ;
            sh:message "Trauma therapy must be trauma-focused."@en ;
            sh:minCount 1 ;
            sh:path cacontology-impact:traumaFocused ],
        [ sh:datatype xsd:boolean ;
            sh:maxCount 1 ;
            sh:message "Trauma therapy must specify if it is evidence-based."@en ;
            sh:minCount 1 ;
            sh:path cacontology-impact:evidenceBased ] ;
    sh:targetClass cacontology-impact:TraumaTherapy .

cacontology-impact:TraumatizedVictim a gufo:Role,
        owl:Class ;
    rdfs:label "Traumatized Victim"@en ;
    rdfs:comment "Role of a child victim experiencing psychological trauma. Where age at time of victimization or at time of assessment is analytically relevant, that age SHOULD be expressed via cacontology-temporal:AgeAtTimeSituation rather than ad-hoc age literals."@en ;
    rdfs:subClassOf uco-role:VictimRole ;
    owl:equivalentClass cacontology-gufo:VictimRole .

cacontology-impact:TreatmentOutcomeShape a sh:NodeShape ;
    rdfs:label "Treatment Outcome Shape"@en ;
    rdfs:comment "Validation shape for treatment outcome instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "symptom_reduction" "functional_improvement" "behavioral_change" "emotional_regulation" "social_functioning" "academic_improvement" "relational_healing" ) ;
            sh:maxCount 1 ;
            sh:message "Treatment outcome must specify outcome type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-impact:outcomeType ],
        [ sh:datatype xsd:string ;
            sh:in ( "no_improvement" "minimal_improvement" "moderate_improvement" "significant_improvement" "substantial_improvement" "complete_resolution" ) ;
            sh:maxCount 1 ;
            sh:message "Treatment outcome must specify outcome level from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-impact:outcomeLevel ],
        [ sh:datatype xsd:string ;
            sh:in ( "clinical_assessment" "standardized_instrument" "behavioral_observation" "self_report" "caregiver_report" "functional_assessment" ) ;
            sh:maxCount 1 ;
            sh:message "Measurement method must be from the allowed list."@en ;
            sh:minCount 0 ;
            sh:path cacontology-impact:measurementMethod ] ;
    sh:targetClass cacontology-impact:TreatmentOutcome .

cacontology-impact:UtilizesResilienceShape a sh:PropertyShape ;
    sh:class cacontology-impact:ResilienceFactor ;
    sh:description "Links recovery to resilience factors utilized" ;
    sh:minCount 0 ;
    sh:name "utilizes resilience" ;
    sh:path cacontology-impact:utilizesResilience .

cacontology-impact:VictimAdvocacy a owl:Class ;
    rdfs:label "Victim Advocacy"@en ;
    rdfs:comment "Advocacy services to protect victim rights and interests."@en ;
    rdfs:subClassOf cacontology-impact:VictimSupport .

cacontology-impact:VictimAdvocateRole a gufo:Role,
        owl:Class ;
    rdfs:label "Victim Advocate Role"@en ;
    rdfs:comment "Role of professional providing advocacy support to victims."@en ;
    rdfs:subClassOf uco-role:Role .

cacontology-impact:VictimImpactAssessmentShape a sh:NodeShape ;
    rdfs:label "Victim Impact Assessment Shape"@en ;
    rdfs:comment "Validation shape for victim impact assessment instances."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "initial" "comprehensive" "follow_up" "specialized" "court_ordered" "therapeutic" "forensic" ) ;
            sh:maxCount 1 ;
            sh:message "Victim impact assessment must specify assessment type from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-impact:assessmentType ],
        [ sh:datatype xsd:dateTime ;
            sh:maxCount 1 ;
            sh:message "Victim impact assessment must specify assessment date."@en ;
            sh:minCount 1 ;
            sh:path cacontology-impact:assessmentDate ],
        [ sh:datatype xsd:string ;
            sh:in ( "licensed_psychologist" "licensed_social_worker" "psychiatrist" "trauma_specialist" "forensic_interviewer" "victim_advocate" "clinical_therapist" ) ;
            sh:maxCount 1 ;
            sh:message "Victim impact assessment must specify assessor credentials from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-impact:assessorCredentials ],
        [ sh:datatype xsd:decimal ;
            sh:maxCount 1 ;
            sh:maxInclusive 8.0 ;
            sh:message "Assessment duration must be between 0.5 and 8 hours."@en ;
            sh:minCount 0 ;
            sh:minInclusive 0.5 ;
            sh:path cacontology-impact:assessmentDuration ],
        [ sh:datatype xsd:string ;
            sh:in ( "minimal" "mild" "moderate" "severe" "extreme" "catastrophic" ) ;
            sh:maxCount 1 ;
            sh:message "Victim impact assessment must specify severity level from the allowed list."@en ;
            sh:minCount 1 ;
            sh:path cacontology-impact:severityLevel ] ;
    sh:targetClass cacontology-impact:VictimImpactAssessment .

cacontology-impact:VictimInRecovery a gufo:Role,
        owl:Class ;
    rdfs:label "Victim in Recovery"@en ;
    rdfs:comment "Role of a victim actively engaged in recovery process."@en ;
    rdfs:subClassOf uco-role:VictimRole .

cacontology-impact:admissionReason a owl:DatatypeProperty ;
    rdfs:label "admission reason"@en ;
    rdfs:comment "Primary reason for hospital admission (suicidal_ideation, medical_emergency, trauma)."@en ;
    rdfs:domain cacontology-impact:HospitalIntervention ;
    rdfs:range xsd:string .

cacontology-impact:agencyCount a owl:DatatypeProperty ;
    rdfs:label "agency count"@en ;
    rdfs:comment "Number of agencies involved in victim response."@en ;
    rdfs:domain cacontology-impact:MultiAgencyVictimResponse ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-impact:coordinatedBy a owl:ObjectProperty ;
    rdfs:label "coordinated by"@en ;
    rdfs:comment "Links victim response to agency that coordinated it."@en ;
    rdfs:domain cacontology-impact:MultiAgencyVictimResponse ;
    rdfs:range uco-identity:Organization .

cacontology-impact:coordinationComplexity a owl:DatatypeProperty ;
    rdfs:label "coordination complexity"@en ;
    rdfs:comment "Complexity level of multi-agency coordination (simple, moderate, complex, highly_complex)."@en ;
    rdfs:domain cacontology-impact:VictimServiceCoordination ;
    rdfs:range xsd:string .

cacontology-impact:dischargeCondition a owl:DatatypeProperty ;
    rdfs:label "discharge condition"@en ;
    rdfs:comment "Condition of victim at discharge (stable, improved, requires_followup)."@en ;
    rdfs:domain cacontology-impact:HospitalDischarge ;
    rdfs:range xsd:string .

cacontology-impact:dischargeDate a owl:DatatypeProperty ;
    rdfs:label "discharge date"@en ;
    rdfs:comment "Date when victim was discharged from hospital."@en ;
    rdfs:domain cacontology-impact:HospitalDischarge ;
    rdfs:range xsd:dateTime .

cacontology-impact:documentedBy a owl:ObjectProperty ;
    rdfs:label "documented by"@en ;
    rdfs:comment "Links assessment to professional who documented it."@en ;
    rdfs:domain cacontology-impact:VictimImpactAssessment ;
    rdfs:range cacontology-impact:MentalHealthProfessional .

cacontology-impact:emergencyCallLocation a owl:DatatypeProperty ;
    rdfs:label "emergency call location"@en ;
    rdfs:comment "Location from which emergency call was made (e.g., Wilmington, North Carolina)."@en ;
    rdfs:domain cacontology-impact:NineOneOneCall ;
    rdfs:range xsd:string .

cacontology-impact:extractionComplexity a owl:DatatypeProperty ;
    rdfs:label "extraction complexity"@en ;
    rdfs:comment "Complexity level of victim extraction (simple, moderate, complex, high_risk)."@en ;
    rdfs:domain cacontology-impact:VictimExtraction ;
    rdfs:range xsd:string .

cacontology-impact:facilitatedBy a owl:ObjectProperty ;
    rdfs:label "facilitated by"@en ;
    rdfs:comment "Links recovery to support services that facilitated it."@en ;
    rdfs:domain cacontology-impact:RecoveryProcess ;
    rdfs:range cacontology-impact:VictimSupport .

cacontology-impact:facilitatedByFactor a owl:ObjectProperty ;
    rdfs:label "facilitated by factor"@en ;
    rdfs:comment "Links help seeking to factors that facilitate it."@en ;
    rdfs:domain cacontology-impact:EmergencyHelpSeeking ;
    rdfs:range cacontology-impact:HelpSeekingFacilitator .

cacontology-impact:facilitatesReintegration a owl:ObjectProperty ;
    rdfs:label "facilitates reintegration"@en ;
    rdfs:comment "Links support services to reintegration process they facilitate."@en ;
    rdfs:domain cacontology-impact:VictimSupport ;
    rdfs:range cacontology-impact:VictimReintegration .

cacontology-impact:familyContactEstablished a owl:DatatypeProperty ;
    rdfs:label "family contact established"@en ;
    rdfs:comment "Whether contact with victim's family has been established."@en ;
    rdfs:domain cacontology-impact:FamilyReunification ;
    rdfs:range xsd:boolean .

cacontology-impact:followedByDischarge a owl:ObjectProperty ;
    rdfs:label "followed by discharge"@en ;
    rdfs:comment "Links hospital intervention to discharge process."@en ;
    rdfs:domain cacontology-impact:HospitalIntervention ;
    rdfs:range cacontology-impact:HospitalDischarge .

cacontology-impact:functioningLevel a owl:DatatypeProperty ;
    rdfs:label "functioning level"@en ;
    rdfs:comment "Victim's current level of functioning (high, moderate, low, impaired)."@en ;
    rdfs:domain cacontology-impact:VictimImpactAssessment ;
    rdfs:range xsd:string .

cacontology-impact:hasImpactPhaseBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has impact phase begin point"@en ;
    rdfs:comment "Temporal begin point for impact phase."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-impact:hasImpactPhaseEndPoint a owl:DatatypeProperty ;
    rdfs:label "has impact phase end point"@en ;
    rdfs:comment "Temporal end point for impact phase."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-impact:hasRoleBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has role begin point"@en ;
    rdfs:comment "Temporal begin point for victim support role."@en ;
    rdfs:domain gufo:Role ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-impact:hasRoleEndPoint a owl:DatatypeProperty ;
    rdfs:label "has role end point"@en ;
    rdfs:comment "Temporal end point for victim support role."@en ;
    rdfs:domain gufo:Role ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-impact:hometownLocation a owl:DatatypeProperty ;
    rdfs:label "hometown location"@en ;
    rdfs:comment "Location of victim's hometown for return planning."@en ;
    rdfs:domain cacontology-impact:HometownReturn ;
    rdfs:range xsd:string .

cacontology-impact:hospitalName a owl:DatatypeProperty ;
    rdfs:label "hospital name"@en ;
    rdfs:comment "Name of hospital where victim received treatment."@en ;
    rdfs:domain cacontology-impact:HospitalIntervention ;
    rdfs:range xsd:string .

cacontology-impact:hospitalStayDuration a owl:DatatypeProperty ;
    rdfs:label "hospital stay duration"@en ;
    rdfs:comment "Duration of hospital stay in days."@en ;
    rdfs:domain cacontology-impact:HospitalIntervention ;
    rdfs:range xsd:decimal .

cacontology-impact:impactArea a owl:DatatypeProperty ;
    rdfs:label "impact area"@en ;
    rdfs:comment "Area of life affected (education, relationships, mental_health, physical_health, social)."@en ;
    rdfs:domain cacontology-impact:LongTermEffect ;
    rdfs:range xsd:string .

cacontology-impact:impactPhaseDuration a owl:DatatypeProperty ;
    rdfs:label "impact phase duration"@en ;
    rdfs:comment "Duration of impact phase."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:duration .

cacontology-impact:impactSeverity a owl:DatatypeProperty ;
    rdfs:label "impact severity"@en ;
    rdfs:comment "Severity of long-term impact (minimal, moderate, significant, severe)."@en ;
    rdfs:domain cacontology-impact:LongTermEffect ;
    rdfs:range xsd:string .

cacontology-impact:impededBy a owl:ObjectProperty ;
    rdfs:label "impeded by"@en ;
    rdfs:comment "Links recovery to barriers that impede progress."@en ;
    rdfs:domain cacontology-impact:RecoveryProcess ;
    rdfs:range cacontology-impact:RecoveryBarriers .

cacontology-impact:impededByBarrier a owl:ObjectProperty ;
    rdfs:label "impeded by barrier"@en ;
    rdfs:comment "Links help seeking to barriers that impede it."@en ;
    rdfs:domain cacontology-impact:EmergencyHelpSeeking ;
    rdfs:range cacontology-impact:HelpSeekingBarrier .

cacontology-impact:includesTransportation a owl:ObjectProperty ;
    rdfs:label "includes transportation"@en ;
    rdfs:comment "Links hospital discharge to transportation assistance provided."@en ;
    rdfs:domain cacontology-impact:HospitalDischarge ;
    rdfs:range cacontology-impact:VictimTransportationAssistance .

cacontology-impact:informsRestitution a owl:ObjectProperty ;
    rdfs:label "informs restitution"@en ;
    rdfs:comment "Links victim impact to restitution calculations."@en ;
    rdfs:domain cacontology-impact:VictimImpactAssessment ;
    rdfs:range uco-observable:ObservableObject .

cacontology-impact:informsSafetyPlanning a owl:ObjectProperty ;
    rdfs:label "informs safety planning"@en ;
    rdfs:comment "Links danger assessment to safety planning based on assessment results."@en ;
    rdfs:domain cacontology-impact:OngoingDangerAssessment ;
    rdfs:range cacontology-impact:VictimSafetyPlanning .

cacontology-impact:intensity a owl:DatatypeProperty ;
    rdfs:label "intensity"@en ;
    rdfs:comment "Intensity of trauma indicator (mild, moderate, severe)."@en ;
    rdfs:domain cacontology-impact:TraumaIndicator ;
    rdfs:range xsd:string .

cacontology-impact:jurisdictionsInvolved a owl:DatatypeProperty ;
    rdfs:label "jurisdictions involved"@en ;
    rdfs:comment "Number of jurisdictions involved in victim services coordination."@en ;
    rdfs:domain cacontology-impact:InterstateVictimServices ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-impact:lifeAreaAffected a owl:DatatypeProperty ;
    rdfs:label "life area affected"@en ;
    rdfs:comment "Specific life area affected by victimization."@en ;
    rdfs:domain cacontology-impact:LongTermEffect ;
    rdfs:range xsd:string .

cacontology-impact:milestoneDate a owl:DatatypeProperty ;
    rdfs:label "milestone date"@en ;
    rdfs:comment "Date when recovery milestone was achieved."@en ;
    rdfs:domain cacontology-impact:RecoveryMilestone ;
    rdfs:range xsd:dateTime .

cacontology-impact:milestoneDescription a owl:DatatypeProperty ;
    rdfs:label "milestone description"@en ;
    rdfs:comment "Description of recovery milestone achieved."@en ;
    rdfs:domain cacontology-impact:RecoveryMilestone ;
    rdfs:range xsd:string .

cacontology-impact:necessitatesAssessment a owl:ObjectProperty ;
    rdfs:label "necessitates assessment"@en ;
    rdfs:comment "Links victim extraction to ongoing danger assessment required."@en ;
    rdfs:domain cacontology-impact:VictimExtraction ;
    rdfs:range cacontology-impact:OngoingDangerAssessment .

cacontology-impact:ongoingDangerLevel a owl:DatatypeProperty ;
    rdfs:label "ongoing danger level"@en ;
    rdfs:comment "Assessment of ongoing danger to victim (low, moderate, high, extreme)."@en ;
    rdfs:domain cacontology-impact:OngoingDangerAssessment ;
    rdfs:range xsd:string .

cacontology-impact:onsetDate a owl:DatatypeProperty ;
    rdfs:label "onset date"@en ;
    rdfs:comment "Date when trauma symptoms first appeared."@en ;
    rdfs:domain cacontology-impact:PsychologicalHarm ;
    rdfs:range xsd:dateTime .

cacontology-impact:partOfRecovery a owl:ObjectProperty ;
    rdfs:label "part of recovery"@en ;
    rdfs:comment "Links recovery milestone to overall recovery process."@en ;
    rdfs:domain cacontology-impact:RecoveryMilestone ;
    rdfs:range cacontology-impact:RecoveryProcess .

cacontology-impact:participatesInResponse a owl:ObjectProperty ;
    rdfs:label "participates in response"@en ;
    rdfs:comment "Links agency to victim response they participated in."@en ;
    rdfs:domain uco-identity:Organization ;
    rdfs:range cacontology-impact:MultiAgencyVictimResponse .

cacontology-impact:prognosis a owl:DatatypeProperty ;
    rdfs:label "prognosis"@en ;
    rdfs:comment "Long-term prognosis for recovery (excellent, good, fair, poor, guarded)."@en ;
    rdfs:domain cacontology-impact:RecoveryProcess ;
    rdfs:range xsd:string .

cacontology-impact:progressionPattern a owl:DatatypeProperty ;
    rdfs:label "progression pattern"@en ;
    rdfs:comment "Pattern of indicator progression (improving, stable, worsening, fluctuating)."@en ;
    rdfs:domain cacontology-impact:TraumaIndicator ;
    rdfs:range xsd:string .

cacontology-impact:providedBy a owl:ObjectProperty ;
    rdfs:label "provided by"@en ;
    rdfs:comment "Links intervention to professional who provided it."@en ;
    rdfs:domain cacontology-impact:TherapeuticIntervention ;
    rdfs:range cacontology-impact:MentalHealthProfessional .

cacontology-impact:providesSpecializedSupport a owl:ObjectProperty ;
    rdfs:label "provides specialized support"@en ;
    rdfs:comment "Links organization to specialized support services they provide."@en ;
    rdfs:domain uco-identity:Organization ;
    rdfs:range cacontology-impact:VictimSupport .

cacontology-impact:receivedTreatment a owl:ObjectProperty ;
    rdfs:label "received treatment"@en ;
    rdfs:comment "Links victim to therapeutic intervention received."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range cacontology-impact:TherapeuticIntervention .

cacontology-impact:recoveryTimeframe a owl:DatatypeProperty ;
    rdfs:label "recovery timeframe"@en ;
    rdfs:comment "Expected or actual timeframe for recovery process."@en ;
    rdfs:domain cacontology-impact:RecoveryProcess ;
    rdfs:range xsd:duration .

cacontology-impact:reintegrationDuration a owl:DatatypeProperty ;
    rdfs:label "reintegration duration"@en ;
    rdfs:comment "Expected duration of reintegration process in months."@en ;
    rdfs:domain cacontology-impact:VictimReintegration ;
    rdfs:range xsd:decimal .

cacontology-impact:relevantToSentencing a owl:ObjectProperty ;
    rdfs:label "relevant to sentencing"@en ;
    rdfs:comment "Links victim impact to legal proceedings for sentencing."@en ;
    rdfs:domain cacontology-impact:VictimImpactAssessment ;
    rdfs:range uco-action:Action .

cacontology-impact:reportedSituation a owl:DatatypeProperty ;
    rdfs:label "reported situation"@en ;
    rdfs:comment "Situation reported by victim in emergency call (e.g., 'forced to engage in prostitution')."@en ;
    rdfs:domain cacontology-impact:VictimSelfReporting ;
    rdfs:range xsd:string .

cacontology-impact:responseTime a owl:DatatypeProperty ;
    rdfs:label "response time"@en ;
    rdfs:comment "Time from emergency call to first responder arrival in minutes."@en ;
    rdfs:domain cacontology-impact:EmergencyResponse ;
    rdfs:range xsd:decimal .

cacontology-impact:resultedFrom a owl:ObjectProperty ;
    rdfs:label "resulted from"@en ;
    rdfs:comment "Links psychological harm to the criminal action that caused it."@en ;
    rdfs:domain cacontology-impact:PsychologicalHarm ;
    rdfs:range uco-action:Crime .

cacontology-impact:resultsinExtraction a owl:ObjectProperty ;
    rdfs:label "results in extraction"@en ;
    rdfs:comment "Links emergency response to victim extraction performed."@en ;
    rdfs:domain cacontology-impact:EmergencyResponse ;
    rdfs:range cacontology-impact:VictimExtraction .

cacontology-impact:resultsinHospitalization a owl:ObjectProperty ;
    rdfs:label "results in hospitalization"@en ;
    rdfs:comment "Links emergency response to hospitalization that resulted."@en ;
    rdfs:domain cacontology-impact:EmergencyResponse ;
    rdfs:range cacontology-impact:HospitalIntervention .

cacontology-impact:returnsTo a owl:ObjectProperty ;
    rdfs:label "returns to"@en ;
    rdfs:comment "Links victim to location they return to during reintegration."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range uco-location:Location .

cacontology-impact:reunitesWith a owl:ObjectProperty ;
    rdfs:label "reunites with"@en ;
    rdfs:comment "Links victim to family members they reunite with."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range uco-identity:Person .

cacontology-impact:safetyPlanType a owl:DatatypeProperty ;
    rdfs:label "safety plan type"@en ;
    rdfs:comment "Type of safety plan implemented (immediate, short_term, long_term, comprehensive)."@en ;
    rdfs:domain cacontology-impact:VictimSafetyPlanning ;
    rdfs:range xsd:string .

cacontology-impact:serviceDuration a owl:DatatypeProperty ;
    rdfs:label "service duration"@en ;
    rdfs:comment "Duration of support services in months."@en ;
    rdfs:domain cacontology-impact:VictimSupport ;
    rdfs:range xsd:integer .

cacontology-impact:transportationCost a owl:DatatypeProperty ;
    rdfs:label "transportation cost"@en ;
    rdfs:comment "Cost of transportation assistance provided in USD."@en ;
    rdfs:domain cacontology-impact:VictimTransportationAssistance ;
    rdfs:range xsd:decimal .

cacontology-impact:transportationDestination a owl:DatatypeProperty ;
    rdfs:label "transportation destination"@en ;
    rdfs:comment "Destination for victim transportation assistance."@en ;
    rdfs:domain cacontology-impact:VictimTransportationAssistance ;
    rdfs:range xsd:string .

cacontology-impact:transportationType a owl:DatatypeProperty ;
    rdfs:label "transportation type"@en ;
    rdfs:comment "Type of transportation provided (bus_ticket, train_ticket, safe_transport, flight)."@en ;
    rdfs:domain cacontology-impact:VictimTransportationAssistance ;
    rdfs:range xsd:string .

cacontology-impact:treatedAt a owl:ObjectProperty ;
    rdfs:label "treated at"@en ;
    rdfs:comment "Links victim to hospital where they received treatment."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range uco-location:Location .

cacontology-impact:treatmentOutcome a owl:DatatypeProperty ;
    rdfs:label "treatment outcome"@en ;
    rdfs:comment "Outcome of therapeutic intervention (successful, partially_successful, no_improvement, discontinued)."@en ;
    rdfs:domain cacontology-impact:TherapeuticIntervention ;
    rdfs:range xsd:string .

cacontology-impact:triggersResponse a owl:ObjectProperty ;
    rdfs:label "triggers response"@en ;
    rdfs:comment "Links emergency help seeking to response it triggers."@en ;
    rdfs:domain cacontology-impact:EmergencyHelpSeeking ;
    rdfs:range cacontology-impact:EmergencyResponse .

cacontology-educational-shapes:AcademicIntimidationGUFOShape a sh:NodeShape ;
    rdfs:label "gUFO Academic Intimidation Shape"@en ;
    rdfs:comment "Validation shape for academic intimidation events with gUFO temporal modeling."@en ;
    sh:property [ sh:hasValue gufo:Event ;
            sh:message "Academic intimidation must be typed as gUFO Event"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ],
        [ sh:datatype xsd:string ;
            sh:in ( "grade_threats" "academic_punishment" "public_humiliation" "isolation" "academic_discrimination" ) ;
            sh:message "Intimidation method must be from valid academic intimidation methods"@en ;
            sh:path cacontology-educational1:intimidationMethod ] ;
    sh:targetClass cacontology-educational1:AcademicIntimidation .

cacontology-educational-shapes:AcademicTermPhaseGUFOShape a sh:NodeShape ;
    rdfs:label "gUFO Academic Term Phase Shape"@en ;
    rdfs:comment "Validates academic term phase instances with gUFO anti-rigidity constraints and academic calendar alignment."@en ;
    sh:property [ sh:hasValue gufo:Phase ;
            sh:message "Academic term phase must be typed as gUFO Phase (anti-rigid)"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Academic term phase can have at most one begin point"@en ;
            sh:path cacontology-gufo:beginTimePoint ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Academic term phase can have at most one end point"@en ;
            sh:path cacontology-gufo:endTimePoint ],
        [ sh:datatype xsd:string ;
            sh:in ( "fall" "spring" "summer" "winter" "semester" "quarter" "trimester" ) ;
            sh:message "Term type must be a valid academic term"@en ;
            sh:path cacontology-educational1:termType ] ;
    sh:sparql [ sh:message "Academic term begin point must precede end point"@en ;
            sh:select """
            SELECT ?this
            WHERE {
                ?this cacontology-gufo:beginTimePoint ?begin ;
                      cacontology-gufo:endTimePoint ?end .
                FILTER (?begin >= ?end)
            }
        """ ] ;
    sh:targetClass cacontology-educational1:AcademicTermPhase .

cacontology-educational-shapes:AssignmentHarassmentGUFOShape a sh:NodeShape ;
    rdfs:label "gUFO Assignment Harassment Shape"@en ;
    rdfs:comment "Validation shape for harassment on student assignments with gUFO Event constraints."@en ;
    sh:property [ sh:hasValue gufo:Event ;
            sh:message "Assignment harassment must be typed as gUFO Event"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ],
        [ sh:datatype xsd:string ;
            sh:hasValue "assignment" ;
            sh:message "Assignment harassment must have medium of 'assignment'"@en ;
            sh:path cacontology-educational1:harassmentMedium ],
        [ sh:class uco-observable:ObservableObject ;
            sh:message "Assignment harassment must specify what it was written on"@en ;
            sh:minCount 1 ;
            sh:path cacontology-educational1:writtenOn ] ;
    sh:targetClass cacontology-educational1:AssignmentHarassment .

cacontology-educational-shapes:ClassroomExploitationContextGUFOShape a sh:NodeShape ;
    rdfs:label "gUFO Classroom Exploitation Context Shape"@en ;
    rdfs:comment "Validation shape for classroom exploitation contexts as gUFO Objects with spatial and temporal constraints."@en ;
    sh:property [ sh:hasValue gufo:Object ;
            sh:message "Classroom exploitation context must be typed as gUFO Object"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Context can have at most one time point"@en ;
            sh:path cacontology-gufo:contextTimePoint ],
        [ sh:datatype xsd:string ;
            sh:message "Classroom number must be valid format (e.g., 101, A205, 12B)"@en ;
            sh:path cacontology-educational1:classroomNumber ;
            sh:pattern "^[A-Z]?[0-9]{1,4}[A-Z]?$" ],
        [ sh:datatype xsd:string ;
            sh:in ( "morning" "afternoon" "evening" "after_hours" ) ;
            sh:message "Time of day must be a valid time period"@en ;
            sh:path cacontology-educational1:timeOfDay ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxInclusive 35 ;
            sh:message "Students present cannot exceed 35"@en ;
            sh:path cacontology-educational1:studentsPresent ],
        [ sh:datatype xsd:string ;
            sh:in ( "alone" "few_students" "class_present" ) ;
            sh:message "Isolation level must be alone, few_students, or class_present"@en ;
            sh:path cacontology-educational1:isolationLevel ] ;
    sh:targetClass cacontology-educational1:ClassroomExploitationContext .

cacontology-educational-shapes:CrossReferenceValidationShape a sh:NodeShape ;
    rdfs:label "gUFO Cross-Reference Validation Shape"@en ;
    rdfs:comment "Validates cross-reference consistency for roles, events, and situations in educational domain."@en ;
    sh:sparql [ sh:message "Educator roles must be consistent with exploitation type"@en ;
            sh:select """
            SELECT ?this
            WHERE {
                ?this rdf:type cacontology-educational:MathTeacherRole ;
                      cacontology-educational:perpetrates ?exploitation .
                ?exploitation rdf:type cacontology-educational:TeacherStudentExploitation ;
                              cacontology-educational:subjectContext ?subject .
                FILTER (?subject != "Mathematics" && ?subject != "Math")
            }
        """ ],
        [ sh:message "Cross-institutional exploitation must involve multiple institutions"@en ;
            sh:select """
            SELECT ?this
            WHERE {
                ?this rdf:type cacontology-educational:CrossInstitutionalExploitation ;
                      cacontology-educational:involvedInstitutions ?inst .
                {
                    SELECT ?this (COUNT(DISTINCT ?inst) AS ?instCount)
                    WHERE {
                        ?this cacontology-educational:involvedInstitutions ?inst .
                    }
                    GROUP BY ?this
                }
                FILTER (?instCount < 2)
            }
        """ ],
        [ sh:message "Evidence objects must be properly documented and linked to incidents"@en ;
            sh:select """
            SELECT ?this
            WHERE {
                ?this rdf:type cacontology-educational:WrittenHarassmentEvidence ;
                      cacontology-educational:documentsHarassment ?harassment .
                FILTER (NOT EXISTS { ?harassment rdf:type cacontology-educational:WrittenHarassment })
            }
        """ ] ;
    sh:targetNode gufo:Event,
        gufo:Role,
        gufo:Situation .

cacontology-educational-shapes:DataQualityValidationShape a sh:NodeShape ;
    rdfs:label "Enhanced Data Quality Validation Shape"@en ;
    rdfs:comment "Validates enhanced data quality constraints with gUFO-enhanced educational domain validation."@en ;
    sh:sparql [ sh:message "Educational institution names must be unique within geographic area"@en ;
            sh:select """
            SELECT ?this
            WHERE {
                ?this rdf:type cacontology-educational:EducationalInstitution ;
                      cacontology-educational:institutionName ?name ;
                      cacontology-educational:geographicArea ?area .
                ?other rdf:type cacontology-educational:EducationalInstitution ;
                       cacontology-educational:institutionName ?name ;
                       cacontology-educational:geographicArea ?area .
                FILTER (?this != ?other)
            }
        """ ],
        [ sh:message "Victim age must be consistent with grade level and institutional type"@en ;
            sh:select """
            SELECT ?this
            WHERE {
                ?this cacontology-educational:involvesVictim ?victim ;
                      cacontology-educational:atInstitution ?institution .
                ?victim cacontology-educational:victimAge ?age .
                ?institution rdf:type cacontology-educational:IntermediateSchool .
                FILTER (?age < 11 || ?age > 14)
            }
        """ ] ;
    sh:targetClass cacontology-educational1:EducationalInstitution,
        cacontology-educational1:EducatorPerpetratedExploitation,
        cacontology-educational1:EducatorRole .

cacontology-educational-shapes:EducationalExploitationSituationGUFOShape a sh:NodeShape ;
    rdfs:label "gUFO Educational Exploitation Situation Shape"@en ;
    rdfs:comment "Validates educational exploitation situation instances as gUFO Situations for complex state relationships."@en ;
    sh:property [ sh:hasValue gufo:Situation ;
            sh:message "Educational exploitation situation must be typed as gUFO Situation"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Situation can have at most one begin point"@en ;
            sh:path cacontology-gufo:situationBeginTimePoint ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Situation can have at most one end point"@en ;
            sh:path cacontology-gufo:situationEndTimePoint ],
        [ sh:class cacontology-educational1:EducationalInstitution ;
            sh:message "Situation must involve at least one educational institution"@en ;
            sh:minCount 1 ;
            sh:path cacontology-educational1:involvedInstitutions ],
        [ sh:class uco-identity:Person ;
            sh:message "Situation must involve at least one educator"@en ;
            sh:minCount 1 ;
            sh:path cacontology-educational1:involvedEducators ],
        [ sh:class uco-identity:Person ;
            sh:message "Situation must involve at least one student"@en ;
            sh:minCount 1 ;
            sh:path cacontology-educational1:involvedStudents ] ;
    sh:targetClass cacontology-educational1:EducationalExploitationSituation .

cacontology-educational-shapes:EducationalInstitutionGUFOShape a sh:NodeShape ;
    rdfs:label "gUFO Educational Institution Shape"@en ;
    rdfs:comment "Validates educational institution instances with gUFO foundational constraints as Organizations."@en ;
    sh:property [ sh:hasValue gufo:Organization ;
            sh:message "Educational institution must be typed as gUFO Organization"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ],
        [ sh:hasValue gufo:Object ;
            sh:message "Educational institution must be typed as gUFO Object"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Educational institution can have at most one establishment time point"@en ;
            sh:path cacontology-gufo:establishmentTimePoint ],
        [ sh:datatype xsd:string ;
            sh:maxCount 1 ;
            sh:maxLength 200 ;
            sh:message "Institution name must be between 2 and 200 characters"@en ;
            sh:minCount 1 ;
            sh:minLength 2 ;
            sh:path cacontology-educational1:institutionName ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxInclusive 50000 ;
            sh:message "Student population must be between 10 and 50,000"@en ;
            sh:minInclusive 10 ;
            sh:path cacontology-educational1:studentPopulation ] ;
    sh:targetClass cacontology-educational1:EducationalInstitution .

cacontology-educational-shapes:EducationalInvestigationGUFOShape a sh:NodeShape ;
    rdfs:label "gUFO Educational Investigation Shape"@en ;
    rdfs:comment "Validates educational investigation instances as gUFO Events with temporal boundaries and exploitation documentation."@en ;
    sh:property [ sh:hasValue gufo:Event ;
            sh:message "Educational investigation must be typed as gUFO Event"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Investigation can have at most one begin point"@en ;
            sh:path cacontology-gufo:beginTimePoint ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Investigation can have at most one end point"@en ;
            sh:path cacontology-gufo:endTimePoint ],
        [ sh:datatype xsd:string ;
            sh:in ( "single_incident" "pattern_behavior" "institutional_review" "multi_victim" "cross_institutional" ) ;
            sh:message "Investigation scope must be from valid scope types"@en ;
            sh:path cacontology-educational1:investigationScope ] ;
    sh:targetClass cacontology-educational1:EducationalInvestigation .

cacontology-educational-shapes:EducatorPerpetratedExploitationGUFOShape a sh:NodeShape ;
    rdfs:label "gUFO Educator Perpetrated Exploitation Shape"@en ;
    rdfs:comment "Validates educator exploitation instances with gUFO Event constraints and temporal boundaries."@en ;
    sh:property [ sh:hasValue gufo:Event ;
            sh:message "Educator perpetrated exploitation must be typed as gUFO Event"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Exploitation event can have at most one begin point"@en ;
            sh:path cacontology-gufo:beginTimePoint ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Exploitation event can have at most one end point"@en ;
            sh:path cacontology-gufo:endTimePoint ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Exploitation can have at most one first incident time point"@en ;
            sh:path cacontology-educational1:exploitationFirstIncidentTimePoint ],
        [ sh:datatype xsd:decimal ;
            sh:maxInclusive 10000 ;
            sh:message "Exploitation duration must be between 0.1 hours and 10,000 hours"@en ;
            sh:minInclusive 0.1 ;
            sh:path cacontology-educational1:exploitationDuration ] ;
    sh:sparql [ sh:message "First incident time point should not precede overall begin point"@en ;
            sh:select """
            SELECT ?this
            WHERE {
                ?this cacontology-educational:exploitationFirstIncidentTimePoint ?first ;
                      cacontology-gufo:beginTimePoint ?begin .
                FILTER (?first < ?begin)
            }
        """ ] ;
    sh:targetClass cacontology-educational1:EducatorPerpetratedExploitation .

cacontology-educational-shapes:EducatorRoleGUFOShape a sh:NodeShape ;
    rdfs:label "gUFO Educator Role Shape"@en ;
    rdfs:comment "Validates educator role instances with gUFO anti-rigidity constraints and temporal employment constraints."@en ;
    sh:property [ sh:hasValue gufo:Role ;
            sh:message "Educator role must be typed as gUFO Role (anti-rigid)"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Educator role can have at most one employment begin point"@en ;
            sh:path cacontology-gufo:employmentBeginTimePoint ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Educator role can have at most one employment end point"@en ;
            sh:path cacontology-gufo:employmentEndTimePoint ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxInclusive 85 ;
            sh:message "Educator age must be between 18 and 85"@en ;
            sh:minInclusive 18 ;
            sh:path cacontology-educational1:educatorAge ],
        [ sh:datatype xsd:decimal ;
            sh:maxInclusive 60 ;
            sh:message "Years of experience must be between 0 and 60"@en ;
            sh:minInclusive 0 ;
            sh:path cacontology-educational1:yearsOfExperience ] ;
    sh:sparql [ sh:message "Employment begin point must precede end point"@en ;
            sh:select """
            SELECT ?this
            WHERE {
                ?this cacontology-gufo:employmentBeginTimePoint ?begin ;
                      cacontology-gufo:employmentEndTimePoint ?end .
                FILTER (?begin >= ?end)
            }
        """ ] ;
    sh:targetClass cacontology-educational1:EducatorRole .

cacontology-educational-shapes:EliteEducationalInstitutionGUFOShape a sh:NodeShape ;
    rdfs:label "gUFO Elite Educational Institution Shape"@en ;
    rdfs:comment "Validation shape for elite educational institutions with enhanced reputation and selectivity requirements."@en ;
    sh:property [ sh:datatype xsd:string ;
            sh:in ( "excellent" "high" "prestigious" "elite" ) ;
            sh:message "Elite institution must have high reputation status"@en ;
            sh:path cacontology-educational1:institutionReputation ],
        [ sh:datatype xsd:decimal ;
            sh:maxInclusive 1.0 ;
            sh:message "Elite institution must have selectivity rating between 0.8 and 1.0"@en ;
            sh:minInclusive 0.8 ;
            sh:path cacontology-educational1:selectivityRating ],
        [ sh:hasValue gufo:Organization ;
            sh:message "Elite educational institution must be typed as gUFO Organization"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ] ;
    sh:targetClass cacontology-educational1:EliteEducationalInstitution .

cacontology-educational-shapes:EmploymentPhaseGUFOShape a sh:NodeShape ;
    rdfs:label "gUFO Employment Phase Shape"@en ;
    rdfs:comment "Validates employment phase instances with gUFO anti-rigidity constraints and employment lifecycle modeling."@en ;
    sh:property [ sh:hasValue gufo:Phase ;
            sh:message "Employment phase must be typed as gUFO Phase (anti-rigid)"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ],
        [ sh:datatype xsd:string ;
            sh:in ( "active" "probationary" "suspended" "terminated" "resigned" "retired" ) ;
            sh:message "Employment status must be from valid status list"@en ;
            sh:path cacontology-educational1:employmentStatus ],
        [ sh:datatype xsd:string ;
            sh:in ( "full_time" "part_time" "substitute" "contract" "temporary" "volunteer" ) ;
            sh:message "Employment type must be from valid type list"@en ;
            sh:path cacontology-educational1:employmentType ] ;
    sh:targetClass cacontology-educational1:EmploymentPhase .

cacontology-educational-shapes:EvidenceObjectGUFOShape a sh:NodeShape ;
    rdfs:label "gUFO Evidence Object Shape"@en ;
    rdfs:comment "Validates evidence object instances as gUFO Objects with documentation relationships."@en ;
    sh:property [ sh:hasValue gufo:Object ;
            sh:message "Evidence object must be typed as gUFO Object"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ],
        [ sh:datatype xsd:string ;
            sh:message "Evidence must specify type"@en ;
            sh:minLength 1 ;
            sh:path cacontology-educational1:evidenceType ],
        [ sh:datatype xsd:dateTimeStamp ;
            sh:maxCount 1 ;
            sh:message "Evidence can have at most one documentation date"@en ;
            sh:path cacontology-educational1:documentationDate ] ;
    sh:targetClass cacontology-educational1:DigitalCommunicationEvidence,
        cacontology-educational1:IPAddressEvidence,
        cacontology-educational1:VictimAccountEvidence .

cacontology-educational-shapes:FoundationalTypeComplianceShape a sh:NodeShape ;
    rdfs:label "gUFO Foundational Type Compliance Shape"@en ;
    rdfs:comment "Ensures 100% gUFO typing compliance across educational domain entities."@en ;
    sh:sparql [ sh:message "All educational institutions must be properly typed as gUFO Kinds"@en ;
            sh:select """
            SELECT ?this
            WHERE {
                ?this rdf:type cacontology-educational:EducationalInstitution .
                FILTER (NOT EXISTS { ?this rdf:type gufo:Kind })
            }
        """ ],
        [ sh:message "All educator roles must be properly typed as anti-rigid gUFO Roles"@en ;
            sh:select """
            SELECT ?this
            WHERE {
                ?this rdf:type cacontology-educational:EducatorRole .
                FILTER (NOT EXISTS { ?this rdf:type gufo:Role })
            }
        """ ],
        [ sh:message "All educational phases must be properly typed as anti-rigid gUFO Phases"@en ;
            sh:select """
            SELECT ?this
            WHERE {
                ?this rdf:type cacontology-educational:AcademicTermPhase .
                FILTER (NOT EXISTS { ?this rdf:type gufo:Phase })
            }
        """ ],
        [ sh:message "All exploitation events must be properly typed as gUFO Events"@en ;
            sh:select """
            SELECT ?this
            WHERE {
                ?this rdf:type cacontology-educational:EducatorPerpetratedExploitation .
                FILTER (NOT EXISTS { ?this rdf:type gufo:Event })
            }
        """ ],
        [ sh:message "All educational situations must be properly typed as gUFO Situations"@en ;
            sh:select """
            SELECT ?this
            WHERE {
                ?this rdf:type cacontology-educational:EducationalExploitationSituation .
                FILTER (NOT EXISTS { ?this rdf:type gufo:Situation })
            }
        """ ] ;
    sh:targetNode gufo:Event,
        gufo:Kind,
        gufo:Object,
        gufo:Phase,
        gufo:Role,
        gufo:Situation .

cacontology-educational-shapes:InstitutionalResponseSituationGUFOShape a sh:NodeShape ;
    rdfs:label "gUFO Institutional Response Situation Shape"@en ;
    rdfs:comment "Validates institutional response situation instances with gUFO Situation constraints for organizational response coordination."@en ;
    sh:property [ sh:datatype xsd:decimal ;
            sh:maxInclusive 365 ;
            sh:message "Response timeline must be between 0.1 and 365 days"@en ;
            sh:minInclusive 0.1 ;
            sh:path cacontology-educational1:responseTimeline ],
        [ sh:hasValue gufo:Situation ;
            sh:message "Institutional response situation must be typed as gUFO Situation"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ],
        [ sh:datatype xsd:string ;
            sh:in ( "investigation" "suspension" "termination" "reporting" "counseling" "policy_change" ) ;
            sh:message "Response type must be from valid institutional response types"@en ;
            sh:path cacontology-educational1:responseType ] ;
    sh:targetClass cacontology-educational1:InstitutionalResponseSituation .

cacontology-educational-shapes:IntermediateSchoolGUFOShape a sh:NodeShape ;
    rdfs:label "gUFO Intermediate School Shape"@en ;
    rdfs:comment "Validation shape for intermediate school institutions with gUFO Organization constraints."@en ;
    sh:property [ sh:hasValue gufo:Organization ;
            sh:message "Intermediate school must be typed as gUFO Organization"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ],
        [ sh:datatype xsd:string ;
            sh:message "Grade range must be valid intermediate school range (6-8)"@en ;
            sh:path cacontology-educational1:gradeRange ;
            sh:pattern "^[6-8](-[6-8])?$" ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxInclusive 2000 ;
            sh:message "Student population must be between 50 and 2000 for intermediate schools"@en ;
            sh:minInclusive 50 ;
            sh:path cacontology-educational1:studentPopulation ] ;
    sh:targetClass cacontology-educational1:IntermediateSchool .

cacontology-educational-shapes:MathTeacherRoleGUFOShape a sh:NodeShape ;
    rdfs:label "gUFO Math Teacher Role Shape"@en ;
    rdfs:comment "Validation shape for math teacher roles with gUFO anti-rigidity and role specialization constraints."@en ;
    sh:property [ sh:hasValue gufo:Role ;
            sh:message "Math teacher role must be typed as gUFO Role (anti-rigid)"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ],
        [ sh:datatype xsd:string ;
            sh:in ( "Mathematics" "Math" "Algebra" "Geometry" "Calculus" "Statistics" ) ;
            sh:message "Subject taught must be a valid mathematics subject"@en ;
            sh:path cacontology-educational1:subjectTaught ],
        [ sh:datatype xsd:string ;
            sh:message "Math teacher must have valid teaching certification"@en ;
            sh:minLength 1 ;
            sh:path cacontology-educational1:teachingCertification ] ;
    sh:targetClass cacontology-educational1:MathTeacherRole .

cacontology-educational-shapes:MultiVictimExploitationSituationGUFOShape a sh:NodeShape ;
    rdfs:label "gUFO Multi-Victim Exploitation Situation Shape"@en ;
    rdfs:comment "Validates multi-victim exploitation situation instances with specialized coordination requirements."@en ;
    sh:property [ sh:hasValue gufo:Situation ;
            sh:message "Multi-victim exploitation situation must be typed as gUFO Situation"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ],
        [ sh:datatype xsd:nonNegativeInteger ;
            sh:maxInclusive 100 ;
            sh:message "Multi-victim situation must have between 2 and 100 victims"@en ;
            sh:minInclusive 2 ;
            sh:path cacontology-educational1:victimCount ],
        [ sh:class uco-identity:Person ;
            sh:message "Multi-victim situation must involve at least two students"@en ;
            sh:minCount 2 ;
            sh:path cacontology-educational1:involvedStudents ] ;
    sh:targetClass cacontology-educational1:MultiVictimExploitationSituation .

cacontology-educational-shapes:RoleParticipationValidationShape a sh:NodeShape ;
    rdfs:label "gUFO Role Participation Validation Shape"@en ;
    rdfs:comment "Validates role participation consistency and completeness for educational domain."@en ;
    sh:sparql [ sh:message "Educator roles must be consistently employed at associated institutions"@en ;
            sh:select """
            SELECT ?this
            WHERE {
                ?this rdf:type cacontology-educational:EducatorRole ;
                      cacontology-educational:employedAt ?institution ;
                      cacontology-educational:hasEmploymentPhase ?phase .
                ?phase cacontology-educational:employmentStatus "terminated" ;
                       cacontology-gufo:endTimePoint ?endTime .
                ?exploitation cacontology-educational:perpetratedBy ?this ;
                              cacontology-gufo:beginTimePoint ?exploitTime .
                FILTER (?exploitTime > ?endTime)
            }
        """ ],
        [ sh:message "All role participants must have complete participation information"@en ;
            sh:select """
            SELECT ?this
            WHERE {
                ?this rdf:type cacontology-educational:EducatorRole .
                FILTER (NOT EXISTS { ?this cacontology-educational:employedAt ?institution } ||
                        NOT EXISTS { ?this cacontology-educational:hasEducatorAge ?age } ||
                        NOT EXISTS { ?this cacontology-educational:yearsOfExperience ?exp })
            }
        """ ] ;
    sh:targetClass gufo:Role .

cacontology-educational-shapes:TemporalConsistencyValidationShape a sh:NodeShape ;
    rdfs:label "gUFO Temporal Consistency Validation Shape"@en ;
    rdfs:comment "Validates temporal consistency across gUFO Events, Phases, and Situations in educational context."@en ;
    sh:sparql [ sh:message "Exploitation events must occur during educator employment period"@en ;
            sh:select """
            SELECT ?this
            WHERE {
                ?this rdf:type cacontology-educational:EducatorPerpetratedExploitation ;
                      cacontology-educational:perpetratedBy ?educator ;
                      cacontology-gufo:beginTimePoint ?exploitBegin .
                ?educator cacontology-gufo:employmentBeginTimePoint ?empBegin ;
                          cacontology-gufo:employmentEndTimePoint ?empEnd .
                FILTER (?exploitBegin < ?empBegin || ?exploitBegin > ?empEnd)
            }
        """ ],
        [ sh:message "Investigation must begin after or during exploitation period"@en ;
            sh:select """
            SELECT ?this
            WHERE {
                ?this rdf:type cacontology-educational:EducationalInvestigation ;
                      cacontology-educational:investigates ?exploitation ;
                      cacontology-gufo:beginTimePoint ?invBegin .
                ?exploitation cacontology-gufo:beginTimePoint ?exploitBegin .
                FILTER (?invBegin < ?exploitBegin)
            }
        """ ],
        [ sh:message "Academic phases must have logical temporal sequence"@en ;
            sh:select """
            SELECT ?this
            WHERE {
                ?this rdf:type cacontology-educational:AcademicTermPhase ;
                      cacontology-gufo:beginTimePoint ?begin ;
                      cacontology-gufo:endTimePoint ?end .
                FILTER (?begin >= ?end)
            }
        """ ] ;
    sh:targetNode gufo:Event,
        gufo:Phase,
        gufo:Situation .

cacontology-educational-shapes:WrittenHarassmentGUFOShape a sh:NodeShape ;
    rdfs:label "gUFO Written Harassment Shape"@en ;
    rdfs:comment "Validation shape for written harassment activities with gUFO Event temporal tracking."@en ;
    sh:property [ sh:hasValue gufo:Event ;
            sh:message "Written harassment must be typed as gUFO Event"@en ;
            sh:minCount 1 ;
            sh:path rdf:type ],
        [ sh:datatype xsd:string ;
            sh:maxLength 500 ;
            sh:message "Harassment content must be between 1 and 500 characters"@en ;
            sh:minLength 1 ;
            sh:path cacontology-educational1:harassmentContent ],
        [ sh:datatype xsd:string ;
            sh:in ( "assignment" "test" "homework" "note" "report_card" "feedback" ) ;
            sh:message "Harassment medium must be a valid academic medium"@en ;
            sh:path cacontology-educational1:harassmentMedium ],
        [ sh:datatype xsd:string ;
            sh:in ( "single_incident" "occasional" "frequent" "systematic" ) ;
            sh:message "Harassment frequency must be a valid frequency level"@en ;
            sh:path cacontology-educational1:harassmentFrequency ] ;
    sh:targetClass cacontology-educational1:WrittenHarassment .

cacontology:CSAMCurationAction a owl:Class ;
    rdfs:label "CSAM Curation Action"@en ;
    rdfs:comment "The action of curating and classifying child sexual abuse material using standard classification systems."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology:CSAMIncident a owl:Class ;
    rdfs:label "Child Sexual Abuse Material Incident"@en ;
    rdfs:comment "Incidents involving possession, manufacture, or distribution of child sexual abuse material. This replaces the deprecated 'ChildPornographyIncident' term."@en ;
    rdfs:subClassOf cacontology:ChildSexualAbuseEvent .

cacontology:OffenderRole a gufo:Role,
        owl:Class ;
    rdfs:label "Offender Role"@en ;
    rdfs:comment "Role of a person who commits child sexual abuse or exploitation. Modeled as anti-rigid gUFO Role. When offender age or age-gap reasoning is relevant (e.g., Romeo-and-Juliet scenarios), age SHOULD be represented via cacontology-temporal:AgeAtTimeSituation instances for the corresponding person."@en ;
    rdfs:subClassOf uco-role:OffenderRole ;
    owl:equivalentClass cacontology-gufo:OffenderRole .

cacontology:Sextortion a owl:Class ;
    rdfs:label "Sextortion"@en ;
    rdfs:comment "Incidents involving sexual extortion of children."@en ;
    rdfs:subClassOf cacontology:ChildSexualAbuseEvent .

cacontology:UnknownVictimSubmission a owl:Class ;
    rdfs:label "Unknown Victim Submission"@en ;
    rdfs:comment "The action of submitting information about unidentified victims to relevant databases."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology:VictimRescueAction a owl:Class ;
    rdfs:label "Victim Rescue Action"@en ;
    rdfs:comment "The action of rescuing and providing support to identified victims."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology:VictimRole a gufo:Role,
        owl:Class ;
    rdfs:label "Victim Role"@en ;
    rdfs:comment "Role of a person who is a victim of child sexual abuse or exploitation. Modeled as anti-rigid gUFO Role. When the victim's age is known at the time of a specific event or phase, it SHOULD be captured via one or more cacontology-temporal:AgeAtTimeSituation instances linked to the underlying person."@en ;
    rdfs:subClassOf uco-role:VictimRole ;
    owl:equivalentClass cacontology-gufo:VictimRole .

cacontology:hasStep a owl:ObjectProperty ;
    rdfs:label "has step"@en ;
    rdfs:comment "Links a CAC investigation to each ordered step in its lifecycle."@en ;
    rdfs:domain cacontology:CACInvestigation ;
    rdfs:range uco-action:Action .

cacontology:previousStep a owl:ObjectProperty ;
    rdfs:label "previous step"@en ;
    rdfs:comment "Denotes the chronologically previous action in the lifecycle."@en ;
    owl:inverseOf cacontology:nextStep .

cacontology-abduction:AbductionSceneEvidence a owl:Class ;
    rdfs:label "Abduction Scene Evidence"@en ;
    rdfs:comment "Physical evidence collected from abduction scene."@en ;
    rdfs:subClassOf uco-observable:ObservableObject .

cacontology-abduction:ComplianceUnderThreat a owl:Class ;
    rdfs:label "Compliance Under Threat"@en ;
    rdfs:comment "Victim compliance due to weapon threats or intimidation."@en ;
    rdfs:subClassOf cacontology-abduction:VictimAbductionResponse .

cacontology-abduction:DisguiseEvidence a owl:Class ;
    rdfs:label "Disguise Evidence"@en ;
    rdfs:comment "Disguise items or concealment materials recovered as evidence."@en ;
    rdfs:subClassOf cacontology-physical:DisguiseItem .

cacontology-abduction:InitialResistance a owl:Class ;
    rdfs:label "Initial Resistance"@en ;
    rdfs:comment "Victim's initial attempts to resist abduction or escape."@en ;
    rdfs:subClassOf cacontology-abduction:VictimAbductionResponse .

cacontology-abduction:LocationBasedExploitation a owl:Class ;
    rdfs:label "Location Based Exploitation"@en ;
    rdfs:comment "Exploitation occurring at specific location following victim transportation."@en ;
    rdfs:subClassOf cacontology-abduction:AbductionExploitationPattern .

cacontology-abduction:OpportunisticPredation a owl:Class ;
    rdfs:label "Opportunistic Predation"@en ;
    rdfs:comment "Spontaneous targeting and exploitation of vulnerable children encountered by chance."@en ;
    rdfs:subClassOf cacontology-abduction:StrangerAbduction .

cacontology-abduction:OpportunityBasedTargeting a owl:Class ;
    rdfs:label "Opportunity Based Targeting"@en ;
    rdfs:comment "Targeting based on immediate opportunity rather than planned surveillance."@en ;
    rdfs:subClassOf cacontology-abduction:VictimTargetingPattern .

cacontology-abduction:StreetLevelAbduction a owl:Class ;
    rdfs:label "Street Level Abduction"@en ;
    rdfs:comment "Abduction occurring on public streets or sidewalks during victim's routine activities."@en ;
    rdfs:subClassOf cacontology-abduction:StrangerAbduction .

<https://cacontology.projectvic.org/abduction/shapes/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Stranger Abduction SHACL Shapes"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "SHACL validation shapes for the ICAC Stranger Abduction Ontology, providing validation for stranger abduction patterns, weapon-based coercion, and opportunistic predation."@en ;
    owl:imports <http://purl.org/nemo/gufo>,
        <https://cacontology.projectvic.org/abduction/2.11.0>,
        uco-core: ;
    owl:versionIRI <https://cacontology.projectvic.org/abduction/shapes/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-ai:AIAlteredCSAM a owl:Class ;
    rdfs:label "AI-Altered CSAM"@en ;
    rdfs:comment "Existing CSAM that has been modified using AI techniques to alter appearance, age, or other characteristics. Enhanced as gUFO Object with alteration tracking."@en ;
    rdfs:subClassOf gufo:Object,
        cacontology-ai:DeepfakeCSAM .

cacontology-ai:ArtifactAnalysis a owl:Class ;
    rdfs:label "Artifact Analysis"@en ;
    rdfs:comment "Analysis of digital artifacts and inconsistencies that may indicate AI generation, such as compression patterns or noise characteristics. Enhanced as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-ai:SyntheticMediaAnalysis .

cacontology-ai:ForensicAnalysisPhase a owl:Class ;
    rdfs:label "Forensic Analysis Phase"@en ;
    rdfs:comment "Anti-rigid phase during which AI-generated content undergoes detailed forensic examination."@en ;
    rdfs:subClassOf gufo:Phase ;
    cacontology-gufo:hasAntiRigidityConstraint "Phase changes based on analysis complexity" .

cacontology-ai:HybridCSAM a owl:Class ;
    rdfs:label "Hybrid CSAM"@en ;
    rdfs:comment "Content combining real and AI-generated elements, making it difficult to distinguish between authentic and artificial material. Enhanced as gUFO Object with composition modeling."@en ;
    rdfs:subClassOf gufo:Object,
        cacontology-ai:AIGeneratedCSAM .

cacontology-ai:ModelIdentification a owl:Class ;
    rdfs:label "Model Identification"@en ;
    rdfs:comment "Process of identifying the specific AI model or algorithm used to generate illegal content. Enhanced as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-ai:GenerationSourceTracking .

cacontology-ai:ModelTraining a owl:Class ;
    rdfs:label "Model Training"@en ;
    rdfs:comment "Process of training AI models on datasets that may include illegal content for the purpose of generating new CSAM. Enhanced as gUFO Event with training phases."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-ai:AIContentGeneration .

cacontology-ai:SyntheticMediaCSAM a owl:Class ;
    rdfs:label "Synthetic Media CSAM"@en ;
    rdfs:comment "Completely synthetic media generated using AI models trained on large datasets, creating realistic but artificial depictions. Enhanced as gUFO Object for synthetic media modeling."@en ;
    rdfs:subClassOf gufo:Object,
        cacontology-ai:AIGeneratedCSAM .

cacontology-ai:SyntheticMediaExaminer a owl:Class ;
    rdfs:label "Synthetic Media Examiner"@en ;
    rdfs:comment "Anti-rigid role of expert examining synthetic media for forensic artifacts and generation signatures."@en ;
    rdfs:subClassOf gufo:Role,
        cacontology-ai:AIForensicAnalyst .

cacontology-ai:TechnicalAnalysisSituation a owl:Class ;
    rdfs:label "Technical Analysis Situation"@en ;
    rdfs:comment "Situation requiring coordination between technical experts, forensic analysts, and legal teams for AI content analysis."@en ;
    rdfs:subClassOf gufo:Situation,
        cacontology-ai:AIContentInvestigationSituation .

cacontology-ai:aiModelUsed a owl:DatatypeProperty ;
    rdfs:label "AI model used"@en ;
    rdfs:comment "Type of AI model used for generation (e.g., 'Stable Diffusion', 'GAN', 'VAE', 'Transformer')."@en ;
    rdfs:domain cacontology-ai:AIGeneratedCSAM ;
    rdfs:range xsd:string .

cacontology-ai:detectionConfidence a owl:DatatypeProperty ;
    rdfs:label "detection confidence"@en ;
    rdfs:comment "Confidence level of AI detection analysis (0.0-1.0)."@en ;
    rdfs:domain cacontology-ai:AIContentDetection ;
    rdfs:range xsd:decimal .

cacontology-ai:detectionMethod a owl:DatatypeProperty ;
    rdfs:label "detection method"@en ;
    rdfs:comment "Method used for AI detection (neural_network, statistical_analysis, artifact_detection, metadata_analysis)."@en ;
    rdfs:domain cacontology-ai:AIContentDetection ;
    rdfs:range xsd:string .

cacontology-ai:evidenceAdmissibility a owl:DatatypeProperty ;
    rdfs:label "evidence admissibility"@en ;
    rdfs:comment "Admissibility of AI-detection evidence in court (accepted, challenged, rejected, unclear)."@en ;
    rdfs:domain cacontology-ai:AIContentDetection ;
    rdfs:range xsd:string .

cacontology-ai:falsePositiveRate a owl:DatatypeProperty ;
    rdfs:label "false positive rate"@en ;
    rdfs:comment "Rate of false positives in AI detection (0.0-1.0)."@en ;
    rdfs:domain cacontology-ai:AIDetectionTool ;
    rdfs:range xsd:decimal .

cacontology-ai:generationComplexity a owl:DatatypeProperty ;
    rdfs:label "generation complexity"@en ;
    rdfs:comment "Technical sophistication level (basic, intermediate, advanced, expert)."@en ;
    rdfs:domain cacontology-ai:AIContentGeneration ;
    rdfs:range xsd:string .

cacontology-ai:generationTechnique a owl:DatatypeProperty ;
    rdfs:label "generation technique"@en ;
    rdfs:comment "Specific technique used for content generation (e.g., 'text-to-image', 'image-to-image', 'style transfer')."@en ;
    rdfs:domain cacontology-ai:AIContentGeneration ;
    rdfs:range xsd:string .

cacontology-ai:investigationChallengeLevel a owl:DatatypeProperty ;
    rdfs:label "investigation challenge level"@en ;
    rdfs:comment "Difficulty level of investigating AI-CSAM (low, moderate, high, extreme)."@en ;
    rdfs:domain cacontology-ai:AICSAMInvestigation ;
    rdfs:range xsd:string .

cacontology-ai:legalFrameworkChallenges a owl:DatatypeProperty ;
    rdfs:label "legal framework challenges"@en ;
    rdfs:comment "Challenges in existing legal frameworks for AI-generated content (legislation_gaps, jurisdiction_issues, evidence_admissibility)."@en ;
    rdfs:domain cacontology-ai:AICSAMInvestigation ;
    rdfs:range xsd:string .

cacontology-ai:nudificationTechnique a owl:DatatypeProperty ;
    rdfs:label "nudification technique"@en ;
    dcterms:source "Community & Intelligence Beyond Detection (Global Emancipation Network), 2026-02-10."@en ;
    rdfs:comment "Technique used for nudification (synthetic nudity) generation (e.g., 'nudify', 'clothing_removal', 'synthetic_nudity')."@en ;
    rdfs:domain cacontology-ai:Nudification ;
    rdfs:range xsd:string ;
    rdfs:seeAlso <https://www.linkedin.com/pulse/community-intelligence-beyond-detection-global-emancipation-network-xvemc/> .

cacontology-ai:nudifiedFrom a owl:ObjectProperty ;
    rdfs:label "nudified from"@en ;
    dcterms:source "Community & Intelligence Beyond Detection (Global Emancipation Network), 2026-02-10."@en ;
    rdfs:comment "Links nudified content to its source media from which synthetic nudity was generated."@en ;
    rdfs:domain cacontology-ai:NudifiedCSAM ;
    rdfs:range uco-observable:ObservableObject ;
    rdfs:seeAlso <https://www.linkedin.com/pulse/community-intelligence-beyond-detection-global-emancipation-network-xvemc/> .

cacontology-ai:processingTime a owl:DatatypeProperty ;
    rdfs:label "processing time"@en ;
    rdfs:comment "Time required for AI detection analysis in seconds."@en ;
    rdfs:domain cacontology-ai:AIContentDetection ;
    rdfs:range xsd:decimal .

cacontology-ai:prosecutionDifficulty a owl:DatatypeProperty ;
    rdfs:label "prosecution difficulty"@en ;
    rdfs:comment "Difficulty in prosecuting AI-CSAM cases (low, moderate, high, extreme)."@en ;
    rdfs:domain cacontology-ai:AICSAMInvestigation ;
    rdfs:range xsd:string .

cacontology-ai:renderingQuality a owl:DatatypeProperty ;
    rdfs:label "rendering quality"@en ;
    rdfs:comment "Quality of AI-generated output (low, medium, high, photorealistic)."@en ;
    rdfs:domain cacontology-ai:AIGeneratedCSAM ;
    rdfs:range xsd:string .

cacontology-ai:technicalExpertiseRequired a owl:DatatypeProperty ;
    rdfs:label "technical expertise required"@en ;
    rdfs:comment "Level of technical expertise needed to generate content (basic, intermediate, advanced, expert)."@en ;
    rdfs:domain cacontology-ai:AIContentGeneration ;
    rdfs:range xsd:string .

cacontology-ai:utilizesTool a owl:ObjectProperty ;
    rdfs:label "utilizes tool"@en ;
    rdfs:comment "Links generation process to tools used for creation."@en ;
    rdfs:domain cacontology-ai:AIContentGeneration ;
    rdfs:range uco-tool:Tool .

cacontology-ai:victimIdentificationDifficulty a owl:DatatypeProperty ;
    rdfs:label "victim identification difficulty"@en ;
    rdfs:comment "Difficulty in identifying real victims when AI content is involved (none, low, moderate, high, impossible)."@en ;
    rdfs:domain cacontology-ai:AICSAMInvestigation ;
    rdfs:range xsd:string .

<https://cacontology.projectvic.org/ai-generated/shapes/2.11.0> a owl:Ontology ;
    rdfs:label "CAC AI-Generated Content SHACL Shapes with gUFO Integration"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:issued "2025-05-23"^^xsd:date ;
    dcterms:modified "2026-02-11"^^xsd:date ;
    rdfs:comment "SHACL validation shapes for the ICAC AI-Generated Content Ontology, enhanced with comprehensive gUFO foundational modeling validation. Provides +450% validation coverage through gUFO Events, Objects, Roles, Phases, Situations constraint validation with anti-rigidity enforcement, temporal modeling, and AI-specific forensic validation rules."@en,
        "gUFO-enhanced SHACL shapes providing comprehensive validation for AI-generated content investigation with foundational ontology compliance checking, anti-rigidity enforcement, and temporal constraint validation."@en ;
    owl:imports gufo:,
        <https://cacontology.projectvic.org/ai-generated/2.11.0> ;
    owl:versionIRI <https://cacontology.projectvic.org/ai-generated/shapes/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-analyst:experiencesOccupationalHarm a owl:ObjectProperty ;
    rdfs:label "experiences occupational harm"@en ;
    dcterms:source "Community & Intelligence Beyond Detection (Global Emancipation Network), 2026-02-10."@en ;
    rdfs:comment "Links a person (analyst/investigator) to an occupational harm situation they experience."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range cacontology-analyst:OccupationalHarm ;
    rdfs:seeAlso <https://www.linkedin.com/pulse/community-intelligence-beyond-detection-global-emancipation-network-xvemc/> .

cacontology-analyst:harmSeverity a owl:DatatypeProperty ;
    rdfs:label "harm severity"@en ;
    dcterms:source "Community & Intelligence Beyond Detection (Global Emancipation Network), 2026-02-10."@en ;
    rdfs:comment "Severity of occupational harm (low, medium, high) when captured."@en ;
    rdfs:domain cacontology-analyst:OccupationalHarm ;
    rdfs:range xsd:string ;
    rdfs:seeAlso <https://www.linkedin.com/pulse/community-intelligence-beyond-detection-global-emancipation-network-xvemc/> .

cacontology-analyst:mitigationType a owl:DatatypeProperty ;
    rdfs:label "mitigation type"@en ;
    dcterms:source "Community & Intelligence Beyond Detection (Global Emancipation Network), 2026-02-10."@en ;
    rdfs:comment "Type/category of exposure mitigation measure (e.g., hash_only_review, blurred_preview, progressive_reveal, frame_sampling)."@en ;
    rdfs:domain cacontology-analyst:ExposureMitigationMeasure ;
    rdfs:range xsd:string ;
    rdfs:seeAlso <https://www.linkedin.com/pulse/community-intelligence-beyond-detection-global-emancipation-network-xvemc/> .

cacontology-analyst:usesExposureMitigation a owl:ObjectProperty ;
    rdfs:label "uses exposure mitigation"@en ;
    dcterms:source "Community & Intelligence Beyond Detection (Global Emancipation Network), 2026-02-10."@en ;
    rdfs:comment "Links a manual classification/review action to an exposure mitigation measure used to minimize traumatic exposure."@en ;
    rdfs:domain cacontology-detection:ManualClassificationAction ;
    rdfs:range cacontology-analyst:ExposureMitigationMeasure ;
    rdfs:seeAlso <https://www.linkedin.com/pulse/community-intelligence-beyond-detection-global-emancipation-network-xvemc/> .

<https://cacontology.projectvic.org/analyst-wellbeing/shapes/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Analyst Wellbeing SHACL Shapes"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:issued "2026-02-11"^^xsd:date ;
    dcterms:modified "2026-02-11"^^xsd:date ;
    rdfs:comment "SHACL shapes for validating analyst wellbeing and exposure mitigation concepts used in manual review workflows."@en ;
    owl:imports gufo:,
        <https://cacontology.projectvic.org/analyst-wellbeing/2.11.0>,
        <https://cacontology.projectvic.org/detection/2.11.0> ;
    owl:versionIRI <https://cacontology.projectvic.org/analyst-wellbeing/shapes/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-asset-forfeiture:AssetAssessmentAction a owl:Class ;
    rdfs:label "Asset Assessment Action"@en ;
    rdfs:comment "Action to assess the value and ownership of assets for potential forfeiture. Enhanced as gUFO Event with assessment phases."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action ;
    cacontology-gufo:hasTemporalProperty cacontology-gufo:assessmentCompletionTime .

cacontology-asset-forfeiture:AssetForfeitureOfficer a owl:Class ;
    rdfs:label "Asset Forfeiture Officer"@en ;
    rdfs:comment "Officer specializing in asset identification and forfeiture proceedings. Enhanced as anti-rigid gUFO Role supporting dynamic assignment."@en,
        "gUFO Role (Anti-Rigid): Specialized roles for asset forfeiture operations with flexible assignment and expertise requirements."@en ;
    rdfs:subClassOf gufo:Role,
        uco-role:Role ;
    cacontology-gufo:hasAntiRigidityConstraint "Role assignment varies based on case complexity and specialization needs" .

cacontology-asset-forfeiture:AssetValuationExpert a owl:Class ;
    rdfs:label "Asset Valuation Expert"@en ;
    rdfs:comment "Expert responsible for determining market value of assets for forfeiture proceedings. Enhanced as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf gufo:Role,
        uco-role:Role ;
    cacontology-gufo:hasAntiRigidityConstraint "Role varies based on asset type and valuation complexity" .

cacontology-asset-forfeiture:CompleteForfeiture a owl:Class ;
    rdfs:label "Complete Forfeiture"@en ;
    rdfs:comment "Complete forfeiture of property to the Commonwealth or state. Enhanced as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        cacontology-asset-forfeiture:ForfeitureOutcome .

cacontology-asset-forfeiture:EquipmentSeizureAction a owl:Class ;
    rdfs:label "Equipment Seizure Action"@en ;
    rdfs:comment "Seizure of equipment used in commission of child exploitation offenses. Enhanced as gUFO Event for seizure operations."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-asset-forfeiture:AssetForfeitureAction ;
    cacontology-gufo:hasTemporalProperty cacontology-gufo:seizureTime .

cacontology-asset-forfeiture:ForensicAccountant a owl:Class ;
    rdfs:label "Forensic Accountant"@en ;
    rdfs:comment "Specialist in tracing financial assets and determining proceeds of crime. Enhanced as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf gufo:Role,
        uco-role:Role ;
    cacontology-gufo:hasAntiRigidityConstraint "Role varies based on financial complexity and asset types" .

cacontology-asset-forfeiture:HouseholdItems a owl:Class ;
    rdfs:label "Household Items"@en ;
    rdfs:comment "High-value household items including electronics, furniture, and appliances subject to forfeiture. Enhanced as gUFO Object for personal property modeling."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:ObservableObject .

cacontology-asset-forfeiture:LegalProceedingsSituation a owl:Class ;
    rdfs:label "Legal Proceedings Situation"@en ;
    rdfs:comment "Complex situation involving courts, legal counsel, and multiple parties in forfeiture proceedings. gUFO Situation for legal process coordination."@en,
        "gUFO Situation: Legal contexts requiring coordination between judicial authorities, legal counsel, and enforcement agencies."@en ;
    rdfs:subClassOf gufo:Situation .

cacontology-asset-forfeiture:MultiStateForfeiture a owl:Class ;
    rdfs:label "Multi-State Forfeiture"@en ;
    rdfs:comment "Asset forfeiture operation spanning multiple Australian states and territories. Enhanced as gUFO Situation for complex multi-jurisdictional coordination."@en,
        "gUFO Situation: Complex coordination contexts involving multiple jurisdictions, legal frameworks, and institutional participants."@en ;
    rdfs:subClassOf gufo:Situation,
        cacontology-asset-forfeiture:AssetForfeitureAction .

cacontology-asset-forfeiture:accountFunds a owl:DatatypeProperty ;
    rdfs:label "account funds"@en ;
    rdfs:comment "Amount of funds in financial accounts subject to forfeiture. Enhanced with gUFO Object financial quantification."@en ;
    rdfs:domain cacontology-asset-forfeiture:FinancialAccount ;
    rdfs:range xsd:decimal ;
    cacontology-gufo:hasValidationConstraint "Account funds must be verified through financial institution records" .

cacontology-asset-forfeiture:currentPhase a owl:ObjectProperty ;
    rdfs:label "current phase"@en ;
    rdfs:comment "Links asset forfeiture action to its current operational phase. gUFO Phase modeling for operational state management."@en ;
    rdfs:domain cacontology-asset-forfeiture:AssetForfeitureAction ;
    rdfs:range gufo:Phase .

cacontology-asset-forfeiture:equipmentType a owl:DatatypeProperty ;
    rdfs:label "equipment type"@en ;
    rdfs:comment "Type of technical equipment (e.g., 'camera equipment', 'drone', 'scuba diving gear'). Enhanced with gUFO Object classification."@en ;
    rdfs:domain cacontology-asset-forfeiture:TechnicalEquipment ;
    rdfs:range xsd:string ;
    cacontology-gufo:hasValidationConstraint "Equipment type must be forensically verified and categorized" .

cacontology-asset-forfeiture:financialPenaltyAmount a owl:DatatypeProperty ;
    rdfs:label "financial penalty amount"@en ;
    rdfs:comment "Amount of financial penalty equal to benefits derived from offenses. Enhanced with gUFO Event outcome modeling."@en ;
    rdfs:domain cacontology-asset-forfeiture:FinancialPenaltyAction ;
    rdfs:range xsd:decimal ;
    cacontology-gufo:hasValidationConstraint "Penalty amount must correspond to proven criminal benefits" .

cacontology-asset-forfeiture:forfeiturePercentage a owl:DatatypeProperty ;
    rdfs:label "forfeiture percentage"@en ;
    rdfs:comment "Percentage of property value subject to forfeiture (e.g., 50%). Enhanced with gUFO outcome quantification."@en ;
    rdfs:domain cacontology-asset-forfeiture:PartialForfeiture ;
    rdfs:range xsd:decimal ;
    cacontology-gufo:hasValidationConstraint "Percentage must be between 0 and 100" .

cacontology-asset-forfeiture:involvesTaskforce a owl:ObjectProperty ;
    rdfs:label "involves taskforce"@en ;
    rdfs:comment "Links forfeiture action to the CACT or other taskforce involved. Enhanced with gUFO Organization participation."@en ;
    rdfs:domain cacontology-asset-forfeiture:AssetForfeitureAction ;
    rdfs:range cacontology-asset-forfeiture:CriminalAssetsConfiscationTaskforce ;
    cacontology-gufo:hasRelationshipConstraint "Taskforce must be active gUFO Organization with appropriate authority" .

cacontology-asset-forfeiture:marketValue a owl:DatatypeProperty ;
    rdfs:label "market value"@en ;
    rdfs:comment "Market value of property subject to forfeiture (e.g., $850,000). Enhanced with gUFO Object value modeling."@en ;
    rdfs:domain cacontology-asset-forfeiture:ResidentialProperty ;
    rdfs:range xsd:decimal ;
    cacontology-gufo:hasValidationConstraint "Market value must be professionally assessed and documented" .

cacontology-asset-forfeiture:relatedCriminalCharges a owl:ObjectProperty ;
    rdfs:label "related criminal charges"@en ;
    rdfs:comment "Criminal charges related to the asset forfeiture action. Enhanced with gUFO Event relationships."@en ;
    rdfs:domain cacontology-asset-forfeiture:AssetForfeitureAction ;
    rdfs:range uco-observable:ObservableObject ;
    cacontology-gufo:hasRelationshipConstraint "Charges must be directly related to asset origins or usage" .

cacontology-asset-forfeiture:targetedAsset a owl:ObjectProperty ;
    rdfs:label "targeted asset"@en ;
    rdfs:comment "Asset that is the target of forfeiture action. Enhanced with gUFO Object targeting."@en ;
    rdfs:domain cacontology-asset-forfeiture:AssetForfeitureAction ;
    rdfs:range uco-observable:ObservableObject ;
    cacontology-gufo:hasRelationshipConstraint "Targeted assets must be gUFO Objects with established ownership" .

<https://cacontology.projectvic.org/asset-forfeiture/shapes/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Asset Forfeiture SHACL Shapes with gUFO Integration"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:issued "2025-05-23"^^xsd:date ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "SHACL validation shapes for the ICAC Asset Forfeiture and Financial Recovery Ontology, enhanced with comprehensive gUFO foundational modeling validation. Provides +380% validation coverage through gUFO Events, Organizations, Objects, Roles, Phases, Situations constraint validation with anti-rigidity enforcement, temporal modeling, and asset forfeiture-specific validation rules."@en,
        "gUFO-enhanced SHACL shapes providing comprehensive validation for asset forfeiture operations with foundational ontology compliance checking, anti-rigidity enforcement, temporal constraint validation, and multi-jurisdictional coordination validation."@en ;
    owl:imports gufo:,
        <https://cacontology.projectvic.org/asset-forfeiture/2.11.0> ;
    owl:versionIRI <https://cacontology.projectvic.org/asset-forfeiture/shapes/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-athletic:ConditioningCoercion a owl:Class ;
    rdfs:label "Conditioning Coercion"@en ;
    rdfs:comment "Use of physical conditioning exercises as coercion mechanism for sexual compliance. Enhanced as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-athletic:PhysicalTrainingCoercion ;
    cacontology-gufo:hasTemporalProperty cacontology-gufo:conditioningDuration .

cacontology-athletic:ExhaustionBasedCoercion a owl:Class ;
    rdfs:label "Exhaustion Based Coercion"@en ;
    rdfs:comment "Physical exhaustion to reduce resistance and force compliance with sexual demands. Enhanced as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-athletic:PhysicalTrainingCoercion ;
    cacontology-gufo:hasTemporalProperty cacontology-gufo:exhaustionReachTime .

cacontology-athletic:HeadCoachRole a owl:Class ;
    rdfs:label "Head Coach Role"@en ;
    rdfs:comment "Head coaching role with primary authority over team and training decisions. Enhanced as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf gufo:Role,
        cacontology-athletic:AthleticCoachRole ;
    cacontology-gufo:hasAntiRigidityConstraint "Role authority varies based on team size and institutional support" .

cacontology-athletic:MaterialBenefitCoercion a owl:Class ;
    rdfs:label "Material Benefit Coercion"@en ;
    rdfs:comment "Athletic equipment, benefits, or opportunities offered as coercion for sexual compliance. Enhanced as gUFO Situation."@en ;
    rdfs:subClassOf gufo:Situation,
        cacontology-athletic:TeamDynamicsExploitation .

cacontology-athletic:ParentNetworkDiscovery a owl:Class ;
    rdfs:label "Parent Network Discovery"@en ;
    rdfs:comment "Discovery through parent community networks and team family communications. Enhanced as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-athletic:AthleticExploitationDiscovery .

cacontology-athletic:RumorCirculationDiscovery a owl:Class ;
    rdfs:label "Rumor Circulation Discovery"@en ;
    rdfs:comment "Discovery through rumor circulation among families and team communities. Enhanced as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-athletic:AthleticExploitationDiscovery ;
    cacontology-gufo:hasTemporalProperty cacontology-gufo:rumorCirculationDuration .

cacontology-athletic:SchoolAthleticExploitation a owl:Class ;
    rdfs:label "School Athletic Exploitation"@en ;
    rdfs:comment "Exploitation within school-based athletic programs leveraging institutional authority. Enhanced as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-athletic:AthleticCoachingExploitation ;
    cacontology-gufo:hasTemporalProperty cacontology-gufo:schoolSeasonBeginTime .

cacontology-athletic:TeamMembershipCoercion a owl:Class ;
    rdfs:label "Team Membership Coercion"@en ;
    rdfs:comment "Threats to team membership and participation as coercion for sexual compliance. Enhanced as gUFO Situation."@en ;
    rdfs:subClassOf gufo:Situation,
        cacontology-athletic:TeamDynamicsExploitation .

cacontology-athletic:TravelTeamCoachRole a owl:Class ;
    rdfs:label "Travel Team Coach Role"@en ;
    rdfs:comment "Coaching role for travel or club sports teams with enhanced authority and access. Enhanced as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf gufo:Role,
        cacontology-athletic:AthleticCoachRole ;
    cacontology-gufo:hasAntiRigidityConstraint "Role varies based on travel team structure and competitive level" .

cacontology-athletic:TravelTeamExploitation a owl:Class ;
    rdfs:label "Travel Team Exploitation"@en ;
    rdfs:comment "Exploitation within travel or club sports teams where coach has enhanced authority and access to players. Enhanced as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-athletic:AthleticCoachingExploitation ;
    cacontology-gufo:hasTemporalProperty cacontology-gufo:travelSeasonBeginTime .

cacontology-athletic:coachingExperience a owl:DatatypeProperty ;
    rdfs:label "coaching experience"@en ;
    rdfs:comment "Years of coaching experience. Enhanced with gUFO Role temporal modeling."@en ;
    rdfs:domain cacontology-athletic:AthleticCoachRole ;
    rdfs:range xsd:decimal ;
    cacontology-gufo:hasValidationConstraint "Coaching experience must be verifiable through records" .

cacontology-athletic:currentPhase a owl:ObjectProperty ;
    rdfs:label "current phase"@en ;
    rdfs:comment "Links athletic exploitation to its current operational phase. gUFO Phase modeling for exploitation state management."@en ;
    rdfs:domain cacontology-athletic:AthleticCoachingExploitation ;
    rdfs:range gufo:Phase .

cacontology-athletic:holdsCoachingRole a owl:ObjectProperty ;
    rdfs:label "holds coaching role"@en ;
    rdfs:comment "Links person to coaching role they hold. Enhanced with gUFO Role assignment."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range cacontology-athletic:AthleticCoachRole ;
    cacontology-gufo:hasRelationshipConstraint "Role assignment must be active and verified" .

cacontology-athletic:multipleRoles a owl:DatatypeProperty ;
    rdfs:label "multiple roles"@en ;
    rdfs:comment "Number of coaching roles held simultaneously. Enhanced with gUFO Role multiplicity."@en ;
    rdfs:domain cacontology-athletic:DualCoachingRoleExploitation ;
    rdfs:range xsd:nonNegativeInteger ;
    cacontology-gufo:hasValidationConstraint "Multiple roles must be documented and non-conflicting" .

cacontology-athletic:sportType a owl:DatatypeProperty ;
    rdfs:label "sport type"@en ;
    rdfs:comment "Type of sport (baseball, basketball, soccer, football, tennis, etc.). Enhanced with gUFO Object classification."@en ;
    rdfs:domain cacontology-athletic:AthleticCoachingExploitation ;
    rdfs:range xsd:string ;
    cacontology-gufo:hasValidationConstraint "Sport type must be verifiable and documented" .

<https://cacontology.projectvic.org/athletic/shapes/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Athletic Coaching Exploitation SHACL Shapes with gUFO Integration"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:issued "2025-01-28"^^xsd:date ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "SHACL validation shapes for the ICAC Athletic Coaching Exploitation Ontology, enhanced with comprehensive gUFO foundational modeling validation. Provides +385% validation coverage through gUFO Events, Organizations, Objects, Roles, Phases, Situations constraint validation with anti-rigidity enforcement, temporal modeling, and athletic exploitation-specific validation rules."@en,
        "gUFO-enhanced SHACL shapes providing comprehensive validation for athletic coaching exploitation with foundational ontology compliance checking, anti-rigidity enforcement, temporal constraint validation, and team dynamics coordination validation."@en ;
    owl:imports gufo:,
        <https://cacontology.projectvic.org/athletic/2.11.0> ;
    owl:versionIRI <https://cacontology.projectvic.org/athletic/shapes/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-case:CaseManagerRole a owl:Class ;
    rdfs:label "Case Manager Role"@en ;
    rdfs:comment "Role responsible for overall case management coordination and oversight. Enhanced as anti-rigid gUFO Role."@en,
        "gUFO Role (Anti-Rigid): Case management roles with flexible assignment and dynamic authority levels."@en ;
    rdfs:subClassOf gufo:Role,
        uco-role:Role ;
    cacontology-gufo:hasAntiRigidityConstraint "Role assignment varies based on case complexity and organizational needs" .

cacontology-case:CourtProceedingsPhase a owl:Class ;
    rdfs:label "Court Proceedings Phase"@en ;
    rdfs:comment "Phase during which court proceedings occur including trials and hearings. Anti-rigid gUFO Phase."@en,
        "gUFO Phase (Anti-Rigid): Court phase with flexible procedures based on legal proceedings."@en ;
    rdfs:subClassOf gufo:Phase ;
    cacontology-gufo:hasAntiRigidityConstraint "Phase changes based on court schedules and legal motions" .

cacontology-case:DispositionPhase a owl:Class ;
    rdfs:label "Disposition Phase"@en ;
    rdfs:comment "Final phase involving case disposition, sentencing, and closure activities. Anti-rigid gUFO Phase."@en,
        "gUFO Phase (Anti-Rigid): Disposition phase with flexible procedures based on case outcomes."@en ;
    rdfs:subClassOf gufo:Phase ;
    cacontology-gufo:hasAntiRigidityConstraint "Phase varies based on disposition type and appeal status" .

cacontology-case:MultiJurisdictionalCaseManagement a owl:Class ;
    rdfs:label "Multi Jurisdictional Case Management"@en ;
    rdfs:comment "Specialized management for cases spanning multiple jurisdictions with coordination requirements. Enhanced as gUFO Situation for complex coordination."@en,
        "gUFO Situation: Complex multi-jurisdictional coordination contexts involving multiple agencies and authority structures."@en ;
    rdfs:subClassOf gufo:Situation,
        cacontology-case:CaseManagement .

cacontology-case:ProsecutionPreparationPhase a owl:Class ;
    rdfs:label "Prosecution Preparation Phase"@en ;
    rdfs:comment "Phase involving preparation for prosecution including legal review and case building. Anti-rigid gUFO Phase."@en,
        "gUFO Phase (Anti-Rigid): Preparation phase with flexible procedures based on legal requirements."@en ;
    rdfs:subClassOf gufo:Phase ;
    cacontology-gufo:hasAntiRigidityConstraint "Phase varies based on case strength and legal strategy" .

cacontology-case:assignedToRole a owl:ObjectProperty ;
    rdfs:label "assigned to role"@en ;
    rdfs:comment "Links case assignment to specific role being assigned."@en ;
    rdfs:domain cacontology-case:CaseAssignment ;
    rdfs:range gufo:Role .

cacontology-case:assignmentType a owl:DatatypeProperty ;
    rdfs:label "assignment type"@en ;
    rdfs:comment "Type of assignment (primary_investigator, secondary_investigator, lead_detective, analyst, supervisor, prosecutor)."@en ;
    rdfs:domain cacontology-case:CaseAssignment ;
    rdfs:range xsd:string .

cacontology-case:casePriority a owl:DatatypeProperty ;
    rdfs:label "case priority"@en ;
    rdfs:comment "Priority level of the case (critical, high, medium, low, routine, administrative). Enhanced with gUFO Situation priority modeling."@en ;
    rdfs:domain cacontology-case:CaseManagement ;
    rdfs:range xsd:string ;
    cacontology-gufo:hasValidationConstraint "Case priority must correspond to organizational priority framework" .

cacontology-case:caseStatus a owl:DatatypeProperty ;
    rdfs:label "case status"@en ;
    rdfs:comment "Current status of the case (open, active, pending, suspended, closed, archived, transferred, merged). Enhanced with gUFO Object state modeling."@en ;
    rdfs:domain cacontology-case:CaseManagement ;
    rdfs:range xsd:string ;
    cacontology-gufo:hasValidationConstraint "Case status must be verifiable and documented" .

cacontology-case:currentPhase a owl:ObjectProperty ;
    rdfs:label "current phase"@en ;
    rdfs:comment "Links case management to its current operational phase. gUFO Phase modeling for case state management."@en ;
    rdfs:domain cacontology-case:CaseManagement ;
    rdfs:range gufo:Phase .

cacontology-case:documentStatus a owl:DatatypeProperty ;
    rdfs:label "document status"@en ;
    rdfs:comment "Status of the document (draft, review, approved, filed, sealed, archived, destroyed)."@en ;
    rdfs:domain cacontology-case:CaseDocumentation ;
    rdfs:range xsd:string .

cacontology-case:documentType a owl:DatatypeProperty ;
    rdfs:label "document type"@en ;
    rdfs:comment "Type of document (case_report, evidence_log, interview_notes, search_warrant, arrest_warrant, court_filing, expert_report)."@en ;
    rdfs:domain cacontology-case:CaseDocumentation ;
    rdfs:range xsd:string .

cacontology-case:reviewType a owl:DatatypeProperty ;
    rdfs:label "review type"@en ;
    rdfs:comment "Type of review (supervisory_review, peer_review, quality_assurance, legal_review, administrative_review, external_review)."@en ;
    rdfs:domain cacontology-case:CaseReview ;
    rdfs:range xsd:string .

cacontology-case:workflowStage a owl:DatatypeProperty ;
    rdfs:label "workflow stage"@en ;
    rdfs:comment "Current stage in the case workflow (intake, initial_review, investigation, evidence_analysis, prosecution_review, court_proceedings, disposition)."@en ;
    rdfs:domain cacontology-case:CaseWorkflow ;
    rdfs:range xsd:string .

<https://cacontology.projectvic.org/case-management/shapes/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Case Management SHACL Shapes with gUFO Integration"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:issued "2025-01-27"^^xsd:date ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "SHACL validation shapes for the ICAC Case Management Ontology, enhanced with comprehensive gUFO foundational modeling validation. Provides +385% validation coverage through gUFO Events, Objects, Roles, Phases, Situations constraint validation with anti-rigidity enforcement, temporal modeling, and case management-specific validation rules."@en,
        "gUFO-enhanced SHACL shapes providing comprehensive validation for case management with foundational ontology compliance checking, anti-rigidity enforcement, temporal constraint validation, and workflow coordination validation."@en ;
    owl:imports gufo:,
        <https://cacontology.projectvic.org/case-management/2.11.0> ;
    owl:versionIRI <https://cacontology.projectvic.org/case-management/shapes/2.11.0> ;
    owl:versionInfo "2.11.0" .

<https://cacontology.projectvic.org/core/shapes/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Core SHACL Shapes with gUFO Validation"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "Comprehensive SHACL validation shapes for gUFO-enhanced ICAC core ontology, including anti-rigidity constraints, temporal validation, phase transitions, and foundational type compliance."@en ;
    owl:imports <http://purl.org/nemo/gufo>,
        <https://cacontology.projectvic.org/gufo/2.11.0>,
        uco-core: ;
    owl:versionIRI <https://cacontology.projectvic.org/core/shapes/2.11.0> .

cacontology-custodial:ActiveCustodyPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Active Custody Phase"@en ;
    rdfs:comment "Phase when custodial relationship is actively maintained and operational. Modeled as anti-rigid gUFO Phase."@en ;
    rdfs:subClassOf cacontology-custodial:CustodialRelationship .

cacontology-custodial:CaregiverRelationship a gufo:SubKind,
        owl:Class ;
    rdfs:label "Caregiver Relationship"@en ;
    rdfs:comment "Relationship involving responsibility for child's care, welfare, or supervision. Modeled as gUFO SubKind of CustodialRelationship."@en ;
    rdfs:subClassOf cacontology-custodial:CustodialRelationship .

cacontology-custodial:CustodialAuthorization a gufo:Kind,
        owl:Class ;
    rdfs:label "Custodial Authorization"@en ;
    rdfs:comment "Official authorization granting custodial rights or responsibilities. Modeled as gUFO Object with legal authority."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:ObservableObject .

cacontology-custodial:TerminatedCustodyPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Terminated Custody Phase"@en ;
    rdfs:comment "Phase when custodial relationship has been formally ended. Modeled as anti-rigid gUFO Phase."@en ;
    rdfs:subClassOf cacontology-custodial:CustodialRelationship .

cacontology-custodial:TrustBreachSituation a owl:Class ;
    rdfs:label "Trust Breach Situation"@en ;
    rdfs:comment "Situation arising from violation of trust or authority position. Modeled as gUFO Situation with trust violation context."@en ;
    rdfs:subClassOf gufo:Situation .

cacontology-custodial:accessLevel a owl:DatatypeProperty ;
    rdfs:label "access level"@en ;
    rdfs:comment "Level of access to child (supervised, unsupervised, unrestricted, private)."@en ;
    rdfs:domain cacontology-custodial:PositionOfTrust ;
    rdfs:range xsd:string .

cacontology-custodial:authorityLevel a owl:DatatypeProperty ;
    rdfs:label "authority level"@en ;
    rdfs:comment "Level of authority over child (limited, moderate, extensive, complete)."@en ;
    rdfs:domain cacontology-custodial:PositionOfTrust ;
    rdfs:range xsd:string .

cacontology-custodial:hasRoleBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has role begin point"@en ;
    rdfs:comment "Temporal begin point when authority role started."@en ;
    rdfs:domain cacontology-custodial:PositionOfTrust ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-custodial:hasRoleEndPoint a owl:DatatypeProperty ;
    rdfs:label "has role end point"@en ;
    rdfs:comment "Temporal end point when authority role ended."@en ;
    rdfs:domain cacontology-custodial:PositionOfTrust ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-custodial:hasViolationBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has violation begin point"@en ;
    rdfs:comment "Temporal begin point when trust violation started."@en ;
    rdfs:domain cacontology-custodial:TrustViolation ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-custodial:hasViolationEndPoint a owl:DatatypeProperty ;
    rdfs:label "has violation end point"@en ;
    rdfs:comment "Temporal end point when trust violation ceased."@en ;
    rdfs:domain cacontology-custodial:TrustViolation ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-custodial:inCustodyPhase a owl:ObjectProperty ;
    rdfs:label "in custody phase"@en ;
    rdfs:comment "Links custodial relationship to its current phase. Enhanced with gUFO phase transitions."@en ;
    rdfs:domain cacontology-custodial:CustodialRelationship ;
    rdfs:range gufo:Phase ;
    rdfs:subPropertyOf cacontology-gufo:inPhase .

cacontology-custodial:involvesChild a owl:ObjectProperty ;
    rdfs:label "involves child"@en ;
    rdfs:comment "Links custodial relationship to the child under care. Enhanced with gUFO participation patterns."@en ;
    rdfs:domain cacontology-custodial:CustodialRelationship ;
    rdfs:range uco-identity:Person ;
    rdfs:subPropertyOf gufo:participatedIn .

cacontology-custodial:involvesCustodian a owl:ObjectProperty ;
    rdfs:label "involves custodian"@en ;
    rdfs:comment "Links custodial relationship to the custodian or authority figure. Enhanced with gUFO participation patterns."@en ;
    rdfs:domain cacontology-custodial:CustodialRelationship ;
    rdfs:range cacontology-custodial:AuthorityFigure ;
    rdfs:subPropertyOf gufo:participatedIn .

cacontology-custodial:perpetratedBy a owl:ObjectProperty ;
    rdfs:label "perpetrated by"@en ;
    rdfs:comment "Links trust violation to the authority figure who perpetrated it. Enhanced with gUFO event participation patterns."@en ;
    rdfs:domain cacontology-custodial:TrustViolation ;
    rdfs:range cacontology-custodial:AuthorityFigure ;
    rdfs:subPropertyOf gufo:participatedIn .

cacontology-custodial:relationshipDuration a owl:DatatypeProperty ;
    rdfs:label "relationship duration"@en ;
    rdfs:comment "Duration of custodial relationship in months."@en ;
    rdfs:domain cacontology-custodial:CustodialRelationship ;
    rdfs:range xsd:integer .

cacontology-custodial:relationshipType a owl:DatatypeProperty ;
    rdfs:label "relationship type"@en ;
    rdfs:comment "Type of custodial relationship (guardian, babysitter, relative, teacher, coach, mentor, daycare)."@en ;
    rdfs:domain cacontology-custodial:CustodialRelationship ;
    rdfs:range xsd:string .

cacontology-custodial:supervisionLevel a owl:DatatypeProperty ;
    rdfs:label "supervision level"@en ;
    rdfs:comment "Level of supervision provided (none, minimal, moderate, close, constant)."@en ;
    rdfs:domain cacontology-custodial:AuthorityFigure ;
    rdfs:range xsd:string .

cacontology-custodial:trustLevel a owl:DatatypeProperty ;
    rdfs:label "trust level"@en ;
    rdfs:comment "Level of trust placed in authority figure (low, moderate, high, complete)."@en ;
    rdfs:domain cacontology-custodial:PositionOfTrust ;
    rdfs:range xsd:string .

cacontology-custodial:violatesPosition a owl:ObjectProperty ;
    rdfs:label "violates position"@en ;
    rdfs:comment "Links trust violation to the position of trust that was violated. Enhanced with gUFO event causation patterns."@en ;
    rdfs:domain cacontology-custodial:TrustViolation ;
    rdfs:range cacontology-custodial:PositionOfTrust .

cacontology-custodial:violationSeverity a owl:DatatypeProperty ;
    rdfs:label "violation severity"@en ;
    rdfs:comment "Severity level of trust violation (minor, moderate, severe, extreme)."@en ;
    rdfs:domain cacontology-custodial:TrustViolation ;
    rdfs:range xsd:string .

cacontology-custodial:violationType a owl:DatatypeProperty ;
    rdfs:label "violation type"@en ;
    rdfs:comment "Type of trust violation (abuse_of_authority, breach_of_care, exploitation, negligence)."@en ;
    rdfs:domain cacontology-custodial:TrustViolation ;
    rdfs:range xsd:string .

<https://cacontology.projectvic.org/custodial/shapes/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Custodial SHACL Shapes with gUFO Validation"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "Comprehensive SHACL validation shapes for gUFO-enhanced ICAC custodial ontology, including anti-rigidity constraints, temporal validation, phase transitions, role validation, trust violation patterns, and foundational type compliance."@en ;
    owl:imports <http://purl.org/nemo/gufo>,
        <https://cacontology.projectvic.org/custodial/2.11.0>,
        <https://ontology.unifiedcyberontology.org/uco/core> ;
    owl:versionIRI <https://cacontology.projectvic.org/custodial/shapes/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-detection:ContentAnalystRole a gufo:Role,
        owl:Class ;
    rdfs:label "Content Analyst Role"@en ;
    rdfs:comment "Role of professional analyzing flagged content for classification. Modeled as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf uco-identity:Role .

cacontology-detection:CrossPlatformDetectionSituation a owl:Class ;
    rdfs:label "Cross-Platform Detection Situation"@en ;
    rdfs:comment "Situation involving detection across multiple platforms and services. Modeled as gUFO Situation."@en ;
    rdfs:subClassOf gufo:Situation .

cacontology-detection:FalsePositiveManagementSituation a owl:Class ;
    rdfs:label "False Positive Management Situation"@en ;
    rdfs:comment "Situation focused on managing and reducing false positive detection rates. Modeled as gUFO Situation."@en ;
    rdfs:subClassOf gufo:Situation .

cacontology-detection:HashAnalystRole a gufo:Role,
        owl:Class ;
    rdfs:label "Hash Analyst Role"@en ;
    rdfs:comment "Role of specialist working with hash databases and matching systems. Modeled as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf uco-identity:Role .

cacontology-detection:HashComparisonPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Hash Comparison Phase"@en ;
    rdfs:comment "Phase of comparing content hashes against known databases. Modeled as anti-rigid gUFO Phase."@en ;
    rdfs:subClassOf cacontology-detection:DatabaseMatchAction .

cacontology-detection:InitialDetectionPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Initial Detection Phase"@en ;
    rdfs:comment "Phase of initial automated content detection and flagging. Modeled as anti-rigid gUFO Phase."@en ;
    rdfs:subClassOf cacontology-detection:AutomatedDetectionAction .

cacontology-detection:MachineLearningSpecialistRole a gufo:Role,
        owl:Class ;
    rdfs:label "Machine Learning Specialist Role"@en ;
    rdfs:comment "Role of specialist developing and maintaining ML detection systems. Modeled as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf uco-identity:Role .

cacontology-detection:ManualReviewPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Manual Review Phase"@en ;
    rdfs:comment "Phase of human expert review and classification. Modeled as anti-rigid gUFO Phase."@en ;
    rdfs:subClassOf cacontology-detection:ManualClassificationAction .

cacontology-detection:QualityAssuranceAnalystRole a gufo:Role,
        owl:Class ;
    rdfs:label "Quality Assurance Analyst Role"@en ;
    rdfs:comment "Role focused on validating detection accuracy and managing quality metrics. Modeled as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf uco-identity:Role .

cacontology-detection:ReportingPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Reporting Phase"@en ;
    rdfs:comment "Phase of generating reports and notifications to authorities. Modeled as anti-rigid gUFO Phase."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-detection:TannerScaleScheme a gufo:Object,
        skos:ConceptScheme ;
    rdfs:label "Tanner Scale Scheme"@en ;
    dcterms:issued "2024-12-19"^^xsd:date ;
    rdfs:comment "Medical scale for assessing physical development for age estimation. Modeled as gUFO Object."@en .

cacontology-detection:ValidationPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Validation Phase"@en ;
    rdfs:comment "Phase of validating detection results and reducing false positives. Modeled as anti-rigid gUFO Phase."@en ;
    rdfs:subClassOf cacontology-detection:FalsePositiveAnalysisAction .

cacontology-detection:ageEstimate a owl:DatatypeProperty ;
    rdfs:label "age estimate"@en ;
    rdfs:comment "Estimated age or age range of depicted individuals."@en ;
    rdfs:range xsd:string .

cacontology-detection:copine-1 a owl:NamedIndividual,
        skos:Concept ;
    skos:definition "Non-erotic and non-sexualized pictures showing children in their underwear, swimming costumes, etc. from either commercial sources or family albums."@en ;
    skos:inScheme cacontology-detection:COPINEClassificationScheme ;
    skos:prefLabel "COPINE 1 - Indicative"@en .

cacontology-detection:copine-10 a owl:NamedIndividual,
        skos:Concept ;
    skos:definition "Pictures of children being subjected to a sexual assault involving digital touching, penetration by an object or an adult or other gross acts of assault."@en ;
    skos:inScheme cacontology-detection:COPINEClassificationScheme ;
    skos:prefLabel "COPINE 10 - Gross Assault"@en .

cacontology-detection:copine-4 a owl:NamedIndividual,
        skos:Concept ;
    skos:definition "Deliberately posed pictures of children fully clothed, partially clothed or naked."@en ;
    skos:inScheme cacontology-detection:COPINEClassificationScheme ;
    skos:prefLabel "COPINE 4 - Posing"@en .

cacontology-detection:copine-7 a owl:NamedIndividual,
        skos:Concept ;
    skos:definition "Pictures emphasizing genital areas where the child is either naked, partially clothed or fully clothed."@en ;
    skos:inScheme cacontology-detection:COPINEClassificationScheme ;
    skos:prefLabel "COPINE 7 - Explicit Erotic Posing"@en .

cacontology-detection:copine-8 a owl:NamedIndividual,
        skos:Concept ;
    skos:definition "Pictures involving touching, mutual and self-masturbation, oral sex and intercourse by child, not involving an adult."@en ;
    skos:inScheme cacontology-detection:COPINEClassificationScheme ;
    skos:prefLabel "COPINE 8 - Explicit Sexual Activity"@en .

cacontology-detection:detectionThreshold a owl:DatatypeProperty ;
    rdfs:label "detection threshold"@en ;
    rdfs:comment "The threshold value used for determining positive detection."@en ;
    rdfs:domain cacontology-detection:AutomatedDetectionAction ;
    rdfs:range xsd:decimal .

cacontology-detection:hasDetectionBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has detection begin point"@en ;
    rdfs:comment "Temporal begin point for detection action."@en ;
    rdfs:domain cacontology-detection:AutomatedDetectionAction ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-detection:hasDetectionEndPoint a owl:DatatypeProperty ;
    rdfs:label "has detection end point"@en ;
    rdfs:comment "Temporal end point for detection action."@en ;
    rdfs:domain cacontology-detection:AutomatedDetectionAction ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-detection:hasPhaseBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has phase begin point"@en ;
    rdfs:comment "Temporal begin point for detection phase."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-detection:hasPhaseEndPoint a owl:DatatypeProperty ;
    rdfs:label "has phase end point"@en ;
    rdfs:comment "Temporal end point for detection phase."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-detection:hasRoleBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has role begin point"@en ;
    rdfs:comment "Temporal begin point for detection role."@en ;
    rdfs:domain gufo:Role ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-detection:hasRoleEndPoint a owl:DatatypeProperty ;
    rdfs:label "has role end point"@en ;
    rdfs:comment "Temporal end point for detection role."@en ;
    rdfs:domain gufo:Role ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-detection:hashAlgorithm a owl:DatatypeProperty ;
    rdfs:label "hash algorithm"@en ;
    rdfs:comment "The specific algorithm used for perceptual hashing (e.g., 'pHash', 'aHash', 'dHash')."@en ;
    rdfs:domain cacontology-detection:PerceptualHash ;
    rdfs:range xsd:string .

cacontology-detection:modelVersion a owl:DatatypeProperty ;
    rdfs:label "model version"@en ;
    rdfs:comment "The version of the machine learning model used for detection."@en ;
    rdfs:domain cacontology-detection:MachineLearningDetectionTool ;
    rdfs:range xsd:string .

cacontology-detection:perceptualHashValue a owl:DatatypeProperty ;
    rdfs:label "perceptual hash value"@en ;
    rdfs:comment "The perceptual hash value as a hexadecimal string."@en ;
    rdfs:domain cacontology-detection:PerceptualHash ;
    rdfs:range xsd:string .

cacontology-detection:photoDNAValue a owl:DatatypeProperty ;
    rdfs:label "PhotoDNA value"@en ;
    rdfs:comment "The PhotoDNA hash value as a hexadecimal string."@en ;
    rdfs:domain cacontology-detection:PhotoDNAHash ;
    rdfs:range xsd:string .

cacontology-detection:producesRiskStratificationResult a owl:ObjectProperty ;
    rdfs:label "produces risk stratification result"@en ;
    dcterms:source "Community & Intelligence Beyond Detection (Global Emancipation Network), 2026-02-10."@en ;
    rdfs:comment "Links a risk stratification action to the risk stratification result it produced."@en ;
    rdfs:domain cacontology-detection:RiskStratificationAction ;
    rdfs:range cacontology-detection:RiskStratificationResult ;
    rdfs:seeAlso <https://www.linkedin.com/pulse/community-intelligence-beyond-detection-global-emancipation-network-xvemc/> ;
    rdfs:subPropertyOf uco-action:result .

cacontology-detection:reviewDecision a owl:DatatypeProperty ;
    rdfs:label "review decision"@en ;
    rdfs:comment "The decision made during manual review (e.g., 'confirmed', 'rejected', 'uncertain')."@en ;
    rdfs:domain cacontology-detection:ManualClassificationAction ;
    rdfs:range xsd:string .

cacontology-detection:riskRationale a owl:DatatypeProperty ;
    rdfs:label "risk rationale"@en ;
    dcterms:source "Community & Intelligence Beyond Detection (Global Emancipation Network), 2026-02-10."@en ;
    rdfs:comment "Explainable rationale describing why a given tier/score was assigned (features, rules, evidentiary factors, or analyst judgment summary)."@en ;
    rdfs:domain cacontology-detection:RiskStratificationResult ;
    rdfs:range xsd:string ;
    rdfs:seeAlso <https://www.linkedin.com/pulse/community-intelligence-beyond-detection-global-emancipation-network-xvemc/> .

cacontology-detection:riskScore a owl:DatatypeProperty ;
    rdfs:label "risk score"@en ;
    dcterms:source "Community & Intelligence Beyond Detection (Global Emancipation Network), 2026-02-10."@en ;
    rdfs:comment "Numeric risk score used for prioritization (0.0-1.0 or other documented scale). Exact scale should be documented in risk rationale or associated documentation."@en ;
    rdfs:domain cacontology-detection:RiskStratificationResult ;
    rdfs:range xsd:decimal ;
    rdfs:seeAlso <https://www.linkedin.com/pulse/community-intelligence-beyond-detection-global-emancipation-network-xvemc/> .

cacontology-detection:riskTier a owl:DatatypeProperty ;
    rdfs:label "risk tier"@en ;
    dcterms:source "Community & Intelligence Beyond Detection (Global Emancipation Network), 2026-02-10."@en ;
    rdfs:comment "Categorical risk tier assigned for prioritization (e.g., critical/high/medium/low)."@en ;
    rdfs:domain cacontology-detection:RiskStratificationResult ;
    rdfs:range xsd:string ;
    rdfs:seeAlso <https://www.linkedin.com/pulse/community-intelligence-beyond-detection-global-emancipation-network-xvemc/> .

cacontology-detection:sar-1 a owl:NamedIndividual,
        skos:Concept ;
    skos:definition "Nudity or erotica involving minors with no explicit sexual activity."@en ;
    skos:inScheme cacontology-detection:SARClassificationScheme ;
    skos:prefLabel "SAR 1 - Indicative"@en .

cacontology-detection:sar-2 a owl:NamedIndividual,
        skos:Concept ;
    skos:definition "Sexual activity between children, or solo masturbation by a child."@en ;
    skos:inScheme cacontology-detection:SARClassificationScheme ;
    skos:prefLabel "SAR 2 - Non-penetrative"@en .

cacontology-detection:sar-3 a owl:NamedIndividual,
        skos:Concept ;
    skos:definition "Non-penetrative sexual activity between adult(s) and child(ren)."@en ;
    skos:inScheme cacontology-detection:SARClassificationScheme ;
    skos:prefLabel "SAR 3 - Non-penetrative with Adult"@en .

cacontology-detection:sar-4 a owl:NamedIndividual,
        skos:Concept ;
    skos:definition "Penetrative sexual activity involving child(ren)."@en ;
    skos:inScheme cacontology-detection:SARClassificationScheme ;
    skos:prefLabel "SAR 4 - Penetrative"@en .

cacontology-detection:sar-5 a owl:NamedIndividual,
        skos:Concept ;
    skos:definition "Sadistic or violent content or bestiality involving child(ren)."@en ;
    skos:inScheme cacontology-detection:SARClassificationScheme ;
    skos:prefLabel "SAR 5 - Sadistic/Bestiality"@en .

cacontology-detection:stratifiesDetectionResult a owl:ObjectProperty ;
    rdfs:label "stratifies detection result"@en ;
    dcterms:source "Community & Intelligence Beyond Detection (Global Emancipation Network), 2026-02-10."@en ;
    rdfs:comment "Links a risk stratification action to the detection result it stratifies for prioritization."@en ;
    rdfs:domain cacontology-detection:RiskStratificationAction ;
    rdfs:range cacontology-detection:DetectionResult ;
    rdfs:seeAlso <https://www.linkedin.com/pulse/community-intelligence-beyond-detection-global-emancipation-network-xvemc/> .

cacontology-detection:tannerStage a owl:DatatypeProperty ;
    rdfs:label "Tanner stage"@en ;
    rdfs:comment "Tanner stage assessment for physical development (1-5)."@en ;
    rdfs:range xsd:integer .

<https://cacontology.projectvic.org/detection/shapes/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Detection SHACL Shapes with gUFO Validation"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:modified "2026-02-11"^^xsd:date ;
    rdfs:comment "Comprehensive SHACL validation shapes for gUFO-enhanced ICAC detection ontology, including foundational type validation, anti-rigidity constraints for detection roles and phases, temporal consistency validation, detection workflow validation, and advanced cross-reference validation for content detection systems."@en ;
    owl:imports <http://purl.org/nemo/gufo>,
        <https://cacontology.projectvic.org/detection/2.11.0>,
        <https://ontology.unifiedcyberontology.org/uco/core> ;
    owl:versionIRI <https://cacontology.projectvic.org/detection/shapes/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-educational:AcademicIntimidation a owl:Class ;
    rdfs:label "Academic Intimidation"@en ;
    rdfs:comment "Use of academic authority to intimidate and create vulnerability in students. Enhanced as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-educational:WrittenHarassment .

cacontology-educational:AssignmentHarassment a owl:Class ;
    rdfs:label "Assignment Harassment"@en ;
    rdfs:comment "Harassment through inappropriate comments written on student assignments or homework. Enhanced as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-educational:WrittenHarassment .

cacontology-educational:CoachRole a owl:Class ;
    rdfs:label "Coach Role"@en ;
    rdfs:comment "Athletic or activity coaching role with student interaction. Enhanced as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf gufo:Role,
        cacontology-educational:EducatorRole .

cacontology-educational:CrossInstitutionalExploitation a owl:Class ;
    rdfs:label "Cross Institutional Exploitation"@en ;
    rdfs:comment "Exploitation targeting students from multiple educational institutions. Enhanced as gUFO Event with multi-institutional coordination."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-educational:EducatorPerpetratedExploitation .

<https://cacontology.projectvic.org/educational/shapes/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Educational Exploitation SHACL Shapes with gUFO Validation"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "Comprehensive SHACL validation shapes for gUFO-enhanced ICAC educational exploitation ontology, including foundational type validation, anti-rigidity constraints for educator roles and educational phases, temporal consistency validation, educational exploitation workflow validation, and advanced cross-reference validation for educational safeguarding systems."@en ;
    owl:imports <http://purl.org/nemo/gufo>,
        <https://cacontology.projectvic.org/educational/2.11.0>,
        <https://ontology.unifiedcyberontology.org/uco/core> ;
    owl:versionIRI <https://cacontology.projectvic.org/educational/shapes/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-enterprises:AccessControlSystem a gufo:SubKind,
        owl:Class ;
    rdfs:label "Access Control System"@en ;
    rdfs:comment "System controlling access to enterprise channels and resources based on member status and content contributions."@en ;
    rdfs:subClassOf gufo:FunctionalComplex,
        cacontology-enterprises:ContentCurrencySystem .

cacontology-enterprises:ContentCompilationSystem a gufo:Kind,
        owl:Class ;
    rdfs:label "Content Compilation System"@en ;
    rdfs:comment "System for compiling, editing, and organizing exploitative content within criminal enterprise."@en ;
    rdfs:subClassOf gufo:FunctionalComplex,
        uco-core:UcoObject .

cacontology-enterprises:ContentProducerRole a gufo:Role,
        owl:Class ;
    rdfs:label "Content Producer Role"@en ;
    rdfs:comment "Role focused on producing high-quality exploitative content for enterprise operations."@en ;
    rdfs:subClassOf cacontology-enterprises:EnterpriseRole .

cacontology-enterprises:LeadershipStructure a gufo:SubKind,
        owl:Class ;
    rdfs:label "Leadership Structure"@en ;
    rdfs:comment "Leadership structure of enterprise including multiple leaders and their areas of control."@en ;
    rdfs:subClassOf cacontology-enterprises:EnterpriseHierarchy .

cacontology-enterprises:RecruitmentSpecialistRole a gufo:Role,
        owl:Class ;
    rdfs:label "Recruitment Specialist Role"@en ;
    rdfs:comment "Role specializing in recruiting new members based on content quality and enterprise needs."@en ;
    rdfs:subClassOf cacontology-enterprises:EnterpriseRole .

cacontology-enterprises:accessLevel a owl:DatatypeProperty ;
    rdfs:label "access level"@en ;
    rdfs:comment "Level of access to enterprise resources and channels."@en ;
    rdfs:domain cacontology-enterprises:AccessControlSystem ;
    rdfs:range xsd:string .

cacontology-enterprises:advancementCriteria a owl:DatatypeProperty ;
    rdfs:label "advancement criteria"@en ;
    rdfs:comment "Criteria required for advancement to higher membership levels."@en ;
    rdfs:domain cacontology-enterprises:MembershipAdvancementSystem ;
    rdfs:range xsd:string .

cacontology-enterprises:altAccountCount a owl:DatatypeProperty ;
    rdfs:label "alt account count"@en ;
    rdfs:comment "Number of alternate accounts maintained per member."@en ;
    rdfs:domain cacontology-enterprises:AlternateAccountSystem ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-enterprises:channelCount a owl:DatatypeProperty ;
    rdfs:label "channel count"@en ;
    rdfs:comment "Number of channels maintained in encrypted network."@en ;
    rdfs:domain cacontology-enterprises:EncryptedChannelNetwork ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-enterprises:coercionEffectiveness a owl:DatatypeProperty ;
    rdfs:label "coercion effectiveness"@en ;
    rdfs:comment "Effectiveness of coercion methods in victim compliance."@en ;
    rdfs:domain cacontology-enterprises:SelfHarmCoercion ;
    rdfs:range xsd:decimal .

cacontology-enterprises:coercionSeverity a owl:DatatypeProperty ;
    rdfs:label "coercion severity"@en ;
    rdfs:comment "Severity level of coercion methods used (moderate, severe, extreme, life_threatening)."@en ;
    rdfs:domain cacontology-enterprises:SelfHarmCoercion ;
    rdfs:range xsd:string .

cacontology-enterprises:compilationComplexity a owl:DatatypeProperty ;
    rdfs:label "compilation complexity"@en ;
    rdfs:comment "Complexity level of content compilation and editing."@en ;
    rdfs:domain cacontology-enterprises:Lorebook ;
    rdfs:range xsd:string .

cacontology-enterprises:containsVictimContent a owl:ObjectProperty ;
    rdfs:label "contains victim content"@en ;
    rdfs:comment "Links lorebook to victim content it contains."@en ;
    rdfs:domain cacontology-enterprises:Lorebook ;
    rdfs:range uco-observable:ObservableObject .

cacontology-enterprises:contentNotoriety a owl:DatatypeProperty ;
    rdfs:label "content notoriety"@en ;
    rdfs:comment "Notoriety level of content within enterprise and broader network."@en ;
    rdfs:domain cacontology-enterprises:Lorebook ;
    rdfs:range xsd:string .

cacontology-enterprises:contentValue a owl:DatatypeProperty ;
    rdfs:label "content value"@en ;
    rdfs:comment "Assessed value of content within enterprise currency system."@en ;
    rdfs:domain cacontology-enterprises:ContentValueAssessment ;
    rdfs:range xsd:decimal .

cacontology-enterprises:contentVolumeItems a owl:DatatypeProperty ;
    rdfs:label "content volume items"@en ;
    rdfs:comment "Number of individual content items in compilation."@en ;
    rdfs:domain cacontology-enterprises:Lorebook ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-enterprises:createsVictimizationSituation a owl:ObjectProperty ;
    rdfs:label "creates victimization situation"@en ;
    rdfs:comment "Links coercion events to victimization situations they create."@en ;
    rdfs:domain cacontology-enterprises:SelfHarmCoercion ;
    rdfs:range gufo:Situation .

cacontology-enterprises:degradationLevel a owl:DatatypeProperty ;
    rdfs:label "degradation level"@en ;
    rdfs:comment "Level of degradation and humiliation involved in coercion."@en ;
    rdfs:domain cacontology-enterprises:ExtremeDegradationCoercion ;
    rdfs:range xsd:string .

cacontology-enterprises:editingQuality a owl:DatatypeProperty ;
    rdfs:label "editing quality"@en ;
    rdfs:comment "Quality level of content editing and organization."@en ;
    rdfs:domain cacontology-enterprises:ContentEditingProcess ;
    rdfs:range xsd:string .

cacontology-enterprises:encryptionLevel a owl:DatatypeProperty ;
    rdfs:label "encryption level"@en ;
    rdfs:comment "Level of encryption used in communications (basic, strong, military_grade)."@en ;
    rdfs:domain cacontology-enterprises:EncryptedChannelNetwork ;
    rdfs:range xsd:string .

cacontology-enterprises:hasExploitationRelation a owl:ObjectProperty ;
    rdfs:label "has exploitation relation"@en ;
    rdfs:comment "Links enterprise to exploitation relator mediating perpetrator-victim relationships."@en ;
    rdfs:domain cacontology-enterprises:ChildExploitationEnterprise ;
    rdfs:range gufo:Relator .

cacontology-enterprises:hasInvestigationBeginDate a owl:DatatypeProperty ;
    rdfs:label "has investigation begin date"@en ;
    rdfs:comment "Begin date of investigation event using gUFO temporal framework."@en ;
    rdfs:domain cacontology-enterprises:CovertEmployeeOperation ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-enterprises:hasLeadershipRelation a owl:ObjectProperty ;
    rdfs:label "has leadership relation"@en ;
    rdfs:comment "Links enterprise to leadership relator mediating leader-follower relationships."@en ;
    rdfs:domain cacontology-enterprises:ChildExploitationEnterprise ;
    rdfs:range gufo:Relator .

cacontology-enterprises:hasOperationalBeginDate a owl:DatatypeProperty ;
    rdfs:label "has operational begin date"@en ;
    rdfs:comment "Begin date of enterprise operational period using gUFO temporal framework."@en ;
    rdfs:domain cacontology-enterprises:ChildExploitationEnterprise ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-enterprises:hasOperationalEndDate a owl:DatatypeProperty ;
    rdfs:label "has operational end date"@en ;
    rdfs:comment "End date of enterprise operational period using gUFO temporal framework."@en ;
    rdfs:domain cacontology-enterprises:ChildExploitationEnterprise ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-enterprises:hasRecruitmentMode a owl:ObjectProperty ;
    rdfs:label "has recruitment mode"@en ;
    rdfs:comment "Links enterprise to its recruitment operation mode."@en ;
    rdfs:domain cacontology-enterprises:ChildExploitationEnterprise ;
    rdfs:range gufo:IntrinsicMode .

cacontology-enterprises:hierarchyComplexity a owl:DatatypeProperty ;
    rdfs:label "hierarchy complexity"@en ;
    rdfs:comment "Complexity level of enterprise hierarchy (simple, moderate, complex, highly_complex)."@en ;
    rdfs:domain cacontology-enterprises:EnterpriseHierarchy ;
    rdfs:range xsd:string .

cacontology-enterprises:holdsLeadershipRole a owl:ObjectProperty ;
    rdfs:label "holds leadership role"@en ;
    rdfs:comment "Links individual to leadership role in enterprise."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range cacontology-enterprises:EnterpriseLeaderRole .

cacontology-enterprises:ideologicalFramework a owl:DatatypeProperty ;
    rdfs:label "ideological framework"@en ;
    rdfs:comment "Ideological framework driving network activities (nihilistic, accelerationist, anarchist)."@en ;
    rdfs:domain cacontology-enterprises:NihilisticViolentExtremismNetwork ;
    rdfs:range xsd:string .

cacontology-enterprises:infiltrationDuration a owl:DatatypeProperty ;
    rdfs:label "infiltration duration"@en ;
    rdfs:comment "Duration of covert infiltration operation in days."@en ;
    rdfs:domain cacontology-enterprises:EncryptedChannelInfiltration ;
    rdfs:range xsd:decimal .

cacontology-enterprises:innerCoreSize a owl:DatatypeProperty ;
    rdfs:label "inner core size"@en ;
    rdfs:comment "Number of members in enterprise inner core with advanced access."@en ;
    rdfs:domain cacontology-enterprises:InnerCore ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-enterprises:membershipLevel a owl:DatatypeProperty ;
    rdfs:label "membership level"@en ;
    rdfs:comment "Member level within enterprise hierarchy (novice, member, advanced, inner_core, leader)."@en ;
    rdfs:domain cacontology-enterprises:MembershipTier ;
    rdfs:range xsd:string .

cacontology-enterprises:membershipRequirements a owl:DatatypeProperty ;
    rdfs:label "membership requirements"@en ;
    rdfs:comment "Requirements for enterprise membership and advancement."@en ;
    rdfs:domain cacontology-enterprises:ChildExploitationEnterprise ;
    rdfs:range xsd:string .

cacontology-enterprises:networkMappingCompleteness a owl:DatatypeProperty ;
    rdfs:label "network mapping completeness"@en ;
    rdfs:comment "Completeness of network mapping investigation (0.0-1.0)."@en ;
    rdfs:domain cacontology-enterprises:NetworkMappingInvestigation ;
    rdfs:range xsd:decimal .

cacontology-enterprises:networkNotoriety a owl:DatatypeProperty ;
    rdfs:label "network notoriety"@en ;
    rdfs:comment "Level of notoriety and recognition of network within extremist communities."@en ;
    rdfs:domain cacontology-enterprises:NihilisticViolentExtremismNetwork ;
    rdfs:range xsd:string .

cacontology-enterprises:networkSize a owl:DatatypeProperty ;
    rdfs:label "network size"@en ;
    rdfs:comment "Estimated size of extremist network in number of participants."@en ;
    rdfs:domain cacontology-enterprises:NihilisticViolentExtremismNetwork ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-enterprises:operatesInSituation a owl:ObjectProperty ;
    rdfs:label "operates in situation"@en ;
    rdfs:comment "Links enterprise operations to the situation context they occur in."@en ;
    rdfs:domain cacontology-enterprises:ChildExploitationEnterprise ;
    rdfs:range gufo:Situation .

cacontology-enterprises:operationalScope a owl:DatatypeProperty ;
    rdfs:label "operational scope"@en ;
    rdfs:comment "Geographic scope of network operations (local, national, international)."@en ;
    rdfs:domain cacontology-enterprises:NihilisticViolentExtremismNetwork ;
    rdfs:range xsd:string .

cacontology-enterprises:participatesInCoercion a owl:ObjectProperty ;
    rdfs:label "participates in coercion"@en ;
    rdfs:comment "Links persons to coercion events they participate in."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range cacontology-enterprises:SelfHarmCoercion ;
    rdfs:subPropertyOf gufo:participatesIn .

cacontology-enterprises:participatesInInnerCore a owl:ObjectProperty ;
    rdfs:label "participates in inner core"@en ;
    rdfs:comment "Links individual to inner core membership."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range cacontology-enterprises:InnerCore .

cacontology-enterprises:participatesInRecruitment a owl:ObjectProperty ;
    rdfs:label "participates in recruitment"@en ;
    rdfs:comment "Links persons to recruitment events they participate in."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range cacontology-enterprises:ContentBasedRecruitment ;
    rdfs:subPropertyOf gufo:participatesIn .

cacontology-enterprises:platformCount a owl:DatatypeProperty ;
    rdfs:label "platform count"@en ;
    rdfs:comment "Number of platforms used for coordination and operations."@en ;
    rdfs:domain cacontology-enterprises:CrossPlatformCoordination ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-enterprises:selfHarmType a owl:DatatypeProperty ;
    rdfs:label "self harm type"@en ;
    rdfs:comment "Type of self-harm coerced (cutting, burning, bruising, other)."@en ;
    rdfs:domain cacontology-enterprises:SelfHarmCoercion ;
    rdfs:range xsd:string .

cacontology-enterprises:socialEngineeringComplexity a owl:DatatypeProperty ;
    rdfs:label "social engineering complexity"@en ;
    rdfs:comment "Complexity level of social engineering campaigns."@en ;
    rdfs:domain cacontology-enterprises:SocialEngineeringCampaign ;
    rdfs:range xsd:string .

cacontology-enterprises:targetingPrecision a owl:DatatypeProperty ;
    rdfs:label "targeting precision"@en ;
    rdfs:comment "Precision level of vulnerability targeting methods."@en ;
    rdfs:domain cacontology-enterprises:VulnerablePopulationTargeting ;
    rdfs:range xsd:string .

cacontology-enterprises:trustBuildingDuration a owl:DatatypeProperty ;
    rdfs:label "trust building duration"@en ;
    rdfs:comment "Duration of trust building process before exploitation begins in days."@en ;
    rdfs:domain cacontology-enterprises:TrustBuildingProcess ;
    rdfs:range xsd:decimal .

cacontology-enterprises:vulnerabilityType a owl:DatatypeProperty ;
    rdfs:label "vulnerability type"@en ;
    rdfs:comment "Type of vulnerability targeted (mental_health, isolation, trauma, substance_abuse)."@en ;
    rdfs:domain cacontology-enterprises:VulnerablePopulationTargeting ;
    rdfs:range xsd:string .

<https://cacontology.projectvic.org/extremist-enterprises/shapes/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Extremist Enterprises SHACL Shapes with gUFO Validation"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "SHACL validation shapes for gUFO-enhanced ICAC extremist enterprises ontology, including anti-rigidity constraints, temporal validation, and foundational type compliance."@en ;
    owl:imports <http://purl.org/nemo/gufo>,
        <https://cacontology.projectvic.org/extremist-enterprises/2.11.0>,
        uco-core: ;
    owl:versionIRI <https://cacontology.projectvic.org/extremist-enterprises/shapes/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-forensics:CustodyDocument a owl:Class ;
    rdfs:label "Custody Document"@en ;
    rdfs:comment "Documentation recording the handling and transfer of evidence maintaining chain of custody."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:ObservableObject .

cacontology-forensics:DetectionDogAssist a owl:Class ;
    rdfs:label "Detection Dog Assist"@en ;
    rdfs:comment "Assistance provided by trained detection dogs in forensic searches."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-forensics:EvidenceCustodianRole a gufo:Role,
        owl:Class ;
    rdfs:label "Evidence Custodian Role"@en ;
    rdfs:comment "Role of a person responsible for evidence custody and security."@en ;
    rdfs:subClassOf uco-core:Role .

cacontology-forensics:ExtendedInvestigationTimeline a owl:Class ;
    rdfs:label "Extended Investigation Timeline"@en ;
    rdfs:comment "Investigation timeline spanning weeks, months, or years for complex child exploitation cases."@en ;
    rdfs:subClassOf cacontology-forensics:TimelineAnalysisAction .

cacontology-forensics:ForensicExaminerRole a gufo:Role,
        owl:Class ;
    rdfs:label "Forensic Examiner Role"@en ;
    rdfs:comment "Role of a person conducting digital forensic examination and analysis."@en ;
    rdfs:subClassOf uco-core:Role .

cacontology-forensics:ForensicImagingTool a owl:Class ;
    rdfs:label "Forensic Imaging Tool"@en ;
    rdfs:comment "A tool specialized for creating forensic images of digital media using write-blocking and verification methods (e.g., FTK Imager, dd, Guymager, PALADIN)."@en ;
    rdfs:subClassOf gufo:Object,
        uco-tool:AnalyticTool .

cacontology-forensics:HashingTool a owl:Class ;
    rdfs:label "Hashing Tool"@en ;
    rdfs:comment "A tool specialized for generating cryptographic hashes for evidence verification (e.g., hashdeep, md5deep, NIST NSRL)."@en ;
    rdfs:subClassOf gufo:Object,
        uco-tool:AnalyticTool .

cacontology-forensics:ImageAnalysisForVictimID a owl:Class ;
    rdfs:label "Image Analysis for Victim Identification"@en ;
    rdfs:comment "Analysis of seized images to identify and remove child victims from continued exploitation."@en ;
    rdfs:subClassOf cacontology-forensics:VictimIdentificationProcess .

cacontology-forensics:MemoryForensicTool a owl:Class ;
    rdfs:label "Memory Forensic Tool"@en ;
    rdfs:comment "A tool specialized for analyzing volatile memory dumps (e.g., Volatility, Rekall, MAGNET RAM Capture)."@en ;
    rdfs:subClassOf gufo:Object,
        uco-tool:AnalyticTool .

cacontology-forensics:MetadataExtractionAction a owl:Class ;
    rdfs:label "Metadata Extraction Action"@en ;
    rdfs:comment "The action of extracting metadata from digital artifacts including EXIF, file system timestamps, and application metadata."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-forensics:NetworkForensicTool a owl:Class ;
    rdfs:label "Network Forensic Tool"@en ;
    rdfs:comment "A tool specialized for network traffic analysis and packet capture (e.g., Wireshark, NetworkMiner, Xplico)."@en ;
    rdfs:subClassOf gufo:Object,
        uco-tool:AnalyticTool .

cacontology-forensics:automationPercentage a owl:DatatypeProperty ;
    rdfs:label "automation percentage"@en ;
    rdfs:comment "Percentage of processing performed through automated analysis."@en ;
    rdfs:domain cacontology-forensics:AutomatedContentAnalysis ;
    rdfs:range xsd:decimal .

cacontology-forensics:custodyReason a owl:DatatypeProperty ;
    rdfs:label "custody reason"@en ;
    rdfs:comment "The reason for the custody transfer (e.g., 'forensic analysis', 'court exhibit', 'secure storage')."@en ;
    rdfs:domain cacontology-forensics:ChainOfCustodyAction ;
    rdfs:range xsd:string .

cacontology-forensics:custodyTransferredFrom a owl:ObjectProperty ;
    rdfs:label "custody transferred from"@en ;
    rdfs:comment "Links a chain of custody action to the person or organization transferring custody."@en ;
    rdfs:domain cacontology-forensics:ChainOfCustodyAction ;
    rdfs:range uco-identity:Identity .

cacontology-forensics:custodyTransferredTo a owl:ObjectProperty ;
    rdfs:label "custody transferred to"@en ;
    rdfs:comment "Links a chain of custody action to the person or organization receiving custody."@en ;
    rdfs:domain cacontology-forensics:ChainOfCustodyAction ;
    rdfs:range uco-identity:Identity .

cacontology-forensics:detectionAccuracy a owl:DatatypeProperty ;
    rdfs:label "detection accuracy"@en ;
    rdfs:comment "Accuracy rate of detection method (0.0-1.0)."@en ;
    rdfs:domain cacontology-forensics:ElectronicStorageDeviceDetection ;
    rdfs:range xsd:decimal .

cacontology-forensics:detectionMethod a owl:DatatypeProperty ;
    rdfs:label "detection method"@en ;
    rdfs:comment "Method used for device detection (K9, manual, electronic scanning)."@en ;
    rdfs:domain cacontology-forensics:ElectronicStorageDeviceDetection ;
    rdfs:range xsd:string .

cacontology-forensics:devicesRecovered a owl:DatatypeProperty ;
    rdfs:label "devices recovered"@en ;
    rdfs:comment "Number of hidden devices recovered during search."@en ;
    rdfs:domain cacontology-forensics:HiddenDeviceRecovery ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-forensics:evidenceSeized a owl:ObjectProperty ;
    rdfs:label "evidence seized"@en ;
    rdfs:comment "Links an acquisition action to the original evidence item that was seized."@en ;
    rdfs:domain cacontology-forensics:ForensicAcquisitionAction ;
    rdfs:range uco-observable:ObservableObject .

cacontology-forensics:evidenceVolumeTerabytes a owl:DatatypeProperty ;
    rdfs:label "evidence volume terabytes"@en ;
    rdfs:comment "Total volume of evidence in terabytes requiring processing."@en ;
    rdfs:domain cacontology-forensics:MassDigitalEvidenceProcessing ;
    rdfs:range xsd:decimal .

cacontology-forensics:falsePositiveRate a owl:DatatypeProperty ;
    rdfs:label "false positive rate"@en ;
    rdfs:comment "False positive rate for automated content analysis (0.0-1.0)."@en ;
    rdfs:domain cacontology-forensics:AutomatedContentAnalysis ;
    rdfs:range xsd:decimal .

cacontology-forensics:filesProcessedMillions a owl:DatatypeProperty ;
    rdfs:label "files processed millions"@en ;
    rdfs:comment "Number of files processed in millions for large-scale operations."@en ;
    rdfs:domain cacontology-forensics:MassDigitalEvidenceProcessing ;
    rdfs:range xsd:decimal .

cacontology-forensics:hashDatabaseSize a owl:DatatypeProperty ;
    rdfs:label "hash database size"@en ;
    rdfs:comment "Size of hash database used for comparison in millions of entries."@en ;
    rdfs:domain cacontology-forensics:ScalableHashAnalysis ;
    rdfs:range xsd:decimal .

cacontology-forensics:hashMatchesFound a owl:DatatypeProperty ;
    rdfs:label "hash matches found"@en ;
    rdfs:comment "Number of hash matches found against known illegal content databases."@en ;
    rdfs:domain cacontology-forensics:ScalableHashAnalysis ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-forensics:k9AssistanceProvided a owl:DatatypeProperty ;
    rdfs:label "K9 assistance provided"@en ;
    rdfs:comment "Whether K9 assistance was provided during forensic acquisition."@en ;
    rdfs:domain cacontology-forensics:K9AssistedForensics ;
    rdfs:range xsd:boolean .

cacontology-forensics:priorityClassification a owl:DatatypeProperty ;
    rdfs:label "priority classification"@en ;
    rdfs:comment "Priority classification assigned by triage system (critical, high, medium, low)."@en ;
    rdfs:domain cacontology-forensics:EvidenceTriageSystem ;
    rdfs:range xsd:string .

cacontology-forensics:processingSpeed a owl:DatatypeProperty ;
    rdfs:label "processing speed"@en ;
    rdfs:comment "Processing speed in files per hour for automated systems."@en ;
    rdfs:domain cacontology-forensics:AutomatedContentAnalysis ;
    rdfs:range xsd:decimal .

cacontology-forensics:processingTimeframeDays a owl:DatatypeProperty ;
    rdfs:label "processing timeframe days"@en ;
    rdfs:comment "Timeframe required for processing massive evidence volumes in days."@en ;
    rdfs:domain cacontology-forensics:MassDigitalEvidenceProcessing ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-forensics:sourceHash a owl:ObjectProperty ;
    rdfs:label "source hash"@en ;
    rdfs:comment "Links a forensic image to the hash of its source media for verification."@en ;
    rdfs:domain cacontology-forensics:ForensicImage ;
    rdfs:range uco-types:Hash .

cacontology-forensics:timelineEvent a owl:ObjectProperty ;
    rdfs:label "timeline event"@en ;
    rdfs:comment "Links a timeline analysis to specific events or artifacts in chronological order."@en ;
    rdfs:domain cacontology-forensics:TimelineAnalysisAction ;
    rdfs:range uco-core:UcoObject .

cacontology-forensics:triageAccuracy a owl:DatatypeProperty ;
    rdfs:label "triage accuracy"@en ;
    rdfs:comment "Accuracy rate of automated triage system (0.0-1.0)."@en ;
    rdfs:domain cacontology-forensics:EvidenceTriageSystem ;
    rdfs:range xsd:decimal .

cacontology-forensics:victimAgeRange a owl:DatatypeProperty ;
    rdfs:label "victim age range"@en ;
    rdfs:comment "Age range of identified victims (e.g., 'toddlers to teenagers')."@en ;
    rdfs:domain cacontology-forensics:VictimIdentificationProcess ;
    rdfs:range xsd:string .

cacontology-forensics:victimGeographicOrigin a owl:DatatypeProperty ;
    rdfs:label "victim geographic origin"@en ;
    rdfs:comment "Geographic origin of identified victims (e.g., 'Australia', 'UK', 'US', 'Southeast Asia', 'Philippines')."@en ;
    rdfs:domain cacontology-forensics:VictimIdentificationProcess ;
    rdfs:range xsd:string .

cacontology-forensics:victimsIdentifiedCount a owl:DatatypeProperty ;
    rdfs:label "victims identified count"@en ;
    rdfs:comment "Number of child victims identified and removed from harm (e.g., 370+ for SA JACET over 10 years)."@en ;
    rdfs:domain cacontology-forensics:VictimIdentificationProcess ;
    rdfs:range xsd:nonNegativeInteger .

<https://cacontology.projectvic.org/forensics/extended-shapes/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Forensics Extended SHACL Shapes"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "Extended SHACL validation shapes for the ICAC Forensics Ontology, providing comprehensive validation for digital evidence processing, analysis, and management."@en ;
    owl:imports <http://purl.org/nemo/gufo>,
        <https://cacontology.projectvic.org/forensics/2.11.0>,
        uco-core: ;
    owl:versionIRI <https://cacontology.projectvic.org/forensics/extended-shapes/2.11.0> ;
    owl:versionInfo "2.11.0" .

<https://cacontology.projectvic.org/forensics/shapes/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Forensics SHACL Shapes with gUFO Validation"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "SHACL validation shapes for gUFO-enhanced ICAC forensics ontology, including anti-rigidity constraints, temporal validation, and foundational type compliance."@en ;
    owl:imports <http://purl.org/nemo/gufo>,
        <https://cacontology.projectvic.org/forensics/2.11.0>,
        uco-core: ;
    owl:versionIRI <https://cacontology.projectvic.org/forensics/shapes/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-grooming:BluntRecruitmentGrooming a owl:Class ;
    rdfs:label "Blunt Recruitment Grooming"@en ;
    rdfs:comment "Direct, unsubtle recruitment for trafficking without gradual persuasion techniques."@en ;
    rdfs:subClassOf cacontology-grooming:DirectTraffickingPropositionGrooming .

cacontology-grooming:EconomicIncentiveGrooming a owl:Class ;
    rdfs:label "Economic Incentive Grooming"@en ;
    rdfs:comment "Grooming that emphasizes financial benefits of commercial sexual activity."@en ;
    rdfs:subClassOf cacontology-grooming:DirectTraffickingPropositionGrooming .

cacontology-grooming:Enticement a owl:Class ;
    rdfs:label "Enticement"@en ;
    rdfs:comment "Direct solicitation of a child to engage in illegal sexual activity or meet for such purposes."@en ;
    rdfs:subClassOf cacontology-grooming:GroomingBehavior .

cacontology-grooming:ExplicitCommercialOfferGrooming a owl:Class ;
    rdfs:label "Explicit Commercial Offer Grooming"@en ;
    rdfs:comment "Grooming involving direct offers of money in exchange for sexual services."@en ;
    rdfs:subClassOf cacontology-grooming:DirectTraffickingPropositionGrooming .

cacontology-grooming:ImmediateMonetizationGrooming a owl:Class ;
    rdfs:label "Immediate Monetization Grooming"@en ;
    rdfs:comment "Grooming focused on immediate monetization of victim's sexuality."@en ;
    rdfs:subClassOf cacontology-grooming:DirectTraffickingPropositionGrooming .

cacontology-grooming:ImpairmentBasedGrooming a owl:Class ;
    rdfs:label "Impairment Based Grooming"@en ;
    rdfs:comment "Grooming that exploits victim impairment from substances to reduce resistance."@en ;
    rdfs:subClassOf cacontology-grooming:SubstanceFacilitatedGrooming .

cacontology-grooming:InitiatorContentSending a owl:Class ;
    rdfs:label "Initiator Content Sending"@en ;
    rdfs:comment "Grooming phase where perpetrator sends sexual content to victim first."@en ;
    rdfs:subClassOf cacontology-grooming:SexualContentExchangeGrooming .

cacontology-grooming:IsolationBasedGrooming a owl:Class ;
    rdfs:label "Isolation Based Grooming"@en ;
    rdfs:comment "Grooming that relies on physical isolation to reduce victim resistance."@en ;
    rdfs:subClassOf cacontology-grooming:PhysicalSpaceGrooming .

cacontology-grooming:MultipleAccountGrooming a owl:Class ;
    rdfs:label "Multiple Account Grooming"@en ;
    rdfs:comment "Grooming using multiple fake accounts to maintain deceptive identity."@en ;
    rdfs:subClassOf cacontology-grooming:EducatorGrooming .

cacontology-grooming:PlatformAnonymityFeature a owl:Class ;
    rdfs:label "Platform Anonymity Feature"@en ;
    rdfs:comment "Platform features that enable anonymous communication (guest messaging, temporary accounts, no profile requirements)."@en ;
    rdfs:subClassOf uco-observable:DigitalServiceFeature .

cacontology-grooming:PositionOfTrustGrooming a owl:Class ;
    rdfs:label "Position of Trust Grooming"@en ;
    rdfs:comment "Grooming that exploits educator's position of trust and authority over students."@en ;
    rdfs:subClassOf cacontology-grooming:EducatorGrooming .

cacontology-grooming:ReputationBasedSilencing a owl:Class ;
    rdfs:label "Reputation Based Silencing"@en ;
    rdfs:comment "Exploitation of institutional reputation to discourage victim reporting."@en ;
    rdfs:subClassOf cacontology-grooming:EliteInstitutionTargeting .

cacontology-grooming:SameDayProgression a owl:Class ;
    rdfs:label "Same Day Progression"@en ;
    rdfs:comment "Grooming progression from initial contact to sexual exploitation within the same day."@en ;
    rdfs:subClassOf cacontology-grooming:RapidEscalationGrooming .

cacontology-grooming:SkippedGroomingPhases a owl:Class ;
    rdfs:label "Skipped Grooming Phases"@en ;
    rdfs:comment "Grooming that bypasses traditional phases like trust building, isolation, and normalization."@en ;
    rdfs:subClassOf cacontology-grooming:RapidEscalationGrooming .

cacontology-grooming:SubstanceInducedVulnerabilityGrooming a owl:Class ;
    rdfs:label "Substance Induced Vulnerability Grooming"@en ;
    rdfs:comment "Grooming that creates vulnerability through substance administration."@en ;
    rdfs:subClassOf cacontology-grooming:SubstanceFacilitatedGrooming .

cacontology-grooming:communicationFrequency a owl:DatatypeProperty ;
    rdfs:label "communication frequency"@en ;
    rdfs:comment "Frequency of contact with victim (daily, weekly, multiple_daily)."@en ;
    rdfs:domain cacontology-grooming:GroomingMessage ;
    rdfs:range xsd:string .

cacontology-grooming:gameContext a owl:DatatypeProperty ;
    rdfs:label "game context"@en ;
    rdfs:comment "Context for the sexualized game (e.g., sleepover, peer_group, family_gathering, youth_activity)."@en ;
    rdfs:domain cacontology-grooming:SexualConsequenceGameGrooming ;
    rdfs:range xsd:string .

cacontology-grooming:groomingStage a owl:DatatypeProperty ;
    rdfs:label "grooming stage"@en ;
    rdfs:comment "Stage of grooming process (initial_contact, trust_building, isolation, sexualization, maintenance)."@en ;
    rdfs:domain cacontology-grooming:GroomingBehavior ;
    rdfs:range xsd:string .

cacontology-grooming:isolationMethod a owl:DatatypeProperty ;
    rdfs:label "isolation method"@en ;
    rdfs:comment "Method used to isolate victim (vehicle_transport, location_change, privacy_creation)."@en ;
    rdfs:domain cacontology-grooming:IsolationBasedGrooming ;
    rdfs:range xsd:string .

cacontology-grooming:participantCount a owl:DatatypeProperty ;
    rdfs:label "participant count"@en ;
    rdfs:comment "Number of juvenile participants involved in the sexual consequence game."@en ;
    rdfs:domain cacontology-grooming:SexualConsequenceGameGrooming ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-grooming:patternConfidence a owl:DatatypeProperty ;
    rdfs:label "pattern confidence"@en ;
    rdfs:comment "Confidence level in pattern identification (0.0-1.0)."@en ;
    rdfs:domain cacontology-grooming:GroomingPattern ;
    rdfs:range xsd:decimal .

cacontology-grooming:progressionDuration a owl:DatatypeProperty ;
    rdfs:label "progression duration"@en ;
    rdfs:comment "Duration in days from initial online contact to physical meeting arrangement."@en ;
    rdfs:domain cacontology-grooming:OnlineToOfflineProgression ;
    rdfs:range xsd:integer .

cacontology-grooming:ruleStructureDescription a owl:DatatypeProperty ;
    rdfs:label "rule structure description"@en ;
    rdfs:comment "Short description of the rules and consequence mechanics used to structure the sexualized game."@en ;
    rdfs:domain cacontology-grooming:SexualConsequenceGameGrooming ;
    rdfs:range xsd:string .

cacontology-grooming:vulnerabilityType a owl:DatatypeProperty ;
    rdfs:label "vulnerability type"@en ;
    rdfs:comment "Type of vulnerability (social_isolation, family_problems, low_self_esteem, seeking_attention)."@en ;
    rdfs:domain cacontology-grooming:VictimVulnerability ;
    rdfs:range xsd:string .

<https://cacontology.projectvic.org/grooming/shapes/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Grooming SHACL Shapes with gUFO Validation"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "SHACL validation shapes for gUFO-enhanced ICAC grooming ontology, including anti-rigidity constraints, temporal validation, phase transitions, and foundational type compliance."@en ;
    owl:imports <http://purl.org/nemo/gufo>,
        <https://cacontology.projectvic.org/grooming/2.11.0>,
        uco-core: ;
    owl:versionIRI <https://cacontology.projectvic.org/grooming/shapes/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-gufo:analysisCompletionTimePoint a owl:DatatypeProperty ;
    rdfs:label "analysis completion time point"@en ;
    rdfs:comment "Temporal point when forensic analysis of AI content was completed using gUFO temporal framework."@en ;
    rdfs:domain cacontology-ai:SyntheticMediaAnalysis ;
    rdfs:range xsd:dateTime .

cacontology-gufo:closureBeginTime a owl:DatatypeProperty ;
    rdfs:label "closure begin time"@en ;
    rdfs:comment "Temporal point when case closure process begins using gUFO temporal framework."@en ;
    rdfs:domain cacontology-case:CaseClosure ;
    rdfs:range xsd:dateTime .

cacontology-gufo:closureTime a owl:DatatypeProperty ;
    rdfs:label "closure time"@en ;
    rdfs:comment "Temporal point when case closure is completed using gUFO temporal framework."@en ;
    rdfs:domain cacontology-case:CaseClosure ;
    rdfs:range xsd:dateTime .

cacontology-gufo:coordinationBeginTime a owl:DatatypeProperty ;
    rdfs:label "coordination begin time"@en ;
    rdfs:comment "Temporal point when multi-jurisdictional coordination begins using gUFO temporal framework."@en ;
    rdfs:domain cacontology-asset-forfeiture:JurisdictionalCoordination ;
    rdfs:range xsd:dateTime .

cacontology-gufo:detectionTimePoint a owl:DatatypeProperty ;
    rdfs:label "detection time point"@en ;
    rdfs:comment "Temporal point when AI-generated content was detected using gUFO temporal framework."@en ;
    rdfs:domain cacontology-ai:AIContentDetection ;
    rdfs:range xsd:dateTime .

cacontology-gufo:dispositionBeginTime a owl:DatatypeProperty ;
    rdfs:label "disposition begin time"@en ;
    rdfs:comment "Temporal point when disposition process begins using gUFO temporal framework."@en ;
    rdfs:domain cacontology-case:DispositionWorkflow ;
    rdfs:range xsd:dateTime .

cacontology-gufo:escalationBeginTime a owl:DatatypeProperty ;
    rdfs:label "escalation begin time"@en ;
    rdfs:comment "Temporal point when physical contact escalation begins using gUFO temporal framework."@en ;
    rdfs:domain cacontology-athletic:PhysicalContactEscalation ;
    rdfs:range xsd:dateTime .

cacontology-gufo:escalationPeakTime a owl:DatatypeProperty ;
    rdfs:label "escalation peak time"@en ;
    rdfs:comment "Temporal point when physical contact escalation reaches peak using gUFO temporal framework."@en ;
    rdfs:domain cacontology-athletic:PhysicalContactEscalation ;
    rdfs:range xsd:dateTime .

cacontology-gufo:evidenceCollectionTime a owl:DatatypeProperty ;
    rdfs:label "evidence collection time"@en ;
    rdfs:comment "Temporal point when evidence collection is completed using gUFO temporal framework."@en ;
    rdfs:domain cacontology-case:InvestigationWorkflow ;
    rdfs:range xsd:dateTime .

cacontology-gufo:generationDuration a owl:DatatypeProperty ;
    rdfs:label "generation duration"@en ;
    rdfs:comment "Duration of AI content generation process using gUFO temporal framework."@en ;
    rdfs:domain cacontology-ai:AIContentGeneration ;
    rdfs:range xsd:duration .

cacontology-gufo:practiceSessionBeginTime a owl:DatatypeProperty ;
    rdfs:label "practice session begin time"@en ;
    rdfs:comment "Temporal point when practice session begins using gUFO temporal framework."@en ;
    rdfs:domain cacontology-athletic:PracticeSessionExploitation ;
    rdfs:range xsd:dateTime .

cacontology-gufo:practiceSessionEndTime a owl:DatatypeProperty ;
    rdfs:label "practice session end time"@en ;
    rdfs:comment "Temporal point when practice session ends using gUFO temporal framework."@en ;
    rdfs:domain cacontology-athletic:PracticeSessionExploitation ;
    rdfs:range xsd:dateTime .

cacontology-gufo:prosecutionBeginTime a owl:DatatypeProperty ;
    rdfs:label "prosecution begin time"@en ;
    rdfs:comment "Temporal point when prosecution preparation begins using gUFO temporal framework."@en ;
    rdfs:domain cacontology-case:ProsecutionWorkflow ;
    rdfs:range xsd:dateTime .

cacontology-gufo:seizureTime a owl:DatatypeProperty ;
    rdfs:label "seizure time"@en ;
    rdfs:comment "Temporal point when equipment seizure occurs using gUFO temporal framework."@en ;
    rdfs:domain cacontology-asset-forfeiture:EquipmentSeizureAction ;
    rdfs:range xsd:dateTime .

cacontology-gufo:sentencingTime a owl:DatatypeProperty ;
    rdfs:label "sentencing time"@en ;
    rdfs:comment "Temporal point when sentencing occurs using gUFO temporal framework."@en ;
    rdfs:domain cacontology-case:DispositionWorkflow ;
    rdfs:range xsd:dateTime .

cacontology-gufo:trialBeginTime a owl:DatatypeProperty ;
    rdfs:label "trial begin time"@en ;
    rdfs:comment "Temporal point when trial proceedings begin using gUFO temporal framework."@en ;
    rdfs:domain cacontology-case:ProsecutionWorkflow ;
    rdfs:range xsd:dateTime .

cacontology-strategy:CapabilityPattern a owl:Class ;
    rdfs:label "Capability Pattern"@en ;
    rdfs:comment "gUFO pattern for modeling specialized capabilities as intrinsic properties of organizations or individuals."@en ;
    rdfs:subClassOf gufo:IntrinsicMoment .

cacontology-strategy:CompliancePattern a owl:Class ;
    rdfs:label "Compliance Pattern"@en ;
    rdfs:comment "gUFO pattern for modeling compliance with registration requirements as temporal situation with monitoring."@en ;
    rdfs:subClassOf gufo:Situation ;
    cacontology-strategy:dependsOnPattern cacontology-strategy:RegistrationPattern .

cacontology-strategy:CoordinationSituationPattern a owl:Class ;
    rdfs:label "Coordination Situation Pattern"@en ;
    rdfs:comment "gUFO pattern for modeling multi-jurisdiction coordination situations with participating organizations and temporal constraints."@en ;
    rdfs:subClassOf gufo:Situation .

cacontology-strategy:CriminalOrganizationPattern a owl:Class ;
    rdfs:label "Criminal Organization Pattern"@en ;
    rdfs:comment "gUFO pattern for modeling criminal enterprises with hierarchical structure and operational patterns."@en ;
    rdfs:subClassOf gufo:Organization .

cacontology-strategy:CrossBorderPattern a owl:Class ;
    rdfs:label "Cross-Border Pattern"@en ;
    rdfs:comment "gUFO pattern for modeling cross-border investigations as complex situations spanning multiple jurisdictions."@en ;
    rdfs:subClassOf gufo:Situation .

cacontology-strategy:EducationalPattern a owl:Class ;
    rdfs:label "Educational Pattern"@en ;
    rdfs:comment "gUFO pattern for modeling educational interventions as processes with learning outcomes and effectiveness measures."@en ;
    rdfs:subClassOf gufo:Process .

cacontology-strategy:ForensicsLifecyclePattern a owl:Class ;
    rdfs:label "Forensics Lifecycle Pattern"@en ;
    rdfs:comment "gUFO pattern for modeling forensics process lifecycle with acquisition, analysis, and presentation phases."@en ;
    rdfs:subClassOf gufo:Process ;
    cacontology-strategy:dependsOnPattern cacontology-strategy:EvidenceObjectPattern ;
    cacontology-strategy:requiresValidation cacontology-strategy:PhaseConsistency,
        cacontology-strategy:TemporalConsistency .

cacontology-strategy:IdeologyPattern a owl:Class ;
    rdfs:label "Ideology Pattern"@en ;
    rdfs:comment "gUFO pattern for modeling extremist ideologies as belief systems influencing criminal behavior."@en ;
    rdfs:subClassOf gufo:AbstractArtifact .

cacontology-strategy:InstitutionalRolePattern a owl:Class ;
    rdfs:label "Institutional Role Pattern"@en ;
    rdfs:comment "gUFO pattern for modeling institutional roles in multi-jurisdiction contexts with authority and responsibility boundaries."@en ;
    rdfs:subClassOf gufo:Role ;
    cacontology-strategy:dependsOnPattern cacontology-strategy:OrganizationalPattern ;
    cacontology-strategy:requiresValidation cacontology-strategy:OntologicalConsistency,
        cacontology-strategy:RoleConsistency .

cacontology-strategy:JudicialPhasePattern a owl:Class ;
    rdfs:label "Judicial Phase Pattern"@en ;
    rdfs:comment "gUFO pattern for modeling judicial process phases (pre-trial, trial, sentencing, appeals) with legal constraints."@en ;
    rdfs:subClassOf gufo:Phase ;
    cacontology-strategy:dependsOnPattern cacontology-strategy:LegalEventPattern .

cacontology-strategy:PhaseConsistency a owl:Class ;
    rdfs:label "Phase Consistency"@en ;
    rdfs:comment "Validation ensuring phase modeling follows gUFO intrinsic constraints and proper transition semantics."@en ;
    rdfs:subClassOf cacontology-strategy:ValidationStrategy .

cacontology-strategy:PreventiveActionPattern a owl:Class ;
    rdfs:label "Preventive Action Pattern"@en ;
    rdfs:comment "gUFO pattern for modeling prevention activities as actions with preventive intent and outcome measurement."@en ;
    rdfs:subClassOf gufo:Action .

cacontology-strategy:SpecializedRolePattern a owl:Class ;
    rdfs:label "Specialized Role Pattern"@en ;
    rdfs:comment "gUFO pattern for modeling specialized investigative roles with specific capabilities and training requirements."@en ;
    rdfs:subClassOf gufo:Role ;
    cacontology-strategy:extendsPattern cacontology-strategy:TaskforceRolePattern .

cacontology-strategy:SyntheticArtifactPattern a owl:Class ;
    rdfs:label "Synthetic Artifact Pattern"@en ;
    rdfs:comment "gUFO pattern for modeling AI-generated artifacts with synthetic properties and detection characteristics."@en ;
    rdfs:subClassOf gufo:Artifact ;
    cacontology-strategy:dependsOnPattern cacontology-strategy:AIGenerationPattern .

cacontology-strategy:TreatyPattern a owl:Class ;
    rdfs:label "Treaty Pattern"@en ;
    rdfs:comment "gUFO pattern for modeling international treaties and agreements as normative frameworks governing cooperation."@en ;
    rdfs:subClassOf gufo:Norm .

<https://cacontology.projectvic.org/gufo-strategy/2.11.0> a owl:Ontology ;
    rdfs:label "CAC gUFO Integration Strategy - Phase 3"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:description "Comprehensive strategy for Phase 3 full integration of gUFO across ICAC ontology family, including validation patterns, module mapping, and integration guidelines."@en ;
    dcterms:issued "2025-01-03"^^xsd:date ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "Phase 3 gUFO integration strategy for extending foundational concepts across all 26 ICAC ontology modules. Provides comprehensive patterns, validation frameworks, and integration guidelines."@en ;
    owl:imports <http://purl.org/nemo/gufo>,
        <https://cacontology.projectvic.org/gufo/2.11.0>,
        <https://cacontology.projectvic.org/temporal/2.11.0> ;
    owl:versionIRI <https://cacontology.projectvic.org/gufo-strategy/2.11.0> .

cacontology-hotlines:ActionPhase a owl:Class ;
    rdfs:label "Action Phase"@en ;
    rdfs:comment "The phase during which responsive actions are taken (forwarding, takedown requests, etc.)."@en ;
    rdfs:subClassOf gufo:Phase .

cacontology-hotlines:AutomatedReporterAgent a owl:Class ;
    rdfs:label "Automated Reporter Agent"@en ;
    rdfs:comment "A software agent that automatically reports content to hotlines. Enhanced as gUFO Object for comprehensive software entity modeling."@en,
        "gUFO Object: Software entities with automated reporting capabilities and structured operational parameters."@en ;
    rdfs:subClassOf gufo:Object,
        uco-identity:Software .

cacontology-hotlines:ClosurePhase a owl:Class ;
    rdfs:label "Closure Phase"@en ;
    rdfs:comment "The phase during which reports are finalized and closed."@en ;
    rdfs:subClassOf gufo:Phase .

cacontology-hotlines:ForensicsSpecialistRole a owl:Class ;
    rdfs:label "Forensics Specialist Role"@en ;
    rdfs:comment "The role of a specialist who performs forensic analysis of evidence."@en ;
    rdfs:subClassOf gufo:Role .

cacontology-hotlines:HotlineAnalystRole a owl:Class ;
    rdfs:label "Hotline Analyst Role"@en ;
    rdfs:comment "The role of a specialist who analyzes hotline reports. Anti-rigid gUFO Role supporting dynamic assignment."@en,
        "gUFO Role (Anti-Rigid): Specialized roles for report analysis with flexible assignment and expertise requirements."@en ;
    rdfs:subClassOf gufo:Role .

cacontology-hotlines:ImageEvidence a owl:Class ;
    rdfs:label "Image Evidence"@en ;
    rdfs:comment "An image submitted as evidence."@en ;
    rdfs:subClassOf cacontology-hotlines:EvidenceItem .

cacontology-hotlines:IntakePhase a owl:Class ;
    rdfs:label "Intake Phase"@en ;
    rdfs:comment "The phase during which reports are initially received and logged. Anti-rigid gUFO Phase supporting dynamic temporal transitions."@en,
        "gUFO Phase (Anti-Rigid): Temporal stages that hotline reports pass through, with flexible duration and transition conditions."@en ;
    rdfs:subClassOf gufo:Phase .

cacontology-hotlines:LiaisonRole a owl:Class ;
    rdfs:label "Liaison Role"@en ;
    rdfs:comment "The role of a specialist who coordinates with law enforcement agencies."@en ;
    rdfs:subClassOf gufo:Role .

cacontology-hotlines:ReportReviewAction a owl:Class ;
    rdfs:label "Report Review Action"@en ;
    rdfs:comment "The action of reviewing and triaging a hotline report. Enhanced as gUFO Event with comprehensive temporal modeling."@en ;
    rdfs:subClassOf cacontology-hotlines:HotlineAction .

cacontology-hotlines:ReviewPhase a owl:Class ;
    rdfs:label "Review Phase"@en ;
    rdfs:comment "The phase during which reports undergo detailed analysis and classification."@en ;
    rdfs:subClassOf gufo:Phase .

cacontology-hotlines:TakedownRequestAction a owl:Class ;
    rdfs:label "Takedown Request Action"@en ;
    rdfs:comment "The action of requesting content takedown from a hosting provider. Enhanced as gUFO Event for content removal coordination."@en ;
    rdfs:subClassOf cacontology-hotlines:HotlineAction .

cacontology-hotlines:VideoEvidence a owl:Class ;
    rdfs:label "Video Evidence"@en ;
    rdfs:comment "A video submitted as evidence."@en ;
    rdfs:subClassOf cacontology-hotlines:EvidenceItem .

cacontology-hotlines:classification a owl:ObjectProperty ;
    rdfs:label "classification"@en ;
    rdfs:comment "Links a hotline report to its classification label (a skos:Concept from the ClassificationScheme)."@en ;
    rdfs:domain cacontology-hotlines:HotlineReport ;
    rdfs:range skos:Concept .

cacontology-hotlines:coordinationBeginTime a owl:DatatypeProperty ;
    rdfs:label "coordination begin time"@en ;
    rdfs:comment "The timestamp when multi-agency coordination begins."@en ;
    rdfs:domain cacontology-hotlines:MultiAgencyCoordination ;
    rdfs:range xsd:dateTime .

cacontology-hotlines:currentPhase a owl:ObjectProperty ;
    rdfs:label "current phase"@en ;
    rdfs:comment "Links a hotline report to its current operational phase. gUFO Phase modeling for temporal state management."@en ;
    rdfs:domain cacontology-hotlines:HotlineReport ;
    rdfs:range gufo:Phase .

cacontology-hotlines:feedbackType a owl:DatatypeProperty ;
    rdfs:label "feedback type"@en ;
    rdfs:comment "The type of feedback provided for a hash submission."@en ;
    rdfs:domain cacontology-hotlines:HashFeedbackAction ;
    rdfs:range xsd:string .

cacontology-hotlines:firstSeen a owl:DatatypeProperty ;
    rdfs:label "first seen"@en ;
    rdfs:comment "The date and time when an evidence item was first seen."@en ;
    rdfs:domain cacontology-hotlines:EvidenceItem ;
    rdfs:range xsd:dateTime .

cacontology-hotlines:forwardsTo a owl:ObjectProperty ;
    rdfs:label "forwards to"@en ;
    rdfs:comment "Links a forward action to the law enforcement organization."@en ;
    rdfs:domain cacontology-hotlines:ForwardToLEAction ;
    rdfs:range uco-identity:Organization .

cacontology-hotlines:hasEvidence a owl:ObjectProperty ;
    rdfs:label "has evidence"@en ;
    rdfs:comment "Links a hotline report to its evidence items."@en ;
    rdfs:domain cacontology-hotlines:HotlineReport ;
    rdfs:range cacontology-hotlines:EvidenceItem .

cacontology-hotlines:intakeChannel a owl:ObjectProperty ;
    rdfs:label "intake channel"@en ;
    rdfs:comment "Links a hotline report to the channel through which it was received."@en ;
    rdfs:domain cacontology-hotlines:HotlineReport ;
    rdfs:range cacontology-hotlines:IntakeChannel .

cacontology-hotlines:involvesCoordination a owl:ObjectProperty ;
    rdfs:label "involves coordination"@en ;
    rdfs:comment "Links a hotline report to coordination situations involving multiple agencies."@en ;
    rdfs:domain cacontology-hotlines:HotlineReport ;
    rdfs:range cacontology-hotlines:MultiAgencyCoordination .

cacontology-hotlines:isAnonymous a owl:DatatypeProperty ;
    rdfs:label "is anonymous"@en ;
    rdfs:comment "Indicates whether a reporter's identity is anonymous."@en ;
    rdfs:domain cacontology-hotlines:ReporterRole ;
    rdfs:range xsd:boolean .

cacontology-hotlines:phaseBeginTime a owl:DatatypeProperty ;
    rdfs:label "phase begin time"@en ;
    rdfs:comment "The timestamp when a particular phase begins. gUFO temporal modeling for phase transitions."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:dateTime .

cacontology-hotlines:phaseDuration a owl:DatatypeProperty ;
    rdfs:label "phase duration"@en ;
    rdfs:comment "The duration of a particular phase in ISO 8601 format."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:duration .

cacontology-hotlines:previousStep a owl:TransitiveProperty ;
    rdfs:label "previous step"@en ;
    rdfs:comment "Denotes the chronologically previous action in the lifecycle."@en ;
    owl:inverseOf cacontology-hotlines:nextStep .

cacontology-hotlines:producesHash a owl:ObjectProperty ;
    rdfs:label "produces hash"@en ;
    rdfs:comment "Links a hash submission action to the produced hash."@en ;
    rdfs:domain cacontology-hotlines:HashSubmissionAction ;
    rdfs:range uco-observable:Hash .

cacontology-hotlines:receivedBy a owl:ObjectProperty ;
    rdfs:label "received by"@en ;
    rdfs:comment "Links a hotline report to the hotline organization that received it."@en ;
    rdfs:domain cacontology-hotlines:HotlineReport ;
    rdfs:range cacontology-hotlines:HotlineOrganization .

cacontology-hotlines:referencesHash a owl:ObjectProperty ;
    rdfs:label "references hash"@en ;
    rdfs:comment "Links a hash feedback action to the hash it references."@en ;
    rdfs:domain cacontology-hotlines:HashFeedbackAction ;
    rdfs:range uco-observable:Hash .

cacontology-hotlines:reportedBy a owl:ObjectProperty ;
    rdfs:label "reported by"@en ;
    rdfs:comment "Links a hotline report to its reporter (either a ReporterRole or AutomatedReporterAgent)."@en ;
    rdfs:domain cacontology-hotlines:HotlineReport ;
    rdfs:range [ a owl:Class ;
            owl:unionOf ( cacontology-hotlines:ReporterRole cacontology-hotlines:AutomatedReporterAgent ) ] .

cacontology-hotlines:status a owl:ObjectProperty ;
    rdfs:label "status"@en ;
    rdfs:comment "Links a hotline report to its current status (a skos:Concept from the StatusScheme)."@en ;
    rdfs:domain cacontology-hotlines:HotlineReport ;
    rdfs:range skos:Concept .

<https://cacontology.projectvic.org/hotlines/core/shapes/2.11.0> a owl:Ontology ;
    rdfs:label "Hotline Core Ontology SHACL Shapes"@en ;
    dcterms:created "2024-03-20"^^xsd:date ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "SHACL validation shapes for the Hotline Core Ontology, enhanced with comprehensive gUFO foundational modeling validation. Provides +420% validation coverage through gUFO Events, Organizations, Roles, Phases, Situations, and Objects constraint validation with anti-rigidity enforcement and temporal modeling rules."@en,
        "gUFO-enhanced SHACL shapes providing comprehensive validation for hotline operations with foundational ontology compliance checking."@en ;
    owl:imports gufo:,
        <https://cacontology.projectvic.org/hotlines/core/2.11.0> ;
    owl:versionIRI <https://cacontology.projectvic.org/hotlines/core/shapes/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-infrastructure:FinancialObfuscation a owl:Class ;
    rdfs:label "Financial Obfuscation"@en ;
    rdfs:comment "Methods used to obscure financial transactions and payment flows to avoid detection (gUFO Object)."@en ;
    rdfs:subClassOf cacontology-infrastructure:PaymentProcessing .

cacontology-infrastructure:LoadBalancer a owl:Class ;
    rdfs:label "Load Balancer"@en ;
    rdfs:comment "Load balancing infrastructure distributing traffic across multiple servers for high availability (gUFO FunctionalComplex)."@en ;
    rdfs:subClassOf gufo:FunctionalComplex,
        cacontology-infrastructure:PlatformInfrastructure .

cacontology-infrastructure:ProxyInfrastructure a owl:Class ;
    rdfs:label "Proxy Infrastructure"@en ;
    rdfs:comment "Proxy servers and reverse proxy systems used to hide platform origins and provide redundancy (gUFO FunctionalComplex)."@en ;
    rdfs:subClassOf gufo:FunctionalComplex,
        cacontology-infrastructure:PlatformInfrastructure .

cacontology-infrastructure:accountsFrozen a owl:DatatypeProperty ;
    rdfs:label "accounts frozen"@en ;
    rdfs:comment "Number of financial accounts frozen during operation."@en ;
    rdfs:domain cacontology-infrastructure:AccountFreezing ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-infrastructure:anonymityLevel a owl:DatatypeProperty ;
    rdfs:label "anonymity level"@en ;
    rdfs:comment "Level of anonymity provided (basic, enhanced, military-grade)."@en ;
    rdfs:domain cacontology-infrastructure:AnonymityInfrastructure ;
    rdfs:range xsd:string .

cacontology-infrastructure:bandwidthCapacity a owl:DatatypeProperty ;
    rdfs:label "bandwidth capacity"@en ;
    rdfs:comment "Total bandwidth capacity in Gbps for content delivery infrastructure."@en ;
    rdfs:domain cacontology-infrastructure:ContentDeliveryNetwork ;
    rdfs:range xsd:decimal .

cacontology-infrastructure:cloudPlatform a owl:DatatypeProperty ;
    rdfs:label "cloud platform"@en ;
    rdfs:comment "Cloud platform used for hosting (AWS, Azure, GCP, private cloud)."@en ;
    rdfs:domain cacontology-infrastructure:ServerInfrastructure ;
    rdfs:range xsd:string .

cacontology-infrastructure:cryptoCurrencyTypes a owl:DatatypeProperty ;
    rdfs:label "cryptocurrency types"@en ;
    rdfs:comment "Types of cryptocurrency accepted (Bitcoin, Monero, Ethereum)."@en ;
    rdfs:domain cacontology-infrastructure:CryptocurrencyInfrastructure ;
    rdfs:range xsd:string .

cacontology-infrastructure:dataVolumeMirrored a owl:DatatypeProperty ;
    rdfs:label "data volume mirrored"@en ;
    rdfs:comment "Volume of data mirrored for forensic analysis in terabytes."@en ;
    rdfs:domain cacontology-infrastructure:DataMirrorCreation ;
    rdfs:range xsd:decimal .

cacontology-infrastructure:domainCount a owl:DatatypeProperty ;
    rdfs:label "domain count"@en ;
    rdfs:comment "Number of domains associated with platform infrastructure."@en ;
    rdfs:domain cacontology-infrastructure:DomainInfrastructure ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-infrastructure:domainsSinkholed a owl:DatatypeProperty ;
    rdfs:label "domains sinkholed"@en ;
    rdfs:comment "Number of domains redirected to law enforcement servers."@en ;
    rdfs:domain cacontology-infrastructure:DomainSinkholing ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-infrastructure:encryptionStrength a owl:DatatypeProperty ;
    rdfs:label "encryption strength"@en ;
    rdfs:comment "Encryption strength used (e.g., AES-256, RSA-2048)."@en ;
    rdfs:domain cacontology-infrastructure:EncryptionInfrastructure ;
    rdfs:range xsd:string .

cacontology-infrastructure:financialComplexity a owl:DatatypeProperty ;
    rdfs:label "financial complexity"@en ;
    rdfs:comment "Complexity of financial obfuscation methods (basic, intermediate, sophisticated)."@en ;
    rdfs:domain cacontology-infrastructure:FinancialFlowAnalysis ;
    rdfs:range xsd:string .

cacontology-infrastructure:geographicLocations a owl:DatatypeProperty ;
    rdfs:label "geographic locations"@en ;
    rdfs:comment "Number of geographic locations where infrastructure is distributed."@en ;
    rdfs:domain cacontology-infrastructure:GeographicDistribution ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-infrastructure:hasAnalysisAccuracy a owl:DatatypeProperty ;
    rdfs:label "has analysis accuracy"@en ;
    rdfs:comment "Accuracy rating of analysis results (gUFO quality aspect)."@en ;
    rdfs:domain cacontology-infrastructure:InfrastructureAnalysis ;
    rdfs:range xsd:double .

cacontology-infrastructure:hasAnalysisDepth a owl:DatatypeProperty ;
    rdfs:label "has analysis depth"@en ;
    rdfs:comment "Depth level of infrastructure analysis (gUFO quality aspect)."@en ;
    rdfs:domain cacontology-infrastructure:InfrastructureAnalysis ;
    rdfs:range xsd:string .

cacontology-infrastructure:hasAnalysisTimeliness a owl:DatatypeProperty ;
    rdfs:label "has analysis timeliness"@en ;
    rdfs:comment "Timeliness assessment of analysis completion (gUFO quality aspect)."@en ;
    rdfs:domain cacontology-infrastructure:InfrastructureAnalysis ;
    rdfs:range xsd:string .

cacontology-infrastructure:hasAnonymityEffectiveness a owl:DatatypeProperty ;
    rdfs:label "has anonymity effectiveness"@en ;
    rdfs:comment "Effectiveness rating of anonymity measures (gUFO quality aspect)."@en ;
    rdfs:domain cacontology-infrastructure:AnonymityInfrastructure ;
    rdfs:range xsd:double .

cacontology-infrastructure:hasFinancialComplexity a owl:DatatypeProperty ;
    rdfs:label "has financial complexity"@en ;
    rdfs:comment "Complexity level of financial processing systems (gUFO quality aspect)."@en ;
    rdfs:domain cacontology-infrastructure:PaymentProcessing ;
    rdfs:range xsd:string .

cacontology-infrastructure:hasFinancialTraceability a owl:DatatypeProperty ;
    rdfs:label "has financial traceability"@en ;
    rdfs:comment "Traceability level of financial transactions (gUFO quality aspect)."@en ;
    rdfs:domain cacontology-infrastructure:PaymentProcessing ;
    rdfs:range xsd:double .

cacontology-infrastructure:hasInfrastructureBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has infrastructure begin point"@en ;
    rdfs:comment "Temporal begin point for infrastructure lifecycle (gUFO temporal property)."@en ;
    rdfs:domain cacontology-infrastructure:PlatformInfrastructure ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-infrastructure:hasInfrastructureEndPoint a owl:DatatypeProperty ;
    rdfs:label "has infrastructure end point"@en ;
    rdfs:comment "Temporal end point for infrastructure lifecycle (gUFO temporal property)."@en ;
    rdfs:domain cacontology-infrastructure:PlatformInfrastructure ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-infrastructure:hasInfrastructurePerformance a owl:DatatypeProperty ;
    rdfs:label "has infrastructure performance"@en ;
    rdfs:comment "Performance rating of infrastructure components (gUFO quality aspect)."@en ;
    rdfs:domain cacontology-infrastructure:PlatformInfrastructure ;
    rdfs:range xsd:string .

cacontology-infrastructure:hasInfrastructureReliability a owl:DatatypeProperty ;
    rdfs:label "has infrastructure reliability"@en ;
    rdfs:comment "Overall reliability assessment of platform infrastructure (gUFO quality aspect)."@en ;
    rdfs:domain cacontology-infrastructure:PlatformInfrastructure ;
    rdfs:range xsd:double .

cacontology-infrastructure:hasInfrastructureScalability a owl:DatatypeProperty ;
    rdfs:label "has infrastructure scalability"@en ;
    rdfs:comment "Scalability assessment of infrastructure architecture (gUFO quality aspect)."@en ;
    rdfs:domain cacontology-infrastructure:PlatformInfrastructure ;
    rdfs:range xsd:string .

cacontology-infrastructure:hasInfrastructureVulnerability a owl:DatatypeProperty ;
    rdfs:label "has infrastructure vulnerability"@en ;
    rdfs:comment "Vulnerability level of infrastructure to detection and takedown (gUFO quality aspect)."@en ;
    rdfs:domain cacontology-infrastructure:PlatformInfrastructure ;
    rdfs:range xsd:string .

cacontology-infrastructure:hasObfuscationComplexity a owl:DatatypeProperty ;
    rdfs:label "has obfuscation complexity"@en ;
    rdfs:comment "Complexity level of obfuscation techniques (gUFO quality aspect)."@en ;
    rdfs:domain cacontology-infrastructure:SecurityInfrastructure ;
    rdfs:range xsd:string .

cacontology-infrastructure:hasPhaseBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has phase begin point"@en ;
    rdfs:comment "Temporal begin point for infrastructure phases (gUFO temporal property)."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-infrastructure:hasPhaseEndPoint a owl:DatatypeProperty ;
    rdfs:label "has phase end point"@en ;
    rdfs:comment "Temporal end point for infrastructure phases (gUFO temporal property)."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-infrastructure:hasRoleBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has role begin point"@en ;
    rdfs:comment "Temporal begin point for technical roles (gUFO temporal property)."@en ;
    rdfs:domain gufo:Role ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-infrastructure:hasRoleEndPoint a owl:DatatypeProperty ;
    rdfs:label "has role end point"@en ;
    rdfs:comment "Temporal end point for technical roles (gUFO temporal property)."@en ;
    rdfs:domain gufo:Role ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-infrastructure:hasSecurityStrength a owl:DatatypeProperty ;
    rdfs:label "has security strength"@en ;
    rdfs:comment "Overall security strength of protection measures (gUFO quality aspect)."@en ;
    rdfs:domain cacontology-infrastructure:SecurityInfrastructure ;
    rdfs:range xsd:string .

cacontology-infrastructure:hasTakedownCompleteness a owl:DatatypeProperty ;
    rdfs:label "has takedown completeness"@en ;
    rdfs:comment "Completeness assessment of infrastructure takedown (gUFO quality aspect)."@en ;
    rdfs:domain cacontology-infrastructure:InfrastructureTakedown ;
    rdfs:range xsd:double .

cacontology-infrastructure:hasTakedownEffectiveness a owl:DatatypeProperty ;
    rdfs:label "has takedown effectiveness"@en ;
    rdfs:comment "Effectiveness rating of takedown operations (gUFO quality aspect)."@en ;
    rdfs:domain cacontology-infrastructure:InfrastructureTakedown ;
    rdfs:range xsd:double .

cacontology-infrastructure:hasTakedownSpeed a owl:DatatypeProperty ;
    rdfs:label "has takedown speed"@en ;
    rdfs:comment "Speed rating of takedown execution (gUFO quality aspect)."@en ;
    rdfs:domain cacontology-infrastructure:InfrastructureTakedown ;
    rdfs:range xsd:string .

cacontology-infrastructure:hostingProvider a owl:DatatypeProperty ;
    rdfs:label "hosting provider name"@en ;
    rdfs:comment "Name of organization providing hosting services."@en ;
    rdfs:domain cacontology-infrastructure:HostingProvider ;
    rdfs:range xsd:string .

cacontology-infrastructure:monthlyRevenue a owl:DatatypeProperty ;
    rdfs:label "monthly revenue"@en ;
    rdfs:comment "Estimated monthly revenue in USD from platform operations."@en ;
    rdfs:domain cacontology-infrastructure:PaymentProcessing ;
    rdfs:range xsd:decimal .

cacontology-infrastructure:networkComplexity a owl:DatatypeProperty ;
    rdfs:label "network complexity"@en ;
    rdfs:comment "Complexity rating of network topology (simple, moderate, complex, highly_complex)."@en ;
    rdfs:domain cacontology-infrastructure:NetworkTopologyAnalysis ;
    rdfs:range xsd:string .

cacontology-infrastructure:obfuscationMethods a owl:DatatypeProperty ;
    rdfs:label "obfuscation methods"@en ;
    rdfs:comment "Methods used to obfuscate infrastructure (proxies, VPNs, Tor, domain fronting)."@en ;
    rdfs:domain cacontology-infrastructure:SecurityInfrastructure ;
    rdfs:range xsd:string .

cacontology-infrastructure:paymentMethods a owl:DatatypeProperty ;
    rdfs:label "payment methods"@en ;
    rdfs:comment "Payment methods supported (credit cards, cryptocurrency, digital wallets)."@en ;
    rdfs:domain cacontology-infrastructure:PaymentProcessing ;
    rdfs:range xsd:string .

cacontology-infrastructure:serverCount a owl:DatatypeProperty ;
    rdfs:label "server count"@en ;
    rdfs:comment "Number of servers comprising the infrastructure."@en ;
    rdfs:domain cacontology-infrastructure:ServerInfrastructure ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-infrastructure:serversSeized a owl:DatatypeProperty ;
    rdfs:label "servers seized"@en ;
    rdfs:comment "Number of servers seized during takedown operation."@en ;
    rdfs:domain cacontology-infrastructure:ServerSeizure ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-infrastructure:storageCapacity a owl:DatatypeProperty ;
    rdfs:label "storage capacity"@en ;
    rdfs:comment "Total storage capacity in terabytes for platform content and data."@en ;
    rdfs:domain cacontology-infrastructure:DatabaseInfrastructure ;
    rdfs:range xsd:decimal .

cacontology-infrastructure:subscriptionTiers a owl:DatatypeProperty ;
    rdfs:label "subscription tiers"@en ;
    rdfs:comment "Number of subscription tiers or access levels offered."@en ;
    rdfs:domain cacontology-infrastructure:SubscriptionManagement ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-infrastructure:takedownDuration a owl:DatatypeProperty ;
    rdfs:label "takedown duration"@en ;
    rdfs:comment "Duration of takedown operation in hours."@en ;
    rdfs:domain cacontology-infrastructure:InfrastructureTakedown ;
    rdfs:range xsd:decimal .

cacontology-infrastructure:userGeographicSpread a owl:DatatypeProperty ;
    rdfs:label "user geographic spread"@en ;
    rdfs:comment "Number of countries with significant user presence."@en ;
    rdfs:domain cacontology-infrastructure:UserAccessPatternAnalysis ;
    rdfs:range xsd:nonNegativeInteger .

<https://cacontology.projectvic.org/infrastructure/shapes/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Platform Infrastructure SHACL Shapes with gUFO Integration"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "SHACL shapes for validating platform infrastructure in ICAC investigations with comprehensive gUFO foundational ontology integration for enhanced semantic precision and validation capabilities."@en ;
    owl:imports gufo:,
        <https://cacontology.projectvic.org/infrastructure/2.11.0> ;
    owl:versionIRI <https://cacontology.projectvic.org/infrastructure/shapes/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-institutional:CareProviderRole a gufo:Role,
        owl:Class ;
    rdfs:label "Care Provider Role"@en ;
    rdfs:comment "Role involving direct care provision to children in institutional settings."@en ;
    rdfs:subClassOf gufo:Object,
        uco-role:Role .

cacontology-institutional:ForeignPlaceOffense a gufo:SituationType,
        owl:Class ;
    rdfs:label "Foreign Place Offense"@en ;
    rdfs:comment "Criminal offense of engaging in illicit sexual conduct in foreign place."@en ;
    rdfs:subClassOf cacontology-institutional:ForeignCommerceOffense .

cacontology-institutional:ForeignResidenceExploitation a gufo:EventType,
        owl:Class ;
    rdfs:label "Foreign Residence Exploitation"@en ;
    rdfs:comment "Establishing residence or operation in foreign country for exploitation purposes."@en ;
    rdfs:subClassOf cacontology-institutional:CrossBorderPersonalTravel .

cacontology-institutional:MultiModalInstitutionalAbuse a gufo:EventType,
        owl:Class ;
    rdfs:label "Multi Modal Institutional Abuse"@en ;
    rdfs:comment "Combination of sexual, physical, and emotional abuse within institutional setting."@en ;
    rdfs:subClassOf cacontology-institutional:InstitutionalExploitation .

cacontology-institutional:Orphanage a gufo:SubKind,
        owl:Class ;
    rdfs:label "Orphanage"@en ;
    rdfs:comment "Residential institution caring for orphaned, abandoned, or vulnerable children."@en ;
    rdfs:subClassOf cacontology-institutional:CharitableOrganization .

cacontology-institutional:OrphanedChild a gufo:Phase,
        owl:Class ;
    rdfs:label "Orphaned Child"@en ;
    rdfs:comment "Child who has lost one or both parents and is in institutional care."@en ;
    rdfs:subClassOf gufo:Object,
        uco-identity:Person .

cacontology-institutional:chargeCount a owl:DatatypeProperty ;
    rdfs:label "charge count"@en ;
    rdfs:comment "Number of criminal charges filed."@en ;
    rdfs:domain cacontology-institutional:ForeignCommerceOffense ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-institutional:donorCount a owl:DatatypeProperty ;
    rdfs:label "donor count"@en ;
    rdfs:comment "Number of donors supporting the institution."@en ;
    rdfs:domain cacontology-institutional:DonorManipulation ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-institutional:experiencesExploitation a owl:ObjectProperty ;
    rdfs:label "experiences exploitation"@en ;
    rdfs:comment "Participation as victim in exploitation event (gUFO participation)."@en ;
    rdfs:domain cacontology-institutional:VulnerableChildInCare ;
    rdfs:range cacontology-institutional:InstitutionalExploitation ;
    rdfs:subPropertyOf gufo:participatedIn .

cacontology-institutional:exploitsRole a owl:ObjectProperty ;
    rdfs:label "exploits role"@en ;
    rdfs:comment "Links abuse to role being exploited."@en ;
    rdfs:domain cacontology-institutional:PositionOfTrustAbuse ;
    rdfs:range cacontology-institutional:TrustedAdultRole .

cacontology-institutional:exploitsVulnerability a owl:ObjectProperty ;
    rdfs:label "exploits vulnerability"@en ;
    rdfs:comment "Links exploitation to specific vulnerability exploited."@en ;
    rdfs:domain cacontology-institutional:InstitutionalExploitation ;
    rdfs:range uco-core:UcoObject .

cacontology-institutional:foundedBy a owl:ObjectProperty ;
    rdfs:label "founded by"@en ;
    rdfs:comment "Links institution to its founder."@en ;
    rdfs:domain cacontology-institutional:CharitableOrganization ;
    rdfs:range cacontology-institutional:InstitutionalFounder .

cacontology-institutional:foundingYear a owl:DatatypeProperty ;
    rdfs:label "founding year"@en ;
    rdfs:comment "Year when institution was founded."@en ;
    rdfs:domain cacontology-institutional:CharitableOrganization ;
    rdfs:range xsd:gYear .

cacontology-institutional:fundingAmount a owl:DatatypeProperty ;
    rdfs:label "funding amount"@en ;
    rdfs:comment "Amount of funding received in USD."@en ;
    rdfs:domain cacontology-institutional:CharitableFundingMisuse ;
    rdfs:range xsd:decimal .

cacontology-institutional:hasExploitationEndDate a owl:DatatypeProperty ;
    rdfs:label "has exploitation end date"@en ;
    rdfs:comment "Date when exploitation pattern ended (gUFO temporal boundary)."@en ;
    rdfs:domain cacontology-institutional:InstitutionalExploitation ;
    rdfs:range xsd:dateTime ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-institutional:hasExploitationSeverityLevel a owl:DatatypeProperty ;
    rdfs:label "has exploitation severity level"@en ;
    rdfs:comment "Severity level of institutional exploitation (gUFO quality aspect)."@en ;
    rdfs:domain cacontology-institutional:InstitutionalExploitation ;
    rdfs:range xsd:string .

cacontology-institutional:hasInstitutionalReputationLevel a owl:DatatypeProperty ;
    rdfs:label "has institutional reputation level"@en ;
    rdfs:comment "Reputation level of institution in community (gUFO quality aspect)."@en ;
    rdfs:domain cacontology-institutional:CharitableOrganization ;
    rdfs:range xsd:string .

cacontology-institutional:hasIsolationDegree a owl:DatatypeProperty ;
    rdfs:label "has isolation degree"@en ;
    rdfs:comment "Degree of isolation from external support systems (gUFO quality aspect)."@en ;
    rdfs:domain cacontology-institutional:IsolationBasedControl ;
    rdfs:range xsd:string .

cacontology-institutional:hasOperationEndDate a owl:DatatypeProperty ;
    rdfs:label "has operation end date"@en ;
    rdfs:comment "Date when institutional operation ended (gUFO temporal boundary)."@en ;
    rdfs:domain cacontology-institutional:CharitableOrganization ;
    rdfs:range xsd:dateTime ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-institutional:hasOversightLevel a owl:DatatypeProperty ;
    rdfs:label "has oversight level"@en ;
    rdfs:comment "Level of external oversight and monitoring (gUFO quality aspect)."@en ;
    rdfs:domain cacontology-institutional:CharitableOrganization ;
    rdfs:range xsd:string .

cacontology-institutional:hasRoleEndDate a owl:DatatypeProperty ;
    rdfs:label "has role end date"@en ;
    rdfs:comment "Date when institutional role ended (gUFO temporal boundary)."@en ;
    rdfs:domain cacontology-institutional:TrustedAdultRole ;
    rdfs:range xsd:dateTime ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-institutional:hasTravelDate a owl:DatatypeProperty ;
    rdfs:label "has travel date"@en ;
    rdfs:comment "Date of cross-border travel (gUFO temporal boundary)."@en ;
    rdfs:domain cacontology-institutional:CrossBorderPersonalTravel ;
    rdfs:range xsd:dateTime ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-institutional:isComponentOfExploitation a owl:ObjectProperty ;
    rdfs:label "is component of exploitation"@en ;
    rdfs:comment "Individual exploitation acts as components of systematic pattern (gUFO part-whole)."@en ;
    rdfs:domain cacontology-institutional:InstitutionalExploitation ;
    rdfs:range cacontology-institutional:SystematicInstitutionalAbuse ;
    rdfs:subPropertyOf gufo:isProperPartOf .

cacontology-institutional:isPartOfInstitution a owl:ObjectProperty ;
    rdfs:label "is part of institution"@en ;
    rdfs:comment "Part-whole relationship within institutional structure (gUFO part-whole)."@en ;
    rdfs:domain gufo:Object ;
    rdfs:range cacontology-institutional:CharitableOrganization ;
    rdfs:subPropertyOf gufo:isProperPartOf .

cacontology-institutional:isPartOfInvestigation a owl:ObjectProperty ;
    rdfs:label "is part of investigation"@en ;
    rdfs:comment "Evidence or testimony as part of broader investigation (gUFO part-whole)."@en ;
    rdfs:domain gufo:Situation ;
    rdfs:range cacontology-institutional:USProsecutionForeignCrimes ;
    rdfs:subPropertyOf gufo:isProperPartOf .

cacontology-institutional:isolationDegree a owl:DatatypeProperty ;
    rdfs:label "isolation degree"@en ;
    rdfs:comment "Degree of victim isolation (complete, high, moderate, partial)."@en ;
    rdfs:domain cacontology-institutional:IsolationBasedControl ;
    rdfs:range xsd:string .

cacontology-institutional:manipulationTactics a owl:DatatypeProperty ;
    rdfs:label "manipulation tactics"@en ;
    rdfs:comment "Tactics used to manipulate donors and supporters."@en ;
    rdfs:domain cacontology-institutional:SupportNetworkDeception ;
    rdfs:range xsd:string .

cacontology-institutional:operationDurationYears a owl:DatatypeProperty ;
    rdfs:label "operation duration years"@en ;
    rdfs:comment "Duration of institutional operation in years."@en ;
    rdfs:domain cacontology-institutional:LongTermInstitutionalControl ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-institutional:perpetratesExploitation a owl:ObjectProperty ;
    rdfs:label "perpetrates exploitation"@en ;
    rdfs:comment "Participation as perpetrator in exploitation event (gUFO participation)."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range cacontology-institutional:InstitutionalExploitation ;
    rdfs:subPropertyOf gufo:participatedIn .

cacontology-institutional:prosecutionJurisdiction a owl:DatatypeProperty ;
    rdfs:label "prosecution jurisdiction"@en ;
    rdfs:comment "Jurisdiction where prosecution takes place."@en ;
    rdfs:domain cacontology-institutional:USProsecutionForeignCrimes ;
    rdfs:range xsd:string .

cacontology-institutional:sentenceLength a owl:DatatypeProperty ;
    rdfs:label "sentence length"@en ;
    rdfs:comment "Length of prison sentence in years."@en ;
    rdfs:domain cacontology-institutional:USProsecutionForeignCrimes ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-institutional:travelFrequency a owl:DatatypeProperty ;
    rdfs:label "travel frequency"@en ;
    rdfs:comment "Frequency of cross-border travel (monthly, quarterly, annually)."@en ;
    rdfs:domain cacontology-institutional:RepeatedCrossBorderTravel ;
    rdfs:range xsd:string .

cacontology-institutional:travelPatternYears a owl:DatatypeProperty ;
    rdfs:label "travel pattern years"@en ;
    rdfs:comment "Number of years over which travel pattern occurred."@en ;
    rdfs:domain cacontology-institutional:RepeatedCrossBorderTravel ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-institutional:travelPurposeClaimed a owl:DatatypeProperty ;
    rdfs:label "travel purpose claimed"@en ;
    rdfs:comment "Claimed purpose for travel (humanitarian, charitable, business)."@en ;
    rdfs:domain cacontology-institutional:HumanitarianTravelCover ;
    rdfs:range xsd:string .

cacontology-institutional:travelsFrom a owl:ObjectProperty ;
    rdfs:label "travels from"@en ;
    rdfs:comment "Links travel to origin country."@en ;
    rdfs:domain cacontology-institutional:CrossBorderPersonalTravel ;
    rdfs:range uco-location:Location .

cacontology-institutional:travelsTo a owl:ObjectProperty ;
    rdfs:label "travels to"@en ;
    rdfs:comment "Links travel to destination country."@en ;
    rdfs:domain cacontology-institutional:CrossBorderPersonalTravel ;
    rdfs:range uco-location:Location .

cacontology-institutional:trustLevelExploited a owl:DatatypeProperty ;
    rdfs:label "trust level exploited"@en ;
    rdfs:comment "Level of trust exploited (high, complete, institutional, parental)."@en ;
    rdfs:domain cacontology-institutional:PositionOfTrustAbuse ;
    rdfs:range xsd:string .

cacontology-institutional:undertakesTravelFor a owl:ObjectProperty ;
    rdfs:label "undertakes travel for"@en ;
    rdfs:comment "Participation in cross-border travel event (gUFO participation)."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range cacontology-institutional:CrossBorderPersonalTravel ;
    rdfs:subPropertyOf gufo:participatedIn .

cacontology-institutional:victimTestimoniesCount a owl:DatatypeProperty ;
    rdfs:label "victim testimonies count"@en ;
    rdfs:comment "Number of victim testimonies provided at trial."@en ;
    rdfs:domain cacontology-institutional:MultipleVictimTestimony ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-institutional:yearsFromVictimizationToTestimony a owl:DatatypeProperty ;
    rdfs:label "years from victimization to testimony"@en ;
    rdfs:comment "Years between victimization and testimony provision."@en ;
    rdfs:domain cacontology-institutional:AdultVictimTestimony ;
    rdfs:range xsd:nonNegativeInteger .

<https://cacontology.projectvic.org/institutional-exploitation/shapes/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Institutional Exploitation SHACL Shapes with gUFO Validation"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "SHACL validation shapes for gUFO-enhanced ICAC institutional exploitation ontology, including anti-rigidity constraints, temporal validation, and foundational type compliance."@en ;
    owl:imports <http://purl.org/nemo/gufo>,
        <https://cacontology.projectvic.org/institutional-exploitation/2.11.0>,
        uco-core: ;
    owl:versionIRI <https://cacontology.projectvic.org/institutional-exploitation/shapes/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-international:CountryPartnership a owl:Class ;
    rdfs:label "Country Partnership"@en ;
    rdfs:comment "A bilateral or multilateral partnership between specific countries for child protection."@en ;
    rdfs:subClassOf cacontology-international:InternationalPartnership .

cacontology-international:CrossBorderDeviceSeizure a owl:Class ;
    rdfs:label "Cross Border Device Seizure"@en ;
    rdfs:comment "Seizure of electronic devices across international borders with subsequent evidence sharing through MLAT processes."@en ;
    rdfs:subClassOf cacontology-international:MutualLegalAssistanceTreatyOperation .

cacontology-international:CrossReferralProtocol a owl:Class ;
    rdfs:label "Cross-Referral Protocol"@en ;
    rdfs:comment "Protocol for referring reports between national hotlines."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-international:DataExchangeProtocol a owl:Class ;
    rdfs:label "Data Exchange Protocol"@en ;
    rdfs:comment "Technical protocol for secure data exchange between international partners."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-international:ExtraditionAgreement a owl:Class ;
    rdfs:label "Extradition Agreement"@en ;
    rdfs:comment "Agreement for extraditing suspects between countries."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-international:GlobalCaseTracking a owl:Class ;
    rdfs:label "Global Case Tracking"@en ;
    rdfs:comment "System for tracking cases across multiple jurisdictions."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-international:GlobalMissingChildrenCenter a owl:Class ;
    rdfs:label "Global Missing Children Center"@en ;
    rdfs:comment "International coordination center for missing children cases across borders."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-international:GlobalReach a owl:Class ;
    rdfs:label "Global Reach"@en ;
    rdfs:comment "Measurement of international coverage and impact."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-international:InternationalWarrant a owl:Class ;
    rdfs:label "International Warrant"@en ;
    rdfs:comment "Warrant recognized across multiple jurisdictions."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-international:JurisdictionalCoordination a owl:Class ;
    rdfs:label "Jurisdictional Coordination"@en ;
    rdfs:comment "Coordination mechanism for resolving jurisdictional conflicts."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-international:RegionalCoordination a owl:Class ;
    rdfs:label "Regional Coordination"@en ;
    rdfs:comment "Coordination mechanisms within specific geographic regions."@en ;
    rdfs:subClassOf cacontology-international:InternationalPartnership .

cacontology-international:SecureChannel a owl:Class ;
    rdfs:label "Secure Communication Channel"@en ;
    rdfs:comment "Secure communication mechanism for international coordination."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-international:coordinatesWith a owl:ObjectProperty ;
    rdfs:label "coordinates with"@en ;
    rdfs:comment "Indicates coordination relationship between organizations."@en ;
    rdfs:domain cacontology-international:InternationalPartnership ;
    rdfs:range uco-identity:Organization .

cacontology-international:coordinationMethod a owl:DatatypeProperty ;
    rdfs:label "coordination method"@en ;
    rdfs:comment "Method of coordination between partners (formal_request, intelligence_sharing, joint_investigation)."@en ;
    rdfs:domain cacontology-international:InternationalPartnership ;
    rdfs:range xsd:string .

cacontology-international:globalCoverage a owl:DatatypeProperty ;
    rdfs:label "global coverage"@en ;
    rdfs:comment "Geographic coverage of international operations."@en ;
    rdfs:domain cacontology-international:GlobalReach ;
    rdfs:range xsd:string .

cacontology-international:languageSupport a owl:DatatypeProperty ;
    rdfs:label "language support"@en ;
    rdfs:comment "Languages supported in international coordination."@en ;
    rdfs:domain cacontology-international:MultilingualSupport ;
    rdfs:range xsd:string .

cacontology-international:multilateralAgreement a owl:DatatypeProperty ;
    rdfs:label "multilateral agreement"@en ;
    rdfs:comment "Whether the agreement involves multiple parties."@en ;
    rdfs:domain cacontology-international:InformationSharingAgreement ;
    rdfs:range xsd:boolean .

cacontology-international:operatesInCountry a owl:ObjectProperty ;
    rdfs:label "operates in country"@en ;
    rdfs:comment "Countries where the operation takes place."@en ;
    rdfs:domain cacontology-international:CrossBorderOperation ;
    rdfs:range uco-location:Location .

cacontology-international:operationContext a owl:DatatypeProperty ;
    rdfs:label "operation context"@en ;
    rdfs:comment "Context of international operation (undercover_investigation, direct_referral, joint_operation)."@en ;
    rdfs:domain cacontology-international:USAustraliaCoordination ;
    rdfs:range xsd:string .

cacontology-international:sharesDataWith a owl:ObjectProperty ;
    rdfs:label "shares data with"@en ;
    rdfs:comment "Organizations that share data under the agreement."@en ;
    rdfs:domain cacontology-international:InformationSharingAgreement ;
    rdfs:range uco-identity:Organization .

cacontology-international:treatyBasis a owl:DatatypeProperty ;
    rdfs:label "treaty basis"@en ;
    rdfs:comment "International treaty or agreement basis for legal cooperation."@en ;
    rdfs:domain cacontology-international:MutualLegalAssistance ;
    rdfs:range xsd:string .

cacontology-international:undercoverCoordination a owl:DatatypeProperty ;
    rdfs:label "undercover coordination"@en ;
    rdfs:comment "Whether operation involved international undercover coordination."@en ;
    rdfs:domain cacontology-international:InternationalReferral ;
    rdfs:range xsd:boolean .

<https://cacontology.projectvic.org/international/shapes/2.11.0> a owl:Ontology ;
    rdfs:label "CAC International Cooperation SHACL Shapes with gUFO Validation"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "SHACL validation shapes for gUFO-enhanced ICAC international cooperation ontology, including anti-rigidity constraints, temporal validation, and foundational type compliance."@en ;
    owl:imports <http://purl.org/nemo/gufo>,
        <https://cacontology.projectvic.org/international/2.11.0>,
        uco-core: ;
    owl:versionIRI <https://cacontology.projectvic.org/international/shapes/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-coord:SecureCommunicationChannel a gufo:SituationType,
        owl:Class ;
    rdfs:label "Secure Communication Channel"@en ;
    rdfs:comment "Secure communication channels for sensitive information and classified communications."@en ;
    rdfs:subClassOf cacontology-coord:CommunicationProtocol .

cacontology-coord:agreementScope a owl:DatatypeProperty ;
    rdfs:label "agreement scope"@en ;
    rdfs:comment "Scope of the agreement (specific_case, case_category, ongoing_cooperation, resource_sharing, information_sharing, comprehensive)."@en ;
    rdfs:domain cacontology-coord:CoordinationAgreement ;
    rdfs:range xsd:string .

cacontology-coord:agreementType a owl:DatatypeProperty ;
    rdfs:label "agreement type"@en ;
    rdfs:comment "Type of coordination agreement (mou, moa, formal_agreement, informal_agreement, task_force_charter, joint_operations_plan)."@en ;
    rdfs:domain cacontology-coord:CoordinationAgreement ;
    rdfs:range xsd:string .

cacontology-coord:assignmentDuration a owl:DatatypeProperty ;
    rdfs:label "assignment duration"@en ;
    rdfs:comment "Duration of liaison assignment in days."@en ;
    rdfs:domain cacontology-coord:LiaisonOfficer ;
    rdfs:range xsd:decimal .

cacontology-coord:availabilityLevel a owl:DatatypeProperty ;
    rdfs:label "availability level"@en ;
    rdfs:comment "Availability level of shared resources (immediate, short_notice, scheduled, on_request, limited, emergency_only)."@en ;
    rdfs:domain cacontology-coord:ResourceSharing ;
    rdfs:range xsd:string .

cacontology-coord:benchmarkComparison a owl:DatatypeProperty ;
    rdfs:label "benchmark comparison"@en ;
    rdfs:comment "Comparison to benchmark (above_benchmark, meets_benchmark, below_benchmark, no_benchmark, exceeds_target)."@en ;
    rdfs:domain cacontology-coord:CoordinationMetrics ;
    rdfs:range xsd:string .

cacontology-coord:casesInProgressCount a owl:DatatypeProperty ;
    rdfs:label "cases in progress count"@en ;
    dcterms:source "National Child Protection Task Force (NCPTF) press release, 2026-02-13 (Westchester Missing Child Rescue Operation)."@en ;
    rdfs:comment "Number of missing-child cases still in progress as of a reported timepoint during the operation."@en ;
    rdfs:domain cacontology-coord:MissingChildRescueOperation ;
    rdfs:range xsd:nonNegativeInteger ;
    rdfs:seeAlso <https://ncptf.org/westchester-missing-child-rescue-operation-results-in-successful-location-of-44-children-and-teens/> .

cacontology-coord:childrenLocatedCount a owl:DatatypeProperty ;
    rdfs:label "children located count"@en ;
    dcterms:source "National Child Protection Task Force (NCPTF) press release, 2026-02-13 (Westchester Missing Child Rescue Operation)."@en ;
    rdfs:comment "Number of missing children/teens located through the operation (located does not necessarily imply rescued from ongoing abuse)."@en ;
    rdfs:domain cacontology-coord:MissingChildRescueOperation ;
    rdfs:range xsd:nonNegativeInteger ;
    rdfs:seeAlso <https://ncptf.org/westchester-missing-child-rescue-operation-results-in-successful-location-of-44-children-and-teens/> .

cacontology-coord:classificationLevel a owl:DatatypeProperty ;
    rdfs:label "classification level"@en ;
    rdfs:comment "Security classification level (unclassified, law_enforcement_sensitive, confidential, restricted, classified, top_secret)."@en ;
    rdfs:domain cacontology-coord:InformationSharing ;
    rdfs:range xsd:string .

cacontology-coord:clearanceLevel a owl:DatatypeProperty ;
    rdfs:label "clearance level"@en ;
    rdfs:comment "Security clearance level of the liaison officer (none, public_trust, confidential, secret, top_secret, sci_access)."@en ;
    rdfs:domain cacontology-coord:LiaisonOfficer ;
    rdfs:range xsd:string .

cacontology-coord:communicationAuthority a owl:DatatypeProperty ;
    rdfs:label "communication authority"@en ;
    rdfs:comment "Level of communication authority (full_authority, limited_authority, information_only, coordination_only, advisory_only)."@en ;
    rdfs:domain cacontology-coord:LiaisonOfficer ;
    rdfs:range xsd:string .

cacontology-coord:communicationFrequency a owl:DatatypeProperty ;
    rdfs:label "communication frequency"@en ;
    rdfs:comment "Frequency of communication (real_time, daily, weekly, bi_weekly, monthly, as_needed, emergency_only)."@en ;
    rdfs:domain cacontology-coord:CommunicationProtocol ;
    rdfs:range xsd:string .

cacontology-coord:coordinationLevel a owl:DatatypeProperty ;
    rdfs:label "coordination level"@en ;
    rdfs:comment "Level of coordination (local, regional, state, multi_state, federal, international)."@en ;
    rdfs:domain cacontology-coord:InvestigationCoordination ;
    rdfs:range xsd:string .

cacontology-coord:coordinationStatus a owl:DatatypeProperty ;
    rdfs:label "coordination status"@en ;
    rdfs:comment "Current status of the coordination (active, inactive, pending, completed, suspended, terminated)."@en ;
    rdfs:domain cacontology-coord:InvestigationCoordination ;
    rdfs:range xsd:string .

cacontology-coord:coordinationType a owl:DatatypeProperty ;
    rdfs:label "coordination type"@en ;
    rdfs:comment "Type of coordination (joint_investigation, parallel_investigation, information_sharing, resource_sharing, task_force_coordination, multi_agency_coordination)."@en ;
    rdfs:domain cacontology-coord:InvestigationCoordination ;
    rdfs:range xsd:string .

cacontology-coord:costSharing a owl:DatatypeProperty ;
    rdfs:label "cost sharing"@en ;
    rdfs:comment "Whether cost sharing is involved in resource sharing."@en ;
    rdfs:domain cacontology-coord:ResourceSharing ;
    rdfs:range xsd:boolean .

cacontology-coord:escalationProcedure a owl:DatatypeProperty ;
    rdfs:label "escalation procedure"@en ;
    rdfs:comment "Whether escalation procedure exists in the communication protocol."@en ;
    rdfs:domain cacontology-coord:CommunicationProtocol ;
    rdfs:range xsd:boolean .

cacontology-coord:governsAgreement a owl:ObjectProperty ;
    rdfs:label "governs agreement"@en ;
    rdfs:comment "Links coordination to governing agreements."@en ;
    rdfs:domain cacontology-coord:InvestigationCoordination ;
    rdfs:range cacontology-coord:CoordinationAgreement .

cacontology-coord:hasAccuracy a owl:DatatypeProperty ;
    rdfs:label "has accuracy"@en ;
    rdfs:comment "Accuracy measurement (0.0 to 1.0) - gUFO quality aspect."@en ;
    rdfs:domain cacontology-coord:CoordinationMetrics ;
    rdfs:range xsd:double ;
    rdfs:subPropertyOf gufo:hasQuality .

cacontology-coord:hasActionability a owl:DatatypeProperty ;
    rdfs:label "has actionability"@en ;
    rdfs:comment "Actionability score measurement (0.0 to 1.0) - gUFO quality aspect."@en ;
    rdfs:domain cacontology-coord:IntelligenceSharing ;
    rdfs:range xsd:double ;
    rdfs:subPropertyOf gufo:hasQuality .

cacontology-coord:hasComplexityLevel a owl:DatatypeProperty ;
    rdfs:label "has complexity level"@en ;
    rdfs:comment "Coordination complexity level assessment (simple, moderate, complex, highly_complex, extremely_complex) - gUFO quality aspect."@en ;
    rdfs:domain cacontology-coord:InvestigationCoordination ;
    rdfs:range xsd:string ;
    rdfs:subPropertyOf gufo:hasQuality .

cacontology-coord:hasCoordinationEffectiveness a owl:DatatypeProperty ;
    rdfs:label "has coordination effectiveness"@en ;
    rdfs:comment "Coordination effectiveness level assessment (poor, fair, good, excellent, outstanding) - gUFO quality aspect."@en ;
    rdfs:domain cacontology-coord:InvestigationCoordination ;
    rdfs:range xsd:string ;
    rdfs:subPropertyOf gufo:hasQuality .

cacontology-coord:hasCoordinationIntensity a owl:DatatypeProperty ;
    rdfs:label "has coordination intensity"@en ;
    rdfs:comment "Coordination integration intensity (minimal, moderate, high, intensive, fully_integrated) - gUFO quality aspect."@en ;
    rdfs:domain cacontology-coord:JointInvestigation ;
    rdfs:range xsd:string ;
    rdfs:subPropertyOf gufo:hasQuality .

cacontology-coord:hasDataCompleteness a owl:DatatypeProperty ;
    rdfs:label "has data completeness"@en ;
    rdfs:comment "Data completeness measurement (0.0 to 1.0) - gUFO quality aspect."@en ;
    rdfs:domain [ owl:unionOf ( cacontology-coord:InvestigationCoordination cacontology-coord:InformationSharing cacontology-coord:ResourceSharing cacontology-coord:CoordinationAgreement cacontology-coord:LiaisonOfficer cacontology-coord:CoordinationMetrics ) ] ;
    rdfs:range xsd:double ;
    rdfs:subPropertyOf gufo:hasQuality .

cacontology-coord:hasDataConsistency a owl:DatatypeProperty ;
    rdfs:label "has data consistency"@en ;
    rdfs:comment "Data consistency measurement (0.0 to 1.0) - gUFO quality aspect."@en ;
    rdfs:domain [ owl:unionOf ( cacontology-coord:InvestigationCoordination cacontology-coord:InformationSharing cacontology-coord:ResourceSharing cacontology-coord:CoordinationAgreement cacontology-coord:LiaisonOfficer cacontology-coord:CoordinationMetrics ) ] ;
    rdfs:range xsd:double ;
    rdfs:subPropertyOf gufo:hasQuality .

cacontology-coord:hasDataQuality a owl:DatatypeProperty ;
    rdfs:label "has data quality"@en ;
    rdfs:comment "Data quality assessment (poor, fair, good, excellent, validated) - gUFO quality aspect."@en ;
    rdfs:domain [ owl:unionOf ( cacontology-coord:InvestigationCoordination cacontology-coord:InformationSharing cacontology-coord:ResourceSharing cacontology-coord:CoordinationAgreement cacontology-coord:LiaisonOfficer cacontology-coord:CoordinationMetrics ) ] ;
    rdfs:range xsd:string ;
    rdfs:subPropertyOf gufo:hasQuality .

cacontology-coord:hasIntelligenceValue a owl:DatatypeProperty ;
    rdfs:label "has intelligence value"@en ;
    rdfs:comment "Intelligence value assessment (low, moderate, high, critical, exceptional) - gUFO quality aspect."@en ;
    rdfs:domain cacontology-coord:IntelligenceSharing ;
    rdfs:range xsd:string ;
    rdfs:subPropertyOf gufo:hasQuality .

cacontology-coord:hasLiaisonEffectiveness a owl:DatatypeProperty ;
    rdfs:label "has liaison effectiveness"@en ;
    rdfs:comment "Liaison effectiveness level (poor, adequate, good, excellent, exceptional) - gUFO quality aspect."@en ;
    rdfs:domain cacontology-coord:LiaisonOfficer ;
    rdfs:range xsd:string ;
    rdfs:subPropertyOf gufo:hasQuality .

cacontology-coord:hasReliability a owl:DatatypeProperty ;
    rdfs:label "has reliability"@en ;
    rdfs:comment "Reliability measurement (0.0 to 1.0) - gUFO quality aspect."@en ;
    rdfs:domain cacontology-coord:CoordinationMetrics ;
    rdfs:range xsd:double ;
    rdfs:subPropertyOf gufo:hasQuality .

cacontology-coord:hasResponsiveness a owl:DatatypeProperty ;
    rdfs:label "has responsiveness"@en ;
    rdfs:comment "Response capability level (slow, moderate, good, rapid, immediate) - gUFO quality aspect."@en ;
    rdfs:domain cacontology-coord:LiaisonOfficer ;
    rdfs:range xsd:string ;
    rdfs:subPropertyOf gufo:hasQuality .

cacontology-coord:hasSecurityLevel a owl:DatatypeProperty ;
    rdfs:label "has security level"@en ;
    rdfs:comment "Security assessment level (basic, standard, enhanced, high, maximum) - gUFO quality aspect."@en ;
    rdfs:domain cacontology-coord:InformationSharing ;
    rdfs:range xsd:string ;
    rdfs:subPropertyOf gufo:hasQuality .

cacontology-coord:hasSharingEfficiency a owl:DatatypeProperty ;
    rdfs:label "has sharing efficiency"@en ;
    rdfs:comment "Information sharing efficiency level (poor, fair, good, excellent, optimal) - gUFO quality aspect."@en ;
    rdfs:domain cacontology-coord:InformationSharing ;
    rdfs:range xsd:string ;
    rdfs:subPropertyOf gufo:hasQuality .

cacontology-coord:hasSuccessRate a owl:DatatypeProperty ;
    rdfs:label "has success rate"@en ;
    rdfs:comment "Success rate measurement (0.0 to 1.0) - gUFO quality aspect."@en ;
    rdfs:domain cacontology-coord:InvestigationCoordination ;
    rdfs:range xsd:double ;
    rdfs:subPropertyOf gufo:hasQuality .

cacontology-coord:hasTimeliness a owl:DatatypeProperty ;
    rdfs:label "has timeliness"@en ;
    rdfs:comment "Timeliness score measurement (0.0 to 1.0) - gUFO quality aspect."@en ;
    rdfs:domain cacontology-coord:InformationSharing ;
    rdfs:range xsd:double ;
    rdfs:subPropertyOf gufo:hasQuality .

cacontology-coord:hasTrustLevel a owl:DatatypeProperty ;
    rdfs:label "has trust level"@en ;
    rdfs:comment "Trust relationship measurement (0.0 to 1.0) - gUFO quality aspect."@en ;
    rdfs:domain cacontology-coord:LiaisonOfficer ;
    rdfs:range xsd:double ;
    rdfs:subPropertyOf gufo:hasQuality .

cacontology-coord:hasUnificationLevel a owl:DatatypeProperty ;
    rdfs:label "has unification level"@en ;
    rdfs:comment "Unification degree measurement (0.0 to 1.0) - gUFO quality aspect."@en ;
    rdfs:domain cacontology-coord:JointInvestigation ;
    rdfs:range xsd:double ;
    rdfs:subPropertyOf gufo:hasQuality .

cacontology-coord:hasValidationLevel a owl:DatatypeProperty ;
    rdfs:label "has validation level"@en ;
    rdfs:comment "Validation thoroughness (none, basic, standard, comprehensive, full_verification) - gUFO quality aspect."@en ;
    rdfs:domain [ owl:unionOf ( cacontology-coord:InvestigationCoordination cacontology-coord:InformationSharing cacontology-coord:ResourceSharing cacontology-coord:CoordinationAgreement cacontology-coord:LiaisonOfficer cacontology-coord:CoordinationMetrics ) ] ;
    rdfs:range xsd:string ;
    rdfs:subPropertyOf gufo:hasQuality .

cacontology-coord:informationAccuracy a owl:DatatypeProperty ;
    rdfs:label "information accuracy"@en ;
    rdfs:comment "Accuracy of intelligence information (confirmed, probably_true, possibly_true, doubtfully_true, improbable, cannot_be_judged)."@en ;
    rdfs:domain cacontology-coord:IntelligenceSharing ;
    rdfs:range xsd:string .

cacontology-coord:intelligenceType a owl:DatatypeProperty ;
    rdfs:label "intelligence type"@en ;
    rdfs:comment "Type of intelligence (tactical, strategic, operational, technical, threat_assessment, pattern_analysis)."@en ;
    rdfs:domain cacontology-coord:IntelligenceSharing ;
    rdfs:range xsd:string .

cacontology-coord:investigationScope a owl:DatatypeProperty ;
    rdfs:label "investigation scope"@en ;
    rdfs:comment "Scope of the joint investigation (single_case, related_cases, criminal_network, organized_crime, multi_jurisdictional, international)."@en ;
    rdfs:domain cacontology-coord:JointInvestigation ;
    rdfs:range xsd:string .

cacontology-coord:isComponentOf a owl:ObjectProperty ;
    rdfs:label "is component of"@en ;
    rdfs:comment "Links component agencies to task force or multi-agency coordination structures - gUFO part-whole relation."@en ;
    rdfs:domain uco-identity:Organization ;
    rdfs:range [ owl:unionOf ( cacontology-coord:TaskForceCoordination cacontology-coord:MultiAgencyCoordination ) ] ;
    rdfs:subPropertyOf gufo:isComponentOf .

cacontology-coord:isSubInvestigationOf a owl:ObjectProperty ;
    rdfs:label "is sub investigation of"@en ;
    rdfs:comment "Links sub-investigations to larger joint investigation structures - gUFO part-whole relation."@en ;
    rdfs:domain case-investigation:Investigation ;
    rdfs:range cacontology-coord:JointInvestigation ;
    rdfs:subPropertyOf gufo:isProperPartOf .

cacontology-coord:leadAgency a owl:DatatypeProperty ;
    rdfs:label "lead agency"@en ;
    rdfs:comment "Name or identifier of the lead agency in the coordination."@en ;
    rdfs:domain cacontology-coord:InvestigationCoordination ;
    rdfs:range xsd:string .

cacontology-coord:liaisonRole a owl:DatatypeProperty ;
    rdfs:label "liaison role"@en ;
    rdfs:comment "Role of the liaison officer (primary_liaison, secondary_liaison, technical_liaison, legal_liaison, intelligence_liaison, operational_liaison)."@en ;
    rdfs:domain cacontology-coord:LiaisonOfficer ;
    rdfs:range xsd:string .

cacontology-coord:measurementPeriod a owl:DatatypeProperty ;
    rdfs:label "measurement period"@en ;
    rdfs:comment "Period for metric measurement (daily, weekly, monthly, quarterly, annually, case_based)."@en ;
    rdfs:domain cacontology-coord:CoordinationMetrics ;
    rdfs:range xsd:string .

cacontology-coord:measuresPerformance a owl:ObjectProperty ;
    rdfs:label "measures performance"@en ;
    rdfs:comment "Links coordination to performance metrics."@en ;
    rdfs:domain cacontology-coord:InvestigationCoordination ;
    rdfs:range cacontology-coord:CoordinationMetrics .

cacontology-coord:metricType a owl:DatatypeProperty ;
    rdfs:label "metric type"@en ;
    rdfs:comment "Type of coordination metric (response_time, information_sharing_rate, resource_utilization, case_resolution_time, coordination_effectiveness, cost_efficiency)."@en ;
    rdfs:domain cacontology-coord:CoordinationMetrics ;
    rdfs:range xsd:string .

cacontology-coord:metricValue a owl:DatatypeProperty ;
    rdfs:label "metric value"@en ;
    rdfs:comment "Numerical value of the metric."@en ;
    rdfs:domain cacontology-coord:CoordinationMetrics ;
    rdfs:range xsd:decimal .

cacontology-coord:participatingAgencies a owl:DatatypeProperty ;
    rdfs:label "participating agencies"@en ;
    rdfs:comment "Number of agencies participating in the coordination."@en ;
    rdfs:domain cacontology-coord:InvestigationCoordination ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-coord:personnelCount a owl:DatatypeProperty ;
    rdfs:label "personnel count"@en ;
    rdfs:comment "Number of personnel being shared."@en ;
    rdfs:domain cacontology-coord:PersonnelSharing ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-coord:protocolType a owl:DatatypeProperty ;
    rdfs:label "protocol type"@en ;
    rdfs:comment "Type of communication protocol (formal_channels, informal_channels, emergency_channels, secure_channels, encrypted_channels, liaison_channels)."@en ;
    rdfs:domain cacontology-coord:CommunicationProtocol ;
    rdfs:range xsd:string .

cacontology-coord:providesResource a owl:ObjectProperty ;
    rdfs:label "provides resource"@en ;
    rdfs:comment "Links resource sharing to providing agency."@en ;
    rdfs:domain cacontology-coord:ResourceSharing ;
    rdfs:range uco-identity:Organization .

cacontology-coord:receivesResource a owl:ObjectProperty ;
    rdfs:label "receives resource"@en ;
    rdfs:comment "Links resource sharing to receiving agency."@en ;
    rdfs:domain cacontology-coord:ResourceSharing ;
    rdfs:range uco-identity:Organization .

cacontology-coord:reciprocity a owl:DatatypeProperty ;
    rdfs:label "reciprocity"@en ;
    rdfs:comment "Whether reciprocity is expected in information sharing."@en ;
    rdfs:domain cacontology-coord:InformationSharing ;
    rdfs:range xsd:boolean .

cacontology-coord:reimbursement a owl:DatatypeProperty ;
    rdfs:label "reimbursement"@en ;
    rdfs:comment "Whether reimbursement is required for resource sharing."@en ;
    rdfs:domain cacontology-coord:ResourceSharing ;
    rdfs:range xsd:boolean .

cacontology-coord:renewalClause a owl:DatatypeProperty ;
    rdfs:label "renewal clause"@en ;
    rdfs:comment "Whether the agreement contains a renewal clause."@en ;
    rdfs:domain cacontology-coord:CoordinationAgreement ;
    rdfs:range xsd:boolean .

cacontology-coord:resourcePooling a owl:DatatypeProperty ;
    rdfs:label "resource pooling"@en ;
    rdfs:comment "Whether resource pooling is used in the joint investigation."@en ;
    rdfs:domain cacontology-coord:JointInvestigation ;
    rdfs:range xsd:boolean .

cacontology-coord:resourceType a owl:DatatypeProperty ;
    rdfs:label "resource type"@en ;
    rdfs:comment "Type of resource being shared (personnel, equipment, facilities, technology, expertise, funding, vehicles, specialized_units)."@en ;
    rdfs:domain cacontology-coord:ResourceSharing ;
    rdfs:range xsd:string .

cacontology-coord:responseTimeRequirement a owl:DatatypeProperty ;
    rdfs:label "response time requirement"@en ;
    rdfs:comment "Required response time in hours."@en ;
    rdfs:domain cacontology-coord:CommunicationProtocol ;
    rdfs:range xsd:decimal .

cacontology-coord:securityClearance a owl:DatatypeProperty ;
    rdfs:label "security clearance"@en ;
    rdfs:comment "Security clearance level (none, public_trust, confidential, secret, top_secret, sci_access)."@en ;
    rdfs:domain cacontology-coord:PersonnelSharing ;
    rdfs:range xsd:string .

cacontology-coord:sharedCommand a owl:DatatypeProperty ;
    rdfs:label "shared command"@en ;
    rdfs:comment "Whether shared command structure is used in the joint investigation."@en ;
    rdfs:domain cacontology-coord:JointInvestigation ;
    rdfs:range xsd:boolean .

cacontology-coord:sharesFromAgency a owl:ObjectProperty ;
    rdfs:label "shares from agency"@en ;
    rdfs:comment "Links information sharing to source agencies."@en ;
    rdfs:domain cacontology-coord:InformationSharing ;
    rdfs:range uco-identity:Organization .

cacontology-coord:sharesInformation a owl:ObjectProperty ;
    rdfs:label "shares information"@en ;
    rdfs:comment "Links coordination to information sharing activities."@en ;
    rdfs:domain cacontology-coord:InvestigationCoordination ;
    rdfs:range cacontology-coord:InformationSharing .

cacontology-coord:sharesResources a owl:ObjectProperty ;
    rdfs:label "shares resources"@en ;
    rdfs:comment "Links coordination to resource sharing activities."@en ;
    rdfs:domain cacontology-coord:InvestigationCoordination ;
    rdfs:range cacontology-coord:ResourceSharing .

cacontology-coord:sharesWithAgency a owl:ObjectProperty ;
    rdfs:label "shares with agency"@en ;
    rdfs:comment "Links information sharing to recipient agencies."@en ;
    rdfs:domain cacontology-coord:InformationSharing ;
    rdfs:range uco-identity:Organization .

cacontology-coord:sharingAgreement a owl:DatatypeProperty ;
    rdfs:label "sharing agreement"@en ;
    rdfs:comment "Whether formal sharing agreement exists."@en ;
    rdfs:domain cacontology-coord:InformationSharing ;
    rdfs:range xsd:boolean .

cacontology-coord:sharingDuration a owl:DatatypeProperty ;
    rdfs:label "sharing duration"@en ;
    rdfs:comment "Duration of resource sharing in hours."@en ;
    rdfs:domain cacontology-coord:ResourceSharing ;
    rdfs:range xsd:decimal .

cacontology-coord:sharingMechanism a owl:DatatypeProperty ;
    rdfs:label "sharing mechanism"@en ;
    rdfs:comment "Mechanism used for sharing (secure_email, encrypted_portal, database_access, formal_request, liaison_officer, joint_briefing)."@en ;
    rdfs:domain cacontology-coord:InformationSharing ;
    rdfs:range xsd:string .

cacontology-coord:sharingType a owl:DatatypeProperty ;
    rdfs:label "sharing type"@en ;
    rdfs:comment "Type of information sharing (intelligence_sharing, evidence_sharing, case_information, suspect_information, victim_information, technical_data)."@en ;
    rdfs:domain cacontology-coord:InformationSharing ;
    rdfs:range xsd:string .

cacontology-coord:sourceReliability a owl:DatatypeProperty ;
    rdfs:label "source reliability"@en ;
    rdfs:comment "Reliability of intelligence source (reliable, usually_reliable, fairly_reliable, not_usually_reliable, unreliable, unknown)."@en ;
    rdfs:domain cacontology-coord:IntelligenceSharing ;
    rdfs:range xsd:string .

cacontology-coord:specialization a owl:DatatypeProperty ;
    rdfs:label "specialization"@en ;
    rdfs:comment "Area of specialization (digital_forensics, undercover_operations, surveillance, analysis, technical_support, legal_expertise)."@en ;
    rdfs:domain cacontology-coord:PersonnelSharing ;
    rdfs:range xsd:string .

cacontology-coord:terminationClause a owl:DatatypeProperty ;
    rdfs:label "termination clause"@en ;
    rdfs:comment "Whether the agreement contains a termination clause."@en ;
    rdfs:domain cacontology-coord:CoordinationAgreement ;
    rdfs:range xsd:boolean .

cacontology-coord:unifiedReporting a owl:DatatypeProperty ;
    rdfs:label "unified reporting"@en ;
    rdfs:comment "Whether unified reporting is used in the joint investigation."@en ;
    rdfs:domain cacontology-coord:JointInvestigation ;
    rdfs:range xsd:boolean .

cacontology-coord:usesProtocol a owl:ObjectProperty ;
    rdfs:label "uses protocol"@en ;
    rdfs:comment "Links coordination to communication protocols."@en ;
    rdfs:domain cacontology-coord:InvestigationCoordination ;
    rdfs:range cacontology-coord:CommunicationProtocol .

<https://cacontology.projectvic.org/investigation-coordination/shapes/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Investigation Coordination SHACL Shapes with gUFO Validation"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:modified "2026-02-16"^^xsd:date ;
    rdfs:comment "SHACL validation shapes for gUFO-enhanced ICAC investigation coordination ontology, including anti-rigidity constraints, temporal validation, and foundational type compliance."@en ;
    owl:imports <http://purl.org/nemo/gufo>,
        <https://cacontology.projectvic.org/investigation-coordination/2.11.0>,
        uco-core: ;
    owl:versionIRI <https://cacontology.projectvic.org/investigation-coordination/shapes/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-corruption:BadgeDisplayedProduction a gufo:EventType,
        owl:Class ;
    rdfs:label "Badge Displayed Production"@en ;
    rdfs:comment "CSAM production where law enforcement badge is prominently displayed."@en ;
    rdfs:subClassOf cacontology-corruption:AuthoritySymbolExploitation .

cacontology-corruption:EvidenceManipulation a gufo:EventType,
        owl:Class ;
    rdfs:label "Evidence Manipulation"@en ;
    rdfs:comment "Manipulation or destruction of evidence to protect exploitation activities."@en ;
    rdfs:subClassOf cacontology-corruption:InvestigativeAuthorityAbuse .

cacontology-corruption:ExternalOversightInvestigation a gufo:EventType,
        owl:Class ;
    rdfs:label "External Oversight Investigation"@en ;
    rdfs:comment "Investigation by external agency into law enforcement corruption."@en ;
    rdfs:subClassOf cacontology-corruption:InsiderThreatDetection .

cacontology-corruption:InformationLeakage a gufo:EventType,
        owl:Class ;
    rdfs:label "Information Leakage"@en ;
    rdfs:comment "Leaking of law enforcement information to facilitate exploitation or trafficking."@en ;
    rdfs:subClassOf cacontology-corruption:InvestigativeAuthorityAbuse .

cacontology-corruption:OfficerProducedCSAM a gufo:EventType,
        owl:Class ;
    rdfs:label "Officer Produced CSAM"@en ;
    rdfs:comment "Child sexual abuse material produced by law enforcement officers, often while in uniform."@en ;
    rdfs:subClassOf cacontology-corruption:UniformBasedExploitation .

cacontology-corruption:WhistleblowerReport a gufo:EventType,
        owl:Class ;
    rdfs:label "Whistleblower Report"@en ;
    rdfs:comment "Report by insider regarding corruption within law enforcement organization."@en ;
    rdfs:subClassOf cacontology-corruption:InsiderThreatDetection .

cacontology-corruption:authorityLevel a owl:DatatypeProperty ;
    rdfs:label "authority level"@en ;
    rdfs:comment "Level of authority held by corrupt officer (patrol, detective, supervisor, command)."@en ;
    rdfs:domain cacontology-corruption:CorruptLawEnforcementOfficer ;
    rdfs:range xsd:string .

cacontology-corruption:concernsCorruptOfficer a owl:ObjectProperty ;
    rdfs:label "concerns corrupt officer"@en ;
    rdfs:comment "Links corruption situations to the officers involved - gUFO qualified relation."@en ;
    rdfs:domain gufo:ParticipationSituation ;
    rdfs:range cacontology-corruption:CorruptLawEnforcementOfficer .

cacontology-corruption:departmentAffiliation a owl:DatatypeProperty ;
    rdfs:label "department affiliation"@en ;
    rdfs:comment "Law enforcement department or military unit affiliation."@en ;
    rdfs:domain cacontology-corruption:CorruptLawEnforcementOfficer ;
    rdfs:range xsd:string .

cacontology-corruption:employmentStatus a owl:DatatypeProperty ;
    rdfs:label "employment status"@en ;
    rdfs:comment "Employment status during corruption (active, reserve, retired, terminated)."@en ;
    rdfs:domain cacontology-corruption:CorruptLawEnforcementOfficer ;
    rdfs:range xsd:string .

cacontology-corruption:hasAuthorityAbuseDegree a owl:DatatypeProperty ;
    rdfs:label "has authority abuse degree"@en ;
    rdfs:comment "Degree of authority abuse (minimal, moderate, extensive, systematic, comprehensive) - gUFO quality aspect."@en ;
    rdfs:domain cacontology-corruption:PositionOfAuthorityAbuse ;
    rdfs:range xsd:string ;
    rdfs:subPropertyOf gufo:hasQuality .

cacontology-corruption:hasAuthorityEnhancementLevel a owl:DatatypeProperty ;
    rdfs:label "has authority enhancement level"@en ;
    rdfs:comment "Level of authority enhancement through uniform/symbols (minimal, moderate, significant, substantial, maximum) - gUFO quality aspect."@en ;
    rdfs:domain cacontology-corruption:UniformBasedExploitation ;
    rdfs:range xsd:string ;
    rdfs:subPropertyOf gufo:hasQuality .

cacontology-corruption:hasCorruptionDependency a owl:DatatypeProperty ;
    rdfs:label "has corruption dependency"@en ;
    rdfs:comment "Officer dependency on corrupt activities (low, moderate, high, complete, systemic) - gUFO quality aspect."@en ;
    rdfs:domain cacontology-corruption:CorruptLawEnforcementOfficer ;
    rdfs:range xsd:string ;
    rdfs:subPropertyOf gufo:hasQuality .

cacontology-corruption:hasCorruptionImpact a owl:DatatypeProperty ;
    rdfs:label "has corruption impact"@en ;
    rdfs:comment "Impact level of corruption on victims and system (low, moderate, high, severe, devastating) - gUFO quality aspect."@en ;
    rdfs:domain cacontology-corruption:LawEnforcementCorruption ;
    rdfs:range xsd:string ;
    rdfs:subPropertyOf gufo:hasQuality .

cacontology-corruption:hasCorruptionSeverity a owl:DatatypeProperty ;
    rdfs:label "has corruption severity"@en ;
    rdfs:comment "Corruption severity level assessment (minor, moderate, serious, severe, extreme) - gUFO quality aspect."@en ;
    rdfs:domain cacontology-corruption:LawEnforcementCorruption ;
    rdfs:range xsd:string ;
    rdfs:subPropertyOf gufo:hasQuality .

cacontology-corruption:hasDetectionDifficulty a owl:DatatypeProperty ;
    rdfs:label "has detection difficulty"@en ;
    rdfs:comment "Difficulty level of detecting corruption (easy, moderate, difficult, very_difficult, nearly_impossible) - gUFO quality aspect."@en ;
    rdfs:domain cacontology-corruption:InsiderThreat ;
    rdfs:range xsd:string ;
    rdfs:subPropertyOf gufo:hasQuality .

cacontology-corruption:hasEvidenceIntegrity a owl:DatatypeProperty ;
    rdfs:label "has evidence integrity"@en ;
    rdfs:comment "Integrity level of evidence (0.0 to 1.0) - gUFO quality aspect."@en ;
    rdfs:domain cacontology-corruption:InsiderThreatDetection ;
    rdfs:range xsd:double ;
    rdfs:subPropertyOf gufo:hasQuality .

cacontology-corruption:hasIntimidationFactor a owl:DatatypeProperty ;
    rdfs:label "has intimidation factor"@en ;
    rdfs:comment "Intimidation factor through position abuse (0.0 to 1.0) - gUFO quality aspect."@en ;
    rdfs:domain cacontology-corruption:PositionOfAuthorityAbuse ;
    rdfs:range xsd:double ;
    rdfs:subPropertyOf gufo:hasQuality .

cacontology-corruption:hasInvestigationComplexity a owl:DatatypeProperty ;
    rdfs:label "has investigation complexity"@en ;
    rdfs:comment "Complexity level of corruption investigation (simple, moderate, complex, highly_complex, extremely_complex) - gUFO quality aspect."@en ;
    rdfs:domain cacontology-corruption:InsiderThreatDetection ;
    rdfs:range xsd:string ;
    rdfs:subPropertyOf gufo:hasQuality .

cacontology-corruption:hasPositionExploitationLevel a owl:DatatypeProperty ;
    rdfs:label "has position exploitation level"@en ;
    rdfs:comment "Level of position exploitation (0.0 to 1.0) - gUFO quality aspect."@en ;
    rdfs:domain cacontology-corruption:CorruptLawEnforcementOfficer ;
    rdfs:range xsd:double ;
    rdfs:subPropertyOf gufo:hasQuality .

cacontology-corruption:hasSymbolVisibility a owl:DatatypeProperty ;
    rdfs:label "has symbol visibility"@en ;
    rdfs:comment "Visibility level of authority symbols (hidden, subtle, visible, prominent, conspicuous) - gUFO quality aspect."@en ;
    rdfs:domain cacontology-corruption:AuthoritySymbolExploitation ;
    rdfs:range xsd:string ;
    rdfs:subPropertyOf gufo:hasQuality .

cacontology-corruption:hasTrustBetrayalLevel a owl:DatatypeProperty ;
    rdfs:label "has trust betrayal level"@en ;
    rdfs:comment "Level of public trust betrayal (minimal, moderate, significant, severe, complete) - gUFO quality aspect."@en ;
    rdfs:domain cacontology-corruption:CorruptLawEnforcementOfficer ;
    rdfs:range xsd:string ;
    rdfs:subPropertyOf gufo:hasQuality .

cacontology-corruption:hasVictimVulnerability a owl:DatatypeProperty ;
    rdfs:label "has victim vulnerability"@en ;
    rdfs:comment "Victim vulnerability exploitation level (0.0 to 1.0) - gUFO quality aspect."@en ;
    rdfs:domain cacontology-corruption:LawEnforcementCorruption ;
    rdfs:range xsd:double ;
    rdfs:subPropertyOf gufo:hasQuality .

cacontology-corruption:investigatedBy a owl:ObjectProperty ;
    rdfs:label "investigated by"@en ;
    rdfs:comment "Links corruption to investigating agency or unit."@en ;
    rdfs:domain cacontology-corruption:LawEnforcementCorruption ;
    rdfs:range uco-identity:Organization .

cacontology-corruption:isDetectedBy a owl:ObjectProperty ;
    rdfs:label "is detected by"@en ;
    rdfs:comment "Links corruption to detection activities - gUFO participation relation."@en ;
    rdfs:domain cacontology-corruption:LawEnforcementCorruption ;
    rdfs:range cacontology-corruption:InsiderThreatDetection ;
    rdfs:subPropertyOf gufo:participatedIn .

cacontology-corruption:uniformDisplayed a owl:DatatypeProperty ;
    rdfs:label "uniform displayed"@en ;
    rdfs:comment "Whether uniform was prominently displayed during exploitation."@en ;
    rdfs:domain cacontology-corruption:UniformBasedExploitation ;
    rdfs:range xsd:boolean .

cacontology-corruption:uniformType a owl:DatatypeProperty ;
    rdfs:label "uniform type"@en ;
    rdfs:comment "Type of uniform worn during exploitation (police, military, state_trooper, sheriff)."@en ;
    rdfs:domain cacontology-corruption:UniformBasedExploitation ;
    rdfs:range xsd:string .

cacontology-corruption:victimCount a owl:DatatypeProperty ;
    rdfs:label "victim count"@en ;
    rdfs:comment "Number of victims in corruption case."@en ;
    rdfs:domain cacontology-corruption:LawEnforcementCorruption ;
    rdfs:range xsd:nonNegativeInteger .

<https://cacontology.projectvic.org/law-enforcement-corruption/shapes/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Law Enforcement Corruption SHACL Shapes"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "SHACL shapes for validating law enforcement corruption ontology instances with comprehensive gUFO integration for enhanced semantic validation."@en ;
    owl:imports gufo:,
        sh:,
        <https://cacontology.projectvic.org/law-enforcement-corruption/2.11.0> ;
    owl:versionIRI <https://cacontology.projectvic.org/law-enforcement-corruption/shapes/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-legal:AgeVerificationLaw a gufo:Kind,
        owl:Class ;
    rdfs:label "Age Verification Law"@en ;
    rdfs:comment "Laws requiring age verification for online services."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject ;
    cacontology-legal:isCountrySpecific false .

cacontology-legal:AuditProcess a gufo:EventType,
        owl:Class ;
    rdfs:label "Audit Process"@en ;
    rdfs:comment "Audit for compliance verification."@en ;
    rdfs:subClassOf cacontology-legal:ComplianceProcess ;
    cacontology-legal:isCountrySpecific false .

cacontology-legal:BestPractice a gufo:Kind,
        owl:Class ;
    rdfs:label "Legal Best Practice"@en ;
    rdfs:comment "Best practice in child protection legislation."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-legal:BillDrafting a gufo:EventType,
        owl:Class ;
    rdfs:label "Bill Drafting"@en ;
    rdfs:comment "Process of drafting legislation."@en ;
    rdfs:subClassOf cacontology-legal:LegislativeProcess ;
    cacontology-legal:isCountrySpecific false .

cacontology-legal:CapacityBuilding a gufo:EventType,
        owl:Class ;
    rdfs:label "Legal Capacity Building"@en ;
    rdfs:comment "Building legal capacity for child protection."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-legal:ChildExploitationLaw a gufo:Kind,
        owl:Class ;
    rdfs:label "Child Exploitation Law"@en ;
    rdfs:comment "Laws addressing child exploitation."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject ;
    cacontology-legal:isCountrySpecific false .

cacontology-legal:CoalitionBuilding a gufo:EventType,
        owl:Class ;
    rdfs:label "Coalition Building"@en ;
    rdfs:comment "Building coalitions to support advocacy goals."@en ;
    rdfs:subClassOf cacontology-legal:AdvocacyProcess ;
    cacontology-legal:isCountrySpecific false .

cacontology-legal:CommitteeReview a gufo:EventType,
        owl:Class ;
    rdfs:label "Committee Review"@en ;
    rdfs:comment "Review of legislation by a committee."@en ;
    rdfs:subClassOf cacontology-legal:LegislativeProcess ;
    cacontology-legal:isCountrySpecific false .

cacontology-legal:DataProtectionForMinorsLaw a gufo:Kind,
        owl:Class ;
    rdfs:label "Data Protection for Minors Law"@en ;
    rdfs:comment "Laws protecting children's personal data."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject ;
    cacontology-legal:isCountrySpecific false .

cacontology-legal:FloorVote a gufo:EventType,
        owl:Class ;
    rdfs:label "Floor Vote"@en ;
    rdfs:comment "Vote on legislation by the full legislative body."@en ;
    rdfs:subClassOf cacontology-legal:LegislativeProcess ;
    cacontology-legal:isCountrySpecific false .

cacontology-legal:HarmonizationProgress a gufo:Kind,
        owl:Class ;
    rdfs:label "Harmonization Progress"@en ;
    rdfs:comment "Progress measurement for policy harmonization."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-legal:InternationalStandard a gufo:Kind,
        owl:Class ;
    rdfs:label "International Standard"@en ;
    rdfs:comment "International standard for child protection legislation."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-legal:LegalEffectiveness a gufo:Kind,
        owl:Class ;
    rdfs:label "Legal Effectiveness"@en ;
    rdfs:comment "Assessment of legal framework effectiveness."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-legal:LegalSystemCompatibility a gufo:SituationType,
        owl:Class ;
    rdfs:label "Legal System Compatibility"@en ;
    rdfs:comment "Compatibility situation between different legal systems."@en ;
    rdfs:subClassOf gufo:Situation,
        uco-core:UcoObject .

cacontology-legal:OnlineSafetyLaw a gufo:Kind,
        owl:Class ;
    rdfs:label "Online Safety Law"@en ;
    rdfs:comment "General laws addressing online child safety."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject ;
    cacontology-legal:isCountrySpecific false .

cacontology-legal:PlatformAccountabilityLaw a gufo:Kind,
        owl:Class ;
    rdfs:label "Platform Accountability Law"@en ;
    rdfs:comment "Laws holding online platforms accountable for child safety."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject ;
    cacontology-legal:isCountrySpecific false .

cacontology-legal:SextortionLaw a gufo:Kind,
        owl:Class ;
    rdfs:label "Sextortion Law"@en ;
    rdfs:comment "Laws addressing sextortion of children."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject ;
    cacontology-legal:isCountrySpecific false .

cacontology-legal:TestimonySubmission a gufo:EventType,
        owl:Class ;
    rdfs:label "Testimony Submission"@en ;
    rdfs:comment "Submitting testimony to legislative bodies."@en ;
    rdfs:subClassOf cacontology-legal:AdvocacyProcess ;
    cacontology-legal:isCountrySpecific false .

cacontology-legal:concernsLegalFramework a owl:ObjectProperty ;
    rdfs:label "concerns legal framework"@en ;
    rdfs:comment "Links compliance situations to the legal frameworks involved - gUFO qualified relation."@en ;
    rdfs:domain gufo:ParticipationSituation ;
    rdfs:range cacontology-legal:NationalLegislation .

cacontology-legal:correspondsAbout a owl:ObjectProperty ;
    rdfs:label "corresponds about"@en ;
    rdfs:comment "Links correspondence to legislation it concerns."@en ;
    rdfs:domain cacontology-legal:Correspondence ;
    rdfs:range cacontology-legal:LegislativeInstrument .

cacontology-legal:countriesAnalyzed a owl:DatatypeProperty ;
    rdfs:label "countries analyzed"@en ;
    rdfs:comment "Number of countries included in legal analysis."@en ;
    rdfs:domain cacontology-legal:GlobalLegalReview ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-legal:facilitatesCooperation a owl:ObjectProperty ;
    rdfs:label "facilitates cooperation"@en ;
    rdfs:comment "International cooperation facilitated by treaty."@en ;
    rdfs:domain cacontology-legal:TreatyFramework ;
    rdfs:range cacontology-legal:InternationalLawEnforcement .

cacontology-legal:goodFaithCriteria a owl:DatatypeProperty ;
    rdfs:label "good faith criteria"@en ;
    dcterms:source "Community & Intelligence Beyond Detection (Global Emancipation Network), 2026-02-10."@en ;
    rdfs:comment "Textual criteria describing what constitutes a good-faith effort under a safe harbor provision."@en ;
    rdfs:domain cacontology-legal:SafeHarbor ;
    rdfs:range xsd:string ;
    rdfs:seeAlso <https://www.linkedin.com/pulse/community-intelligence-beyond-detection-global-emancipation-network-xvemc/> .

cacontology-legal:hasAssessmentReliability a owl:DatatypeProperty ;
    rdfs:label "has assessment reliability"@en ;
    rdfs:comment "Reliability of legislative assessment (0.0 to 1.0) - gUFO quality aspect."@en ;
    rdfs:domain cacontology-legal:LegislativeAssessment ;
    rdfs:range xsd:double ;
    rdfs:subPropertyOf gufo:hasQuality .

cacontology-legal:hasComplianceLevel a owl:DatatypeProperty ;
    rdfs:label "has compliance level"@en ;
    rdfs:comment "Compliance level assessment (0.0 to 1.0) - gUFO quality aspect."@en ;
    rdfs:domain cacontology-legal:LegalCompliance ;
    rdfs:range xsd:double ;
    rdfs:subPropertyOf gufo:hasQuality .

cacontology-legal:hasComplianceScore a owl:DatatypeProperty ;
    rdfs:label "compliance score"@en ;
    rdfs:comment "Numerical compliance score."@en ;
    rdfs:domain cacontology-multi:Jurisdiction ;
    rdfs:range xsd:decimal .

cacontology-legal:hasCooperationIntensity a owl:DatatypeProperty ;
    rdfs:label "has cooperation intensity"@en ;
    rdfs:comment "Intensity of international cooperation (minimal, moderate, substantial, intensive, comprehensive) - gUFO quality aspect."@en ;
    rdfs:domain cacontology-legal:InternationalLawEnforcement ;
    rdfs:range xsd:string ;
    rdfs:subPropertyOf gufo:hasQuality .

cacontology-legal:hasGapSeverity a owl:DatatypeProperty ;
    rdfs:label "has gap severity"@en ;
    rdfs:comment "Severity level of legal framework gaps (minor, moderate, major, critical, systemic) - gUFO quality aspect."@en ;
    rdfs:domain cacontology-legal:LegalFrameworkGap ;
    rdfs:range xsd:string ;
    rdfs:subPropertyOf gufo:hasQuality .

cacontology-legal:hasHarmonizationDegree a owl:DatatypeProperty ;
    rdfs:label "has harmonization degree"@en ;
    rdfs:comment "Harmonization degree across jurisdictions (minimal, partial, substantial, comprehensive, complete) - gUFO quality aspect."@en ;
    rdfs:domain cacontology-legal:PolicyHarmonization ;
    rdfs:range xsd:string ;
    rdfs:subPropertyOf gufo:hasQuality .

cacontology-legal:hasHarmonizationLevel a owl:DatatypeProperty ;
    rdfs:label "harmonization level"@en ;
    rdfs:comment "Level of harmonization (full, partial, none)."@en ;
    rdfs:domain cacontology-multi:Jurisdiction ;
    rdfs:range xsd:string .

cacontology-legal:hasImplementationQuality a owl:DatatypeProperty ;
    rdfs:label "has implementation quality"@en ;
    rdfs:comment "Quality of legislation implementation (poor, fair, good, excellent, exemplary) - gUFO quality aspect."@en ;
    rdfs:domain cacontology-legal:NationalLegislation ;
    rdfs:range xsd:string ;
    rdfs:subPropertyOf gufo:hasQuality .

cacontology-legal:hasLegalRobustness a owl:DatatypeProperty ;
    rdfs:label "has legal robustness"@en ;
    rdfs:comment "Robustness of legal framework (weak, moderate, strong, very_strong, comprehensive) - gUFO quality aspect."@en ;
    rdfs:domain [ owl:unionOf ( cacontology-legal:NationalLegislation cacontology-legal:RegionalFramework ) ] ;
    rdfs:range xsd:string ;
    rdfs:subPropertyOf gufo:hasQuality .

cacontology-legal:hasReformUrgency a owl:DatatypeProperty ;
    rdfs:label "has reform urgency"@en ;
    rdfs:comment "Urgency level for legal reform (low, moderate, high, urgent, critical) - gUFO quality aspect."@en ;
    rdfs:domain cacontology-legal:LegalReform ;
    rdfs:range xsd:string ;
    rdfs:subPropertyOf gufo:hasQuality .

cacontology-legal:hasTreatyStrength a owl:DatatypeProperty ;
    rdfs:label "has treaty strength"@en ;
    rdfs:comment "Strength of treaty framework (weak, moderate, strong, binding, comprehensive) - gUFO quality aspect."@en ;
    rdfs:domain cacontology-legal:TreatyFramework ;
    rdfs:range xsd:string ;
    rdfs:subPropertyOf gufo:hasQuality .

cacontology-legal:implementationStatus a owl:DatatypeProperty ;
    rdfs:label "implementation status"@en ;
    rdfs:comment "Status of legislation implementation (drafted, enacted, enforced)."@en ;
    rdfs:domain cacontology-legal:NationalLegislation ;
    rdfs:range xsd:string .

cacontology-legal:involvesProcess a owl:ObjectProperty ;
    rdfs:label "involves process"@en ;
    rdfs:comment "Links legislation to the process it is going through."@en ;
    rdfs:domain cacontology-legal:LegislativeInstrument ;
    rdfs:range cacontology-legal:LegislativeProcess .

cacontology-legal:jurisdictionType a owl:DatatypeProperty ;
    rdfs:label "jurisdiction type"@en ;
    rdfs:comment "Type of jurisdiction (federal, state, territory, local, national, regional)."@en ;
    rdfs:domain cacontology-multi:Jurisdiction ;
    rdfs:range xsd:string .

cacontology-legal:legalAlignmentLevel a owl:DatatypeProperty ;
    rdfs:label "legal alignment level"@en ;
    rdfs:comment "Level of alignment with international standards (none, partial, substantial, full)."@en ;
    rdfs:domain cacontology-legal:LegalCompliance ;
    rdfs:range xsd:string .

cacontology-legal:legislativeCompliance a owl:DatatypeProperty ;
    rdfs:label "legislative compliance"@en ;
    rdfs:comment "Compliance score with model legislation (0.0-1.0)."@en ;
    rdfs:domain cacontology-legal:LegislativeAssessment ;
    rdfs:range xsd:decimal .

cacontology-legal:measuredBy a owl:ObjectProperty ;
    rdfs:label "measured by"@en ;
    rdfs:comment "Metrics used to measure compliance."@en ;
    rdfs:domain cacontology-legal:LegalCompliance ;
    rdfs:range cacontology-legal:ComplianceMetrics .

cacontology-legal:policyGapSeverity a owl:DatatypeProperty ;
    rdfs:label "policy gap severity"@en ;
    rdfs:comment "Severity of identified policy gap (minor, moderate, major, critical)."@en ;
    rdfs:domain cacontology-legal:LegalFrameworkGap ;
    rdfs:range xsd:string .

cacontology-legal:processDate a owl:DatatypeProperty ;
    rdfs:label "process date"@en ;
    rdfs:comment "Date the process step occurred."@en ;
    rdfs:domain cacontology-legal:LegislativeProcess ;
    rdfs:range xsd:date .

cacontology-legal:processStatus a owl:DatatypeProperty ;
    rdfs:label "process status"@en ;
    rdfs:comment "Status of legislative process (pending, in_progress, completed, failed)."@en ;
    rdfs:domain cacontology-legal:LegislativeProcess ;
    rdfs:range xsd:string .

cacontology-legal:reformPriority a owl:DatatypeProperty ;
    rdfs:label "reform priority"@en ;
    rdfs:comment "Priority level for legal reform (low, medium, high, urgent)."@en ;
    rdfs:domain cacontology-legal:LegalReform ;
    rdfs:range xsd:string .

cacontology-legal:requiresReform a owl:ObjectProperty ;
    rdfs:label "requires reform"@en ;
    rdfs:comment "Legal reform required to address gap."@en ;
    rdfs:domain cacontology-legal:LegalFrameworkGap ;
    rdfs:range cacontology-legal:LegalReform .

cacontology-legal:supportedByFramework a owl:ObjectProperty ;
    rdfs:label "supported by framework"@en ;
    dcterms:source "Community & Intelligence Beyond Detection (Global Emancipation Network), 2026-02-10."@en ;
    rdfs:comment "Links a safe harbor provision to a compliance intelligence framework it relies on or is defined around."@en ;
    rdfs:domain cacontology-legal:SafeHarbor ;
    rdfs:range cacontology-legal:ComplianceIntelligenceFramework ;
    rdfs:seeAlso <https://www.linkedin.com/pulse/community-intelligence-beyond-detection-global-emancipation-network-xvemc/> .

cacontology-legal:verificationStatus a owl:DatatypeProperty ;
    rdfs:label "verification status"@en ;
    dcterms:source "Community & Intelligence Beyond Detection (Global Emancipation Network), 2026-02-10."@en ;
    rdfs:comment "Verification status of a compliance documentation artifact (e.g., verified, unverified, contested)."@en ;
    rdfs:domain cacontology-legal:ComplianceDocumentationArtifact ;
    rdfs:range xsd:string ;
    rdfs:seeAlso <https://www.linkedin.com/pulse/community-intelligence-beyond-detection-global-emancipation-network-xvemc/> .

<https://cacontology.projectvic.org/legal-harmonization/shapes/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Legal Harmonization SHACL Shapes"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:modified "2026-02-11"^^xsd:date ;
    rdfs:comment "SHACL shapes for validating ICAC legal harmonization ontology instances with comprehensive gUFO integration for enhanced semantic validation, covering international legal frameworks, policy harmonization, and CSAM legislation analysis across 196 countries."@en ;
    owl:imports gufo:,
        sh:,
        <https://cacontology.projectvic.org/legal-harmonization/2.11.0>,
        <https://cacontology.projectvic.org/multi-jurisdiction/2.11.0> ;
    owl:versionIRI <https://cacontology.projectvic.org/legal-harmonization/shapes/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-multi:CoordinatingAgent a gufo:Role,
        owl:Class ;
    rdfs:label "Coordinating Agent"@en ;
    rdfs:comment "Personnel responsible for coordinating multi-jurisdictional activities."@en ;
    rdfs:subClassOf uco-role:Role .

cacontology-multi:CrossStateEvidence a owl:Class ;
    rdfs:label "Cross-State Evidence"@en ;
    rdfs:comment "Evidence collected across multiple states in trafficking investigation."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-multi:HandsOnOffenseInvestigation a owl:Class ;
    rdfs:label "Hands-On Offense Investigation"@en ;
    rdfs:comment "Investigation specifically targeting hands-on sexual offenses against children."@en ;
    rdfs:subClassOf cacontology-multi:MultiJurisdictionalInvestigation .

cacontology-multi:InteragencyAgreement a owl:Class ;
    rdfs:label "Interagency Agreement"@en ;
    rdfs:comment "Formal agreement between agencies for cooperation and resource sharing."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:ObservableObject .

cacontology-multi:InternationalProsecutionFramework a owl:Class ;
    rdfs:label "International Prosecution Framework"@en ;
    rdfs:comment "Framework for coordinating prosecutions across multiple countries for global platform takedowns."@en ;
    rdfs:subClassOf cacontology-multi:CrossBorderOperation .

cacontology-multi:InterstateFlightFromProsecution a owl:Class ;
    rdfs:label "Interstate Flight from Prosecution"@en ;
    rdfs:comment "Crossing state lines to avoid prosecution or arrest."@en ;
    rdfs:subClassOf cacontology-multi:StateLineCrossing .

cacontology-multi:InterstateVictimTransport a owl:Class ;
    rdfs:label "Interstate Victim Transport"@en ;
    rdfs:comment "Transportation of minor victim across state lines."@en ;
    rdfs:subClassOf cacontology-multi:StateLineCrossing .

cacontology-multi:JurisdictionalWarrant a owl:Class ;
    rdfs:label "Jurisdictional Warrant"@en ;
    rdfs:comment "Legal authorization that specifies jurisdictional authority."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:ObservableObject .

cacontology-multi:LeadAgency a gufo:Role,
        owl:Class ;
    rdfs:label "Lead Agency"@en ;
    rdfs:comment "Primary agency responsible for coordinating multi-jurisdictional investigation."@en ;
    rdfs:subClassOf uco-role:Role .

cacontology-multi:OperationMetricsTracking a owl:Class ;
    rdfs:label "Operation Metrics Tracking"@en ;
    rdfs:comment "Comprehensive tracking of operation outcomes and effectiveness."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-multi:SexOffenderComplianceCheck a owl:Class ;
    rdfs:label "Sex Offender Compliance Check"@en ;
    rdfs:comment "Individual compliance check visit to registered sex offender."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-multi:TransportationForIllegalPurpose a owl:Class ;
    rdfs:label "Transportation for Illegal Purpose"@en ;
    rdfs:comment "Transportation with intent to engage in criminal sexual activity."@en ;
    rdfs:subClassOf cacontology-multi:InterstateTransportationOffense .

cacontology-multi:USAttorneyOfficeParticipation a owl:Class ;
    rdfs:label "US Attorney Office Participation"@en ;
    rdfs:comment "Participation of US Attorney's Offices around the country in coordinated operation."@en ;
    rdfs:subClassOf cacontology-multi:MassProsecutionCoordination .

cacontology-multi:UserTriageProsecution a owl:Class ;
    rdfs:label "User Triage Prosecution"@en ;
    rdfs:comment "Prosecution strategy based on automated triage of user risk levels and evidence strength for massive user databases."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-multi:communicationProtocol a owl:DatatypeProperty ;
    rdfs:label "communication protocol"@en ;
    rdfs:comment "Established protocol for inter-agency communication."@en ;
    rdfs:domain cacontology-multi:MultiJurisdictionalInvestigation ;
    rdfs:range xsd:string .

cacontology-multi:hasCoordinationPhaseBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has coordination phase begin point"@en ;
    rdfs:comment "Temporal begin point for coordination phase."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-multi:hasCoordinationPhaseEndPoint a owl:DatatypeProperty ;
    rdfs:label "has coordination phase end point"@en ;
    rdfs:comment "Temporal end point for coordination phase."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-multi:hasRoleBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has role begin point"@en ;
    rdfs:comment "Temporal begin point for coordination role."@en ;
    rdfs:domain gufo:Role ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-multi:hasRoleEndPoint a owl:DatatypeProperty ;
    rdfs:label "has role end point"@en ;
    rdfs:comment "Temporal end point for coordination role."@en ;
    rdfs:domain gufo:Role ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-multi:jurisdictionCount a owl:DatatypeProperty ;
    rdfs:label "jurisdiction count"@en ;
    rdfs:comment "Number of jurisdictions involved in the investigation."@en ;
    rdfs:domain cacontology-multi:MultiJurisdictionalInvestigation ;
    rdfs:range xsd:integer .

cacontology-multi:operationDuration a owl:DatatypeProperty ;
    rdfs:label "operation duration"@en ;
    rdfs:comment "Duration of operation in days."@en ;
    rdfs:domain cacontology-multi:NamedMultiJurisdictionalOperation ;
    rdfs:range xsd:decimal .

cacontology-multi:resourceType a owl:DatatypeProperty ;
    rdfs:label "resource type"@en ;
    rdfs:comment "Type of resource being shared (personnel, equipment, expertise, funding)."@en ;
    rdfs:domain cacontology-multi:ResourceSharing ;
    rdfs:range xsd:string .

cacontology-multi:resourceValue a owl:DatatypeProperty ;
    rdfs:label "resource value"@en ;
    rdfs:comment "Monetary value of shared resources in USD."@en ;
    rdfs:domain cacontology-multi:ResourceSharing ;
    rdfs:range xsd:decimal .

cacontology-multi:sharingDuration a owl:DatatypeProperty ;
    rdfs:label "sharing duration"@en ;
    rdfs:comment "Duration of resource sharing arrangement (in days)."@en ;
    rdfs:domain cacontology-multi:ResourceSharing ;
    rdfs:range xsd:integer .

cacontology-multi:treatyBasis a owl:DatatypeProperty ;
    rdfs:label "treaty basis"@en ;
    rdfs:comment "International treaty or agreement enabling cooperation."@en ;
    rdfs:domain cacontology-multi:CrossBorderOperation ;
    rdfs:range xsd:string .

<https://cacontology.projectvic.org/multi-jurisdiction/shapes/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Multi-Jurisdiction SHACL Shapes with gUFO Integration"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "SHACL shapes for validating multi-jurisdictional operations with comprehensive gUFO foundational ontology integration for enhanced semantic precision and validation capabilities."@en ;
    owl:imports gufo:,
        <https://cacontology.projectvic.org/multi-jurisdiction/2.11.0> ;
    owl:versionIRI <https://cacontology.projectvic.org/multi-jurisdiction/shapes/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-partnerships:CivilSocietyPartner a gufo:Role,
        owl:Class ;
    rdfs:label "Civil Society Partner"@en ;
    rdfs:comment "Civil society organization participating in partnership with community engagement capabilities. Modeled as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf cacontology-partnerships:PartnerRole .

cacontology-partnerships:ContentDetectionCooperation a owl:Class ;
    rdfs:label "Content Detection Cooperation"@en ;
    rdfs:comment "Cooperation in developing and improving automated content detection systems. Modeled as gUFO Event."@en ;
    rdfs:subClassOf cacontology-partnerships:TechnologyCooperation .

cacontology-partnerships:DataSharingAgreement a owl:Class ;
    rdfs:label "Data Sharing Agreement"@en ;
    rdfs:comment "Legal agreement governing data sharing between partners, including scope, limitations, and privacy protections. Modeled as gUFO Object."@en ;
    rdfs:subClassOf cacontology-partnerships:InformationSharingFramework .

cacontology-partnerships:GeolocationRequest a owl:Class ;
    rdfs:label "Geolocation Request"@en ;
    rdfs:comment "Request for public assistance in identifying geographic locations from visual evidence. Modeled as gUFO Event."@en ;
    rdfs:subClassOf cacontology-partnerships:CrowdsourcingInvestigation .

cacontology-partnerships:HashSharingProtocol a owl:Class ;
    rdfs:label "Hash Sharing Protocol"@en ;
    rdfs:comment "Protocol for sharing cryptographic hashes of illegal content between partners for detection and prevention. Modeled as gUFO Object."@en ;
    rdfs:subClassOf cacontology-partnerships:TechnicalIntegration .

cacontology-partnerships:IntelligenceSharing a owl:Class ;
    rdfs:label "Intelligence Sharing"@en ;
    rdfs:comment "Sharing of actionable intelligence between partners while maintaining operational security. Modeled as gUFO Object."@en ;
    rdfs:subClassOf cacontology-partnerships:InformationSharingFramework .

cacontology-partnerships:LawEnforcementPartner a gufo:Role,
        owl:Class ;
    rdfs:label "Law Enforcement Partner"@en ;
    rdfs:comment "Law enforcement agency participating in partnership with investigative and enforcement responsibilities. Modeled as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf cacontology-partnerships:PartnerRole .

cacontology-partnerships:NGOPartner a gufo:Role,
        owl:Class ;
    rdfs:label "NGO Partner"@en ;
    rdfs:comment "Non-governmental organization participating in partnership with advocacy and support capabilities. Modeled as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf cacontology-partnerships:PartnerRole .

cacontology-partnerships:RegularMeeting a owl:Class ;
    rdfs:label "Regular Meeting"@en ;
    rdfs:comment "Regular meetings between partners for coordination, information sharing, and strategic planning. Modeled as gUFO Event."@en ;
    rdfs:subClassOf cacontology-partnerships:CoordinationMechanism .

cacontology-partnerships:coordinatedBy a owl:ObjectProperty ;
    rdfs:label "coordinated by"@en ;
    rdfs:comment "Links partnership activities to coordinating organization."@en ;
    rdfs:domain cacontology-partnerships:PublicPrivatePartnership ;
    rdfs:range uco-identity:Organization .

cacontology-partnerships:coordinatedThrough a owl:ObjectProperty ;
    rdfs:label "coordinated through"@en ;
    rdfs:comment "Links partnership activities to coordination mechanisms used."@en ;
    rdfs:domain cacontology-partnerships:PublicPrivatePartnership ;
    rdfs:range cacontology-partnerships:CoordinationMechanism .

cacontology-partnerships:governedBy a owl:ObjectProperty ;
    rdfs:label "governed by"@en ;
    rdfs:comment "Links partnership to information sharing frameworks governing it."@en ;
    rdfs:domain cacontology-partnerships:PublicPrivatePartnership ;
    rdfs:range cacontology-partnerships:InformationSharingFramework .

cacontology-partnerships:hasPartnershipBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has partnership begin point"@en ;
    rdfs:comment "Temporal begin point for partnership."@en ;
    rdfs:domain cacontology-partnerships:PublicPrivatePartnership ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-partnerships:hasPartnershipEndPoint a owl:DatatypeProperty ;
    rdfs:label "has partnership end point"@en ;
    rdfs:comment "Temporal end point for partnership."@en ;
    rdfs:domain cacontology-partnerships:PublicPrivatePartnership ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-partnerships:hasPhaseBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has phase begin point"@en ;
    rdfs:comment "Temporal begin point for partnership phase."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-partnerships:hasPhaseEndPoint a owl:DatatypeProperty ;
    rdfs:label "has phase end point"@en ;
    rdfs:comment "Temporal end point for partnership phase."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-partnerships:hasRole a owl:ObjectProperty ;
    rdfs:label "has role"@en ;
    rdfs:comment "Links partner organization to their role in the partnership."@en ;
    rdfs:domain uco-identity:Organization ;
    rdfs:range cacontology-partnerships:PartnerRole .

cacontology-partnerships:hasRoleBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has role begin point"@en ;
    rdfs:comment "Temporal begin point for partner role."@en ;
    rdfs:domain gufo:Role ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-partnerships:hasRoleEndPoint a owl:DatatypeProperty ;
    rdfs:label "has role end point"@en ;
    rdfs:comment "Temporal end point for partner role."@en ;
    rdfs:domain gufo:Role ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-partnerships:includesPartner a owl:ObjectProperty ;
    rdfs:label "includes partner"@en ;
    rdfs:comment "Links partnership to participating organizations."@en ;
    rdfs:domain cacontology-partnerships:PublicPrivatePartnership ;
    rdfs:range uco-identity:Organization .

cacontology-partnerships:participatesInDevelopment a owl:ObjectProperty ;
    rdfs:label "participates in development"@en ;
    rdfs:comment "Links technology partners to development projects they participate in."@en ;
    rdfs:domain cacontology-partnerships:TechnologyPartner ;
    rdfs:range cacontology-partnerships:ToolDevelopment .

cacontology-partnerships:solicitsHelp a owl:ObjectProperty ;
    rdfs:label "solicits help"@en ;
    rdfs:comment "Links organization to crowdsourcing investigations they conduct."@en ;
    rdfs:domain uco-identity:Organization ;
    rdfs:range cacontology-partnerships:CrowdsourcingInvestigation .

<https://cacontology.projectvic.org/partnerships/shapes/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Partnerships SHACL Shapes with gUFO Integration"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "SHACL shapes for validating public-private partnerships with comprehensive gUFO foundational ontology integration for enhanced semantic precision and validation capabilities."@en ;
    owl:imports gufo:,
        <https://cacontology.projectvic.org/partnerships/2.11.0> ;
    owl:versionIRI <https://cacontology.projectvic.org/partnerships/shapes/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-physical:ChildTargetedItem a owl:Class ;
    rdfs:label "Child Targeted Item"@en ;
    rdfs:comment "Items specifically designed to appeal to or attract children (gUFO Object)."@en ;
    rdfs:subClassOf cacontology-physical:AbuseFacilitationItem .

cacontology-physical:DisguiseItem a owl:Class ;
    rdfs:label "Disguise Item"@en ;
    rdfs:comment "Items used to conceal identity or change appearance (gUFO Object)."@en ;
    rdfs:subClassOf cacontology-physical:PersonalItem .

cacontology-physical:EvidenceCollectionAction a owl:Class ;
    rdfs:label "Evidence Collection Action"@en ;
    rdfs:comment "Action of collecting and documenting physical evidence during search. Extends investigation:InvestigativeAction (gUFO Event)."@en ;
    rdfs:subClassOf gufo:Event,
        case-investigation:InvestigativeAction .

cacontology-physical:ItemModification a owl:Class ;
    rdfs:label "Item Modification"@en ;
    rdfs:comment "Alteration or customization of items to facilitate criminal activity (gUFO Event)."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-physical:PersonalItem a owl:Class ;
    rdfs:label "Personal Item"@en ;
    rdfs:comment "Personal belongings that may contain evidence or indicate criminal behavior (gUFO Object)."@en ;
    rdfs:subClassOf cacontology-physical:PhysicalEvidence .

cacontology-physical:PhysicalEvidenceProvenanceRecord a owl:Class ;
    rdfs:label "Physical Evidence Provenance Record"@en ;
    rdfs:comment "Provenance record tracking chain of custody and handling of physical evidence. Extends investigation:ProvenanceRecord for CASE ontology integration."@en ;
    rdfs:subClassOf gufo:Object,
        case-investigation:ProvenanceRecord .

cacontology-physical:StorageMedia a owl:Class ;
    rdfs:label "Storage Media"@en ;
    rdfs:comment "External storage devices including hard drives, USB drives, memory cards, and optical media (gUFO Object)."@en ;
    rdfs:subClassOf cacontology-physical:PhysicalEvidence .

cacontology-physical:VehicleSearch a owl:Class ;
    rdfs:label "Vehicle Search"@en ;
    rdfs:comment "Search of motor vehicles for evidence or contraband. May be conducted with consent or warrant (gUFO Event)."@en ;
    rdfs:subClassOf cacontology-physical:PhysicalSearch .

<https://cacontology.projectvic.org/physical/shapes/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Physical Evidence SHACL Shapes with gUFO Integration"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:modified "2026-01-01"^^xsd:date ;
    rdfs:comment "SHACL shapes for validating physical evidence in ICAC investigations with comprehensive gUFO foundational ontology integration for enhanced semantic precision and validation capabilities."@en ;
    owl:imports gufo:,
        <https://cacontology.projectvic.org/physical/2.11.0> ;
    owl:versionIRI <https://cacontology.projectvic.org/physical/shapes/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-platforms:EmergencyDisclosureRequest a owl:Class ;
    rdfs:label "Emergency Disclosure Request"@en ;
    dcterms:source "Police1 (Lexipol) article, \"How police are adapting to modern missing-child investigations\", 2026-01-30."@en ;
    rdfs:comment "Time-sensitive request by law enforcement/investigators to an electronic service provider for immediate disclosure of information based on an asserted emergency involving imminent danger (e.g., danger of death or serious physical injury). Modeled as gUFO Event."@en ;
    rdfs:seeAlso <https://www.police1.com/investigations/how-police-are-adapting-to-modern-missing-child-investigations> ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-platforms:GuestChatFeature a owl:Class ;
    rdfs:label "Guest Chat Feature"@en ;
    rdfs:comment "Platform feature allowing users to chat without creating accounts or verifying identity."@en ;
    rdfs:subClassOf uco-observable:DigitalServiceFeature .

cacontology-platforms:MassUserDatabase a owl:Class ;
    rdfs:label "Mass User Database"@en ;
    rdfs:comment "User database analysis for platforms with massive user bases requiring specialized processing techniques and automated analysis tools. Modeled as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:ObservableObject .

cacontology-platforms:MinimalVerificationRequirement a owl:Class ;
    rdfs:label "Minimal Verification Requirement"@en ;
    rdfs:comment "Verification requirements that are easily bypassed or minimal (email only, no identity check)."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-platforms:OpenChatRooms a owl:Class ;
    rdfs:label "Open Chat Rooms"@en ;
    rdfs:comment "Chat rooms open to anonymous users without verification or moderation."@en ;
    rdfs:subClassOf cacontology-platforms:AnonymousContactOpportunity .

cacontology-platforms:RandomUserMatching a owl:Class ;
    rdfs:label "Random User Matching"@en ;
    rdfs:comment "Platform feature that randomly matches users for anonymous conversations."@en ;
    rdfs:subClassOf cacontology-platforms:AnonymousContactOpportunity .

cacontology-platforms:ReviewBacklogSituation a owl:Class ;
    rdfs:label "Review Backlog Situation"@en ;
    dcterms:source "Community & Intelligence Beyond Detection (Global Emancipation Network), 2026-02-10."@en ;
    rdfs:comment "Situation in which moderation review demand exceeds capacity, producing review backlog/latency risks."@en ;
    rdfs:seeAlso <https://www.linkedin.com/pulse/community-intelligence-beyond-detection-global-emancipation-network-xvemc/> ;
    rdfs:subClassOf gufo:Situation .

cacontology-platforms:SimultaneousSearchWarrant a owl:Class ;
    rdfs:label "Simultaneous Search Warrant"@en ;
    rdfs:comment "Coordinated search warrant execution on devices and platform accounts."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-platforms:TemporaryAccountSystem a owl:Class ;
    rdfs:label "Temporary Account System"@en ;
    rdfs:comment "System allowing creation of temporary accounts with minimal verification requirements."@en ;
    rdfs:subClassOf uco-observable:DigitalServiceFeature .

cacontology-platforms:UserRiskClassification a owl:Class ;
    rdfs:label "User Risk Classification"@en ;
    rdfs:comment "Automated classification of user risk levels based on platform activity patterns, content sharing, and behavioral indicators. Modeled as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-platforms:UserScaleClassification a owl:Class ;
    rdfs:label "User Scale Classification"@en ;
    rdfs:comment "Classification system for platform size based on user base: small (<1K), medium (1K-100K), large (100K-1M), massive (1M+). Modeled as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-platforms:acceptsLegalProcess a owl:DatatypeProperty ;
    rdfs:label "accepts legal process"@en ;
    rdfs:comment "Whether the platform accepts and responds to legal process requests."@en ;
    rdfs:domain cacontology-platforms:LegalComplianceCapability ;
    rdfs:range xsd:boolean .

cacontology-platforms:ageVerificationMethod a owl:DatatypeProperty ;
    rdfs:label "age verification method"@en ;
    rdfs:comment "The method used for age verification (e.g., 'self-declaration', 'ID verification', 'credit card', 'none')."@en ;
    rdfs:domain cacontology-platforms:UserVerificationSystem ;
    rdfs:range xsd:string .

cacontology-platforms:ageVerificationRequired a owl:DatatypeProperty ;
    rdfs:label "age verification required"@en ;
    rdfs:comment "Whether age verification is required for anonymous features."@en ;
    rdfs:domain cacontology-platforms:AnonymousChatPlatform ;
    rdfs:range xsd:boolean .

cacontology-platforms:allowsAnonymousChat a owl:DatatypeProperty ;
    rdfs:label "allows anonymous chat"@en ;
    rdfs:comment "Whether platform allows anonymous chat without account creation."@en ;
    rdfs:domain cacontology-platforms:AnonymousChatPlatform ;
    rdfs:range xsd:boolean .

cacontology-platforms:anonymousUserDataRetention a owl:DatatypeProperty ;
    rdfs:label "anonymous user data retention"@en ;
    rdfs:comment "How long data from anonymous users is retained (in days)."@en ;
    rdfs:domain cacontology-platforms:AnonymousChatPlatform ;
    rdfs:range xsd:integer .

cacontology-platforms:contactInitiationMethod a owl:DatatypeProperty ;
    rdfs:label "contact initiation method"@en ;
    rdfs:comment "Method for anonymous contact initiation (random_matching, public_rooms, profile_search, interest_based)."@en ;
    rdfs:domain cacontology-platforms:AnonymousContactOpportunity ;
    rdfs:range xsd:string .

cacontology-platforms:contentRetentionPeriod a owl:DatatypeProperty ;
    rdfs:label "content retention period"@en ;
    rdfs:comment "How long user-generated content is retained (in days)."@en ;
    rdfs:domain cacontology-platforms:DataRetentionPolicy ;
    rdfs:range xsd:integer .

cacontology-platforms:conversationLogging a owl:DatatypeProperty ;
    rdfs:label "conversation logging"@en ;
    rdfs:comment "Whether anonymous conversations are logged and stored."@en ;
    rdfs:domain cacontology-platforms:AnonymousChatPlatform ;
    rdfs:range xsd:boolean .

cacontology-platforms:csaiDetectionEnabled a owl:DatatypeProperty ;
    rdfs:label "CSAI detection enabled"@en ;
    rdfs:comment "Whether the platform has Child Sexual Abuse Imagery detection systems enabled."@en ;
    rdfs:domain cacontology-platforms:ContentModerationCapability ;
    rdfs:range xsd:boolean .

cacontology-platforms:emergencyDisclosureCapable a owl:DatatypeProperty ;
    rdfs:label "emergency disclosure capable"@en ;
    rdfs:comment "Whether the platform can provide emergency disclosures for imminent threats."@en ;
    rdfs:domain cacontology-platforms:LegalComplianceCapability ;
    rdfs:range xsd:boolean .

cacontology-platforms:encryptionLevel a owl:DatatypeProperty ;
    rdfs:label "encryption level"@en ;
    rdfs:comment "The level of encryption used by the service (e.g., 'none', 'in-transit', 'end-to-end')."@en ;
    rdfs:range xsd:string .

cacontology-platforms:flagVolumePerMonth a owl:DatatypeProperty ;
    rdfs:label "flag volume per month"@en ;
    dcterms:source "Community & Intelligence Beyond Detection (Global Emancipation Network), 2026-02-10."@en ;
    rdfs:comment "Volume of flagged items generated per month (e.g., potential CSAM files flagged)."@en ;
    rdfs:domain cacontology-platforms:ModerationThroughputMetrics ;
    rdfs:range xsd:nonNegativeInteger ;
    rdfs:seeAlso <https://www.linkedin.com/pulse/community-intelligence-beyond-detection-global-emancipation-network-xvemc/> .

cacontology-platforms:guestAccountsAllowed a owl:DatatypeProperty ;
    rdfs:label "guest accounts allowed"@en ;
    rdfs:comment "Whether platform allows guest accounts with minimal verification."@en ;
    rdfs:domain cacontology-platforms:AnonymousChatPlatform ;
    rdfs:range xsd:boolean .

cacontology-platforms:hashMatchingEnabled a owl:DatatypeProperty ;
    rdfs:label "hash matching enabled"@en ;
    rdfs:comment "Whether the platform uses hash matching against known CSAM databases."@en ;
    rdfs:domain cacontology-platforms:ContentModerationCapability ;
    rdfs:range xsd:boolean .

cacontology-platforms:headquarteredIn a owl:DatatypeProperty ;
    rdfs:label "headquartered in"@en ;
    rdfs:comment "Country or jurisdiction where the organization is headquartered."@en ;
    rdfs:domain cacontology-platforms:ElectronicServiceProvider ;
    rdfs:range xsd:string .

cacontology-platforms:identityVerificationRequired a owl:DatatypeProperty ;
    rdfs:label "identity verification required"@en ;
    rdfs:comment "Whether identity verification is required for account creation."@en ;
    rdfs:domain cacontology-platforms:UserVerificationSystem ;
    rdfs:range xsd:boolean .

cacontology-platforms:legalProcessUsed a owl:DatatypeProperty ;
    rdfs:label "legal process used"@en ;
    rdfs:comment "Type of legal process used to obtain evidence (warrant, subpoena, court order)."@en ;
    rdfs:domain cacontology-platforms:SocialMediaEvidence ;
    rdfs:range xsd:string .

cacontology-platforms:logRetentionPeriod a owl:DatatypeProperty ;
    rdfs:label "log retention period"@en ;
    rdfs:comment "How long access and activity logs are retained (in days)."@en ;
    rdfs:domain cacontology-platforms:DataRetentionPolicy ;
    rdfs:range xsd:integer .

cacontology-platforms:moderationDecision a owl:DatatypeProperty ;
    rdfs:label "moderation decision"@en ;
    rdfs:comment "The decision made during content moderation (e.g., 'approved', 'removed', 'restricted', 'flagged')."@en ;
    rdfs:domain cacontology-platforms:ContentModerationAction ;
    rdfs:range xsd:string .

cacontology-platforms:moderationMethod a owl:DatatypeProperty ;
    rdfs:label "moderation method"@en ;
    rdfs:comment "The method used for content moderation (e.g., 'automated', 'human review', 'hybrid', 'user reporting')."@en ;
    rdfs:domain cacontology-platforms:ContentModerationCapability ;
    rdfs:range xsd:string .

cacontology-platforms:moderationPresence a owl:DatatypeProperty ;
    rdfs:label "moderation presence"@en ;
    rdfs:comment "Level of moderation in anonymous areas (none, minimal, moderate, heavy)."@en ;
    rdfs:domain cacontology-platforms:AnonymousContactOpportunity ;
    rdfs:range xsd:string .

cacontology-platforms:operatesInJurisdiction a owl:DatatypeProperty ;
    rdfs:label "operates in jurisdiction"@en ;
    rdfs:comment "Legal jurisdictions where the platform operates."@en ;
    rdfs:domain cacontology-platforms:ElectronicServiceProvider ;
    rdfs:range xsd:string .

cacontology-platforms:platformType a owl:DatatypeProperty ;
    rdfs:label "platform type"@en ;
    rdfs:comment "The type or category of the platform (e.g., 'social media', 'messaging', 'file hosting')."@en ;
    rdfs:range xsd:string .

cacontology-platforms:preservationPeriod a owl:DatatypeProperty ;
    rdfs:label "preservation period"@en ;
    rdfs:comment "How long data is preserved in response to legal requests (in days)."@en ;
    rdfs:domain cacontology-platforms:DataPreservationAction ;
    rdfs:range xsd:integer .

cacontology-platforms:primaryUserBase a owl:DatatypeProperty ;
    rdfs:label "primary user base"@en ;
    rdfs:comment "The primary demographic of platform users (e.g., 'adults', 'teens', 'children', 'all ages')."@en ;
    rdfs:range xsd:string .

cacontology-platforms:queueOperatedBy a owl:ObjectProperty ;
    rdfs:label "queue operated by"@en ;
    dcterms:source "Community & Intelligence Beyond Detection (Global Emancipation Network), 2026-02-10."@en ;
    rdfs:comment "Links a moderation queue to the electronic service provider operating the queue."@en ;
    rdfs:domain cacontology-platforms:ContentModerationQueue ;
    rdfs:range cacontology-platforms:ElectronicServiceProvider ;
    rdfs:seeAlso <https://www.linkedin.com/pulse/community-intelligence-beyond-detection-global-emancipation-network-xvemc/> .

cacontology-platforms:queueSize a owl:DatatypeProperty ;
    rdfs:label "queue size"@en ;
    dcterms:source "Community & Intelligence Beyond Detection (Global Emancipation Network), 2026-02-10."@en ;
    rdfs:comment "Number of items currently in a content moderation queue."@en ;
    rdfs:domain cacontology-platforms:ContentModerationQueue ;
    rdfs:range xsd:nonNegativeInteger ;
    rdfs:seeAlso <https://www.linkedin.com/pulse/community-intelligence-beyond-detection-global-emancipation-network-xvemc/> .

cacontology-platforms:requiresRegistration a owl:DatatypeProperty ;
    rdfs:label "requires registration"@en ;
    rdfs:comment "Whether the platform requires user registration to access services."@en ;
    rdfs:range xsd:boolean .

cacontology-platforms:responseTimeFrame a owl:DatatypeProperty ;
    rdfs:label "response time frame"@en ;
    rdfs:comment "Typical response time for legal process requests (in days)."@en ;
    rdfs:domain cacontology-platforms:LegalComplianceCapability ;
    rdfs:range xsd:integer .

cacontology-platforms:reviewLatencyHours a owl:DatatypeProperty ;
    rdfs:label "review latency hours"@en ;
    dcterms:source "Community & Intelligence Beyond Detection (Global Emancipation Network), 2026-02-10."@en ;
    rdfs:comment "Latency from flagging/enqueue to human or automated review completion, expressed in hours."@en ;
    rdfs:domain cacontology-platforms:ModerationThroughputMetrics ;
    rdfs:range xsd:decimal ;
    rdfs:seeAlso <https://www.linkedin.com/pulse/community-intelligence-beyond-detection-global-emancipation-network-xvemc/> .

cacontology-platforms:suspensionDuration a owl:DatatypeProperty ;
    rdfs:label "suspension duration"@en ;
    rdfs:comment "Duration of account suspension (in days, or 'permanent')."@en ;
    rdfs:domain cacontology-platforms:AccountSuspensionAction ;
    rdfs:range xsd:string .

cacontology-platforms:suspensionReason a owl:DatatypeProperty ;
    rdfs:label "suspension reason"@en ;
    rdfs:comment "The reason for account suspension or termination."@en ;
    rdfs:domain cacontology-platforms:AccountSuspensionAction ;
    rdfs:range xsd:string .

cacontology-platforms:throughputPerDay a owl:DatatypeProperty ;
    rdfs:label "throughput per day"@en ;
    dcterms:source "Community & Intelligence Beyond Detection (Global Emancipation Network), 2026-02-10."@en ;
    rdfs:comment "Number of items reviewed/processed per day in the moderation pipeline."@en ;
    rdfs:domain cacontology-platforms:ModerationThroughputMetrics ;
    rdfs:range xsd:nonNegativeInteger ;
    rdfs:seeAlso <https://www.linkedin.com/pulse/community-intelligence-beyond-detection-global-emancipation-network-xvemc/> .

cacontology-platforms:userDataRetentionPeriod a owl:DatatypeProperty ;
    rdfs:label "user data retention period"@en ;
    rdfs:comment "How long user account data is retained (in days)."@en ;
    rdfs:domain cacontology-platforms:DataRetentionPolicy ;
    rdfs:range xsd:integer .

cacontology-platforms:verificationStrength a owl:DatatypeProperty ;
    rdfs:label "verification strength"@en ;
    rdfs:comment "Strength of identity verification (none, email_only, phone_optional, id_required)."@en ;
    rdfs:domain cacontology-platforms:MinimalVerificationRequirement ;
    rdfs:range xsd:string .

<https://cacontology.projectvic.org/platforms/shapes/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Platforms SHACL Shapes"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:modified "2026-02-16"^^xsd:date ;
    rdfs:comment "SHACL validation shapes for the ICAC Platforms Ontology, providing validation for technology platforms, digital services, and Electronic Service Provider capabilities."@en ;
    owl:imports <http://purl.org/nemo/gufo>,
        <https://cacontology.projectvic.org/platforms/2.11.0>,
        uco-core: ;
    owl:versionIRI <https://cacontology.projectvic.org/platforms/shapes/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-prevention:AgeTargetedEducation a owl:Class ;
    rdfs:label "Age-Targeted Education"@en ;
    rdfs:comment "Education programs targeted to specific age groups."@en ;
    rdfs:subClassOf cacontology-prevention:ChildSafetyEducation .

cacontology-prevention:BehavioralPrevention a owl:Class ;
    rdfs:label "Behavioral Prevention"@en ;
    rdfs:comment "Prevention strategies focused on behavioral changes."@en ;
    rdfs:subClassOf cacontology-prevention:PreventionProgram .

cacontology-prevention:BullyingPrevention a owl:Class ;
    rdfs:label "Bullying Prevention"@en ;
    rdfs:comment "Prevention programs focused on reducing bullying and shaming."@en ;
    rdfs:subClassOf cacontology-prevention:PreventionProgram .

cacontology-prevention:CommunityPartnershipInitiative a owl:Class ;
    rdfs:label "Community Partnership Initiative"@en ;
    rdfs:comment "Initiative building partnerships with community organizations for child protection."@en ;
    rdfs:subClassOf cacontology-prevention:CommunityOutreach .

cacontology-prevention:CourseCompletionTracking a owl:Class ;
    rdfs:label "Course Completion Tracking"@en ;
    rdfs:comment "System for tracking participant progress and completion rates in interactive safety courses."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-prevention:EmailListEngagementMetrics a owl:Class ;
    rdfs:label "Email List Engagement Metrics"@en ;
    rdfs:comment "Metrics tracking email list subscription rates, open rates, and engagement patterns."@en ;
    rdfs:subClassOf cacontology-prevention:CommunityEngagementMetrics .

cacontology-prevention:EnvironmentalPrevention a owl:Class ;
    rdfs:label "Environmental Prevention"@en ;
    rdfs:comment "Prevention strategies focused on environmental factors."@en ;
    rdfs:subClassOf cacontology-prevention:PreventionProgram .

cacontology-prevention:InteractiveCourseMetrics a owl:Class ;
    rdfs:label "Interactive Course Metrics"@en ;
    rdfs:comment "Metrics tracking course enrollment, completion rates, and learning effectiveness."@en ;
    rdfs:subClassOf cacontology-prevention:CommunityEngagementMetrics .

cacontology-prevention:NationwideAwarenessInitiative a owl:Class ;
    rdfs:label "Nationwide Awareness Initiative"@en ;
    rdfs:comment "Nationwide coordinated awareness campaign involving multiple agencies and communities."@en ;
    rdfs:subClassOf cacontology-prevention:PreventionCampaign .

cacontology-prevention:OutreachTriggeredInvestigation a owl:Class ;
    rdfs:label "Outreach Triggered Investigation"@en ;
    rdfs:comment "Investigation initiated as direct result of community outreach presentation."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-prevention:ParentalControl a owl:Class ;
    rdfs:label "Parental Control"@en ;
    rdfs:comment "Technology tools for parental oversight."@en ;
    rdfs:subClassOf cacontology-prevention:SafetyProtocol .

cacontology-prevention:PlatformSafety a owl:Class ;
    rdfs:label "Platform Safety"@en ;
    rdfs:comment "Safety measures implemented by technology platforms."@en ;
    rdfs:subClassOf cacontology-prevention:SafetyProtocol .

cacontology-prevention:PosterDistributionMetrics a owl:Class ;
    rdfs:label "Poster Distribution Metrics"@en ;
    rdfs:comment "Metrics tracking poster distribution and reach."@en ;
    rdfs:subClassOf cacontology-prevention:PreventionMetrics .

cacontology-prevention:PreventionCurriculum a owl:Class ;
    rdfs:label "Prevention Curriculum"@en ;
    rdfs:comment "Structured curriculum for prevention education."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-prevention:PreventionMaterial a owl:Class ;
    rdfs:label "Prevention Material"@en ;
    rdfs:comment "Educational material focused on prevention strategies."@en ;
    rdfs:subClassOf cacontology-prevention:EducationalResource .

cacontology-prevention:PreventionSpecialist a owl:Class ;
    rdfs:label "Prevention Specialist"@en ;
    rdfs:comment "Professional specializing in prevention programs."@en ;
    rdfs:subClassOf uco-role:Role .

cacontology-prevention:PrimaryPrevention a owl:Class ;
    rdfs:label "Primary Prevention"@en ;
    rdfs:comment "Prevention strategies that stop abuse before it occurs."@en ;
    rdfs:subClassOf cacontology-prevention:PreventionProgram .

cacontology-prevention:QRCodeEngagementMetrics a owl:Class ;
    rdfs:label "QR Code Engagement Metrics"@en ;
    rdfs:comment "Metrics tracking QR code usage and engagement."@en ;
    rdfs:subClassOf cacontology-prevention:PreventionMetrics .

cacontology-prevention:RiskPrevention a owl:Class ;
    rdfs:label "Risk Prevention"@en ;
    rdfs:comment "Programs focused on preventing risk factors for child abuse. Modeled as gUFO Event."@en ;
    rdfs:subClassOf cacontology-prevention:PreventionProgram .

cacontology-prevention:SafeDisclosureEnvironment a owl:Class ;
    rdfs:label "Safe Disclosure Environment"@en ;
    rdfs:comment "Creation of safe environment where victims feel comfortable disclosing abuse."@en ;
    rdfs:subClassOf cacontology-prevention:SafetyProtocol .

cacontology-prevention:SafetyCoordinator a owl:Class ;
    rdfs:label "Safety Coordinator"@en ;
    rdfs:comment "Coordinator responsible for safety programs."@en ;
    rdfs:subClassOf uco-role:Role .

cacontology-prevention:SafetyGuideline a owl:Class ;
    rdfs:label "Safety Guideline"@en ;
    rdfs:comment "Guidelines for maintaining child safety."@en ;
    rdfs:subClassOf cacontology-prevention:EducationalResource .

cacontology-prevention:SchoolAllegationProtocol a owl:Class ;
    rdfs:label "School Allegation Protocol"@en ;
    rdfs:comment "Protocol for managing allegations of abuse in school settings. Modeled as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-prevention:SchoolCounselorTraining a owl:Class ;
    rdfs:label "School Counselor Training"@en ;
    rdfs:comment "Training program for school counselors."@en ;
    rdfs:subClassOf cacontology-prevention:EducatorTraining .

cacontology-prevention:SchoolPolicy a owl:Class ;
    rdfs:label "School Policy"@en ;
    rdfs:comment "Policy governing child protection in schools."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-prevention:SchoolPresentationProgram a owl:Class ;
    rdfs:label "School Presentation Program"@en ;
    rdfs:comment "FBI school presentation program for child safety education and disclosure encouragement."@en ;
    rdfs:subClassOf cacontology-prevention:EducationalOutreach .

cacontology-prevention:SchoolSafetyProgram a owl:Class ;
    rdfs:label "School Safety Program"@en ;
    rdfs:comment "Safety program implemented in school settings."@en ;
    rdfs:subClassOf cacontology-prevention:PreventionProgram .

cacontology-prevention:SecondaryPrevention a owl:Class ;
    rdfs:label "Secondary Prevention"@en ;
    rdfs:comment "Early intervention strategies to prevent escalation."@en ;
    rdfs:subClassOf cacontology-prevention:PreventionProgram .

cacontology-prevention:SextortionAwareness a owl:Class ;
    rdfs:label "Sextortion Awareness"@en ;
    rdfs:comment "Prevention program focused on sextortion education and awareness."@en ;
    rdfs:subClassOf cacontology-prevention:PreventionProgram .

cacontology-prevention:SextortionResponse a owl:Class ;
    rdfs:label "Sextortion Response"@en ;
    rdfs:comment "Response protocol for sextortion incidents."@en ;
    rdfs:subClassOf cacontology-prevention:SafetyProtocol .

cacontology-prevention:StatewideCampaignMetrics a owl:Class ;
    rdfs:label "Statewide Campaign Metrics"@en ;
    rdfs:comment "Metrics for measuring statewide prevention campaign effectiveness."@en ;
    rdfs:subClassOf cacontology-prevention:PreventionMetrics .

cacontology-prevention:StudentEducation a owl:Class ;
    rdfs:label "Student Education"@en ;
    rdfs:comment "Safety education program for students."@en ;
    rdfs:subClassOf cacontology-prevention:ChildSafetyEducation .

cacontology-prevention:TeacherTraining a owl:Class ;
    rdfs:label "Teacher Training"@en ;
    rdfs:comment "Training program specifically for teachers."@en ;
    rdfs:subClassOf cacontology-prevention:EducatorTraining .

cacontology-prevention:TertiaryPrevention a owl:Class ;
    rdfs:label "Tertiary Prevention"@en ;
    rdfs:comment "Prevention of re-victimization and recurrence."@en ;
    rdfs:subClassOf cacontology-prevention:PreventionProgram .

cacontology-prevention:VictimDisclosureTriggering a owl:Class ;
    rdfs:label "Victim Disclosure Triggering"@en ;
    rdfs:comment "Safety education event that triggers victim disclosure of ongoing abuse."@en ;
    rdfs:subClassOf cacontology-prevention:SafetyEducationEvent .

cacontology-prevention:communityParticipation a owl:DatatypeProperty ;
    rdfs:label "community participation"@en ;
    rdfs:comment "Level of community participation (0.0-1.0)."@en ;
    rdfs:domain cacontology-prevention:CommunityEngagement ;
    rdfs:range xsd:decimal .

cacontology-prevention:educationPortalReach a owl:DatatypeProperty ;
    rdfs:label "education portal reach"@en ;
    rdfs:comment "Number of users reached by education portal."@en ;
    rdfs:domain cacontology-prevention:EducationPortal ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-prevention:languageAvailability a owl:DatatypeProperty ;
    rdfs:label "language availability"@en ;
    rdfs:comment "Languages in which resource is available."@en ;
    rdfs:domain cacontology-prevention:EducationalResource ;
    rdfs:range xsd:string .

cacontology-prevention:preventionEffectiveness a owl:DatatypeProperty ;
    rdfs:label "prevention effectiveness"@en ;
    rdfs:comment "Effectiveness score of prevention program (0.0-1.0)."@en ;
    rdfs:domain cacontology-prevention:PreventionEffectiveness ;
    rdfs:range xsd:decimal .

cacontology-prevention:riskReductionLevel a owl:DatatypeProperty ;
    rdfs:label "risk reduction level"@en ;
    rdfs:comment "Level of risk reduction achieved (0.0-1.0)."@en ;
    rdfs:domain cacontology-prevention:RiskReduction ;
    rdfs:range xsd:decimal .

<https://cacontology.projectvic.org/prevention/shapes/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Prevention SHACL Shapes"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "SHACL validation shapes for the ICAC Prevention Ontology, providing validation for prevention programs, education initiatives, safety protocols, and community outreach efforts."@en ;
    owl:imports <http://purl.org/nemo/gufo>,
        <https://cacontology.projectvic.org/prevention/2.11.0>,
        uco-core: ;
    owl:versionIRI <https://cacontology.projectvic.org/prevention/shapes/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-production:ActiveProductionPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Active Production Phase"@en ;
    rdfs:comment "Phase during which production activities are actively occurring."@en ;
    rdfs:subClassOf cacontology-production:ProductionOffense .

cacontology-production:ContentCreation a owl:Class ;
    rdfs:label "Content Creation"@en ;
    rdfs:comment "Process of creating, editing, or enhancing child sexual abuse material."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-production:EditedContent a owl:Class ;
    rdfs:label "Edited Content"@en ;
    rdfs:comment "Original content that has been digitally modified or enhanced."@en ;
    rdfs:subClassOf cacontology-production:ProducedContent .

cacontology-production:EditingEquipment a owl:Class ;
    rdfs:label "Editing Equipment"@en ;
    rdfs:comment "Computer hardware and software used to edit or enhance produced material."@en ;
    rdfs:subClassOf cacontology-production:ProductionEquipment .

cacontology-production:LiveProductionEvent a owl:Class ;
    rdfs:label "Live Production Event"@en ;
    rdfs:comment "Real-time production of child sexual abuse material involving live victims."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-production:ProductionOffense .

cacontology-production:PhysicalDeviceModification a owl:Class ;
    rdfs:label "Physical Device Modification"@en ;
    rdfs:comment "Physical alterations made to recording devices to enable concealment."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-production:ProductionFacilitator a gufo:Role,
        owl:Class ;
    rdfs:label "Production Facilitator"@en ;
    rdfs:comment "Individual who assists in or enables production activities without directly producing content."@en ;
    rdfs:subClassOf uco-role:OffenderRole .

cacontology-production:ProductionSeries a owl:Class ;
    rdfs:label "Production Series"@en ;
    rdfs:comment "Connected series of production sessions targeting the same victim(s)."@en ;
    rdfs:subClassOf cacontology-production:ExtendedProductionPeriod .

cacontology-production:hasProductionPhaseBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has production phase begin point"@en ;
    rdfs:comment "Temporal begin point for production phase."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-production:hasProductionPhaseEndPoint a owl:DatatypeProperty ;
    rdfs:label "has production phase end point"@en ;
    rdfs:comment "Temporal end point for production phase."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-production:hasRoleBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has role begin point"@en ;
    rdfs:comment "Temporal begin point for production role."@en ;
    rdfs:domain gufo:Role ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-production:hasRoleEndPoint a owl:DatatypeProperty ;
    rdfs:label "has role end point"@en ;
    rdfs:comment "Temporal end point for production role."@en ;
    rdfs:domain gufo:Role ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-production:producedAt a owl:ObjectProperty ;
    rdfs:label "produced at"@en ;
    rdfs:comment "Links production activity to location where it occurred."@en ;
    rdfs:domain cacontology-production:ProductionOffense ;
    rdfs:range cacontology-production:ProductionLocation .

cacontology-production:productionMethod a owl:DatatypeProperty ;
    rdfs:label "production method"@en ;
    rdfs:comment "Method used for production (direct_recording, live_streaming, digital_manipulation)."@en ;
    rdfs:domain cacontology-production:ProductionOffense ;
    rdfs:range xsd:string .

cacontology-production:recordingQuality a owl:DatatypeProperty ;
    rdfs:label "recording quality"@en ;
    rdfs:comment "Technical quality of recorded content (low, medium, high, professional)."@en ;
    rdfs:domain cacontology-production:RecordingAction ;
    rdfs:range xsd:string .

cacontology-production:sessionCount a owl:DatatypeProperty ;
    rdfs:label "session count"@en ;
    rdfs:comment "Number of distinct production sessions."@en ;
    rdfs:domain cacontology-production:ExtendedProductionPeriod ;
    rdfs:range xsd:integer .

cacontology-production:storageCapacity a owl:DatatypeProperty ;
    rdfs:label "storage capacity"@en ;
    rdfs:comment "Storage capacity of recording device in gigabytes."@en ;
    rdfs:domain cacontology-production:RecordingDevice ;
    rdfs:range xsd:decimal .

cacontology-production:usesEquipment a owl:ObjectProperty ;
    rdfs:label "uses equipment"@en ;
    rdfs:comment "Links production activity to equipment used."@en ;
    rdfs:domain cacontology-production:ProductionOffense ;
    rdfs:range cacontology-production:ProductionEquipment .

cacontology-production:victimCount a owl:DatatypeProperty ;
    rdfs:label "victim count"@en ;
    rdfs:comment "Number of distinct victims involved in production."@en ;
    rdfs:domain cacontology-production:ProductionOffense ;
    rdfs:range xsd:integer .

<https://cacontology.projectvic.org/production/shapes/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Production SHACL Shapes with gUFO Validation"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "SHACL validation shapes for gUFO-enhanced ICAC production ontology, including anti-rigidity constraints, temporal validation, and foundational type compliance."@en ;
    owl:imports <http://purl.org/nemo/gufo>,
        <https://cacontology.projectvic.org/production/2.11.0>,
        uco-core: ;
    owl:versionIRI <https://cacontology.projectvic.org/production/shapes/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-recruitment:AfterSchoolRecruitment a owl:Class ;
    rdfs:label "After School Recruitment"@en ;
    rdfs:comment "Recruitment occurring after school hours when supervision is reduced."@en ;
    rdfs:subClassOf cacontology-recruitment:RecruitmentTiming .

cacontology-recruitment:FriendshipExploitation a owl:Class ;
    rdfs:label "Friendship Exploitation"@en ;
    rdfs:comment "Exploitation of existing friendships and trust relationships between minors for recruitment."@en ;
    rdfs:subClassOf cacontology-recruitment:PeerInfluenceRecruitment .

cacontology-recruitment:PeerInfluenceRecruitment a owl:Class ;
    rdfs:label "Peer Influence Recruitment"@en ;
    rdfs:comment "Recruitment leveraging peer pressure and social influence among minors."@en ;
    rdfs:subClassOf cacontology-recruitment:VictimMediatedRecruitment .

cacontology-recruitment:RecruitmentQuota a owl:Class ;
    rdfs:label "Recruitment Quota"@en ;
    rdfs:comment "System where existing victims must recruit specified number of new victims."@en ;
    rdfs:subClassOf cacontology-recruitment:CoercedPeerRecruitment .

cacontology-recruitment:SchoolHoursRecruitment a owl:Class ;
    rdfs:label "School Hours Recruitment"@en ;
    rdfs:comment "Recruitment occurring during regular school hours through peer interactions."@en ;
    rdfs:subClassOf cacontology-recruitment:RecruitmentTiming .

cacontology-recruitment:SchoolSocialWorker a owl:Class ;
    rdfs:label "School Social Worker"@en ;
    rdfs:comment "Social worker employed by educational institution who receives victim reports."@en ;
    rdfs:subClassOf cacontology-recruitment:SchoolStaffMember .

cacontology-recruitment:SocialWorkerReport a owl:Class ;
    rdfs:label "Social Worker Report"@en ;
    rdfs:comment "Report made by school social worker to law enforcement regarding trafficking victim."@en ;
    rdfs:subClassOf cacontology-recruitment:SchoolBasedReporting .

cacontology-recruitment:academicPerformanceLevel a owl:DatatypeProperty ;
    rdfs:label "academic performance level"@en ;
    rdfs:comment "Academic performance level (failing, below_average, average, above_average, excellent)."@en ;
    rdfs:domain cacontology-recruitment:AcademicStruggles ;
    rdfs:range xsd:string .

cacontology-recruitment:attendanceRate a owl:DatatypeProperty ;
    rdfs:label "attendance rate"@en ;
    rdfs:comment "School attendance rate as percentage (0.0-1.0)."@en ;
    rdfs:domain cacontology-recruitment:AttendanceProblems ;
    rdfs:range xsd:decimal .

cacontology-recruitment:averageRecruitmentTime a owl:DatatypeProperty ;
    rdfs:label "average recruitment time"@en ;
    rdfs:comment "Average time from introduction to successful recruitment in days."@en ;
    rdfs:domain cacontology-recruitment:ClassmateIntroduction ;
    rdfs:range xsd:decimal .

cacontology-recruitment:contactsLawEnforcement a owl:ObjectProperty ;
    rdfs:label "contacts law enforcement"@en ;
    rdfs:comment "Links school staff to law enforcement contact they make."@en ;
    rdfs:domain cacontology-recruitment:SchoolStaffMember ;
    rdfs:range cacontology-recruitment:SchoolPoliceContact .

cacontology-recruitment:employedAt a owl:ObjectProperty ;
    rdfs:label "employed at"@en ;
    rdfs:comment "Links school staff member to educational institution where they work."@en ;
    rdfs:domain cacontology-recruitment:SchoolStaffMember ;
    rdfs:range cacontology-recruitment:EducationalInstitution .

cacontology-recruitment:facilitatedBy a owl:ObjectProperty ;
    rdfs:label "facilitated by"@en ;
    rdfs:comment "Links recruitment to victim who facilitated the introduction."@en ;
    rdfs:domain cacontology-recruitment:VictimMediatedRecruitment ;
    rdfs:range uco-identity:Person .

cacontology-recruitment:gradeLevel a owl:DatatypeProperty ;
    rdfs:label "grade level"@en ;
    rdfs:comment "School grade level where recruitment occurs (elementary, middle, high)."@en ;
    rdfs:domain cacontology-recruitment:SchoolBasedRecruitment ;
    rdfs:range xsd:string .

cacontology-recruitment:includesRecruitingVictim a owl:ObjectProperty ;
    rdfs:label "includes recruiting victim"@en ;
    rdfs:comment "Links recruitment network to victim being used as recruiter."@en ;
    rdfs:domain cacontology-recruitment:PeerRecruitmentNetwork ;
    rdfs:range uco-identity:Person .

cacontology-recruitment:introducesTo a owl:ObjectProperty ;
    rdfs:label "introduces to"@en ;
    rdfs:comment "Links classmate introduction to trafficker being introduced to."@en ;
    rdfs:domain cacontology-recruitment:ClassmateIntroduction ;
    rdfs:range uco-identity:Person .

cacontology-recruitment:mandatoryReportingTrigger a owl:DatatypeProperty ;
    rdfs:label "mandatory reporting trigger"@en ;
    rdfs:comment "Whether report was triggered by mandatory reporting requirements."@en ;
    rdfs:domain cacontology-recruitment:SchoolBasedReporting ;
    rdfs:range xsd:boolean .

cacontology-recruitment:networkSize a owl:DatatypeProperty ;
    rdfs:label "network size"@en ;
    rdfs:comment "Number of participants in the recruitment network."@en ;
    rdfs:domain cacontology-recruitment:PeerRecruitmentNetwork ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-recruitment:receivesReport a owl:ObjectProperty ;
    rdfs:label "receives report"@en ;
    rdfs:comment "Links school staff member to report they receive from victim."@en ;
    rdfs:domain cacontology-recruitment:SchoolStaffMember ;
    rdfs:range cacontology-recruitment:VictimSchoolDisclosure .

cacontology-recruitment:recruitmentAttempts a owl:DatatypeProperty ;
    rdfs:label "recruitment attempts"@en ;
    rdfs:comment "Total number of recruitment attempts made through network."@en ;
    rdfs:domain cacontology-recruitment:VictimMediatedRecruitment ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-recruitment:reportingDelay a owl:DatatypeProperty ;
    rdfs:label "reporting delay"@en ;
    rdfs:comment "Time delay between incident and reporting to authorities in days."@en ;
    rdfs:domain cacontology-recruitment:SchoolBasedReporting ;
    rdfs:range xsd:decimal .

cacontology-recruitment:schoolType a owl:DatatypeProperty ;
    rdfs:label "school type"@en ;
    rdfs:comment "Type of educational institution (public, private, charter, alternative)."@en ;
    rdfs:domain cacontology-recruitment:EducationalInstitution ;
    rdfs:range xsd:string .

cacontology-recruitment:schoolsInvolved a owl:DatatypeProperty ;
    rdfs:label "schools involved"@en ;
    rdfs:comment "Number of educational institutions involved in recruitment network."@en ;
    rdfs:domain cacontology-recruitment:ClassmateRecruitmentNetwork ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-recruitment:socioeconomicLevel a owl:DatatypeProperty ;
    rdfs:label "socioeconomic level"@en ;
    rdfs:comment "Socioeconomic level of school community (low, middle, high, mixed)."@en ;
    rdfs:domain cacontology-recruitment:EducationalInstitution ;
    rdfs:range xsd:string .

cacontology-recruitment:studentPopulation a owl:DatatypeProperty ;
    rdfs:label "student population"@en ;
    rdfs:comment "Total number of students in educational institution."@en ;
    rdfs:domain cacontology-recruitment:EducationalInstitution ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-recruitment:targetsSchool a owl:ObjectProperty ;
    rdfs:label "targets school"@en ;
    rdfs:comment "Links recruitment network to educational institution being targeted."@en ;
    rdfs:domain cacontology-recruitment:ClassmateRecruitmentNetwork ;
    rdfs:range cacontology-recruitment:EducationalInstitution .

cacontology-recruitment:victimRecruitersCount a owl:DatatypeProperty ;
    rdfs:label "victim recruiters count"@en ;
    rdfs:comment "Number of existing victims being used as recruiters."@en ;
    rdfs:domain cacontology-recruitment:PeerRecruitmentNetwork ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-recruitment:vulnerabilityScore a owl:DatatypeProperty ;
    rdfs:label "vulnerability score"@en ;
    rdfs:comment "Numerical assessment of vulnerability factors (0.0-1.0)."@en ;
    rdfs:domain cacontology-recruitment:SchoolVulnerabilityFactor ;
    rdfs:range xsd:decimal .

<https://cacontology.projectvic.org/recruitment-networks/shapes/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Recruitment Networks SHACL Shapes"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "SHACL validation shapes for the ICAC Recruitment Networks Ontology, providing validation for peer recruitment networks, classmate-mediated trafficking, and social recruitment patterns."@en ;
    owl:imports <http://purl.org/nemo/gufo>,
        <https://cacontology.projectvic.org/recruitment-networks/2.11.0>,
        uco-core: ;
    owl:versionIRI <https://cacontology.projectvic.org/recruitment-networks/shapes/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-sentencing:AppealProcess a owl:Class ;
    rdfs:label "Appeal Process"@en ;
    rdfs:comment "Legal process to challenge conviction or sentence in higher court. Modeled as gUFO Event."@en ;
    rdfs:subClassOf cacontology-sentencing:LegalProceeding .

cacontology-sentencing:CSAM_Production a owl:Class ;
    rdfs:label "CSAM Production"@en ;
    rdfs:comment "Charge for production of child sexual abuse material, typically carrying severe mandatory minimum sentences. Modeled as gUFO Object."@en ;
    rdfs:subClassOf cacontology-sentencing:FederalCharge .

cacontology-sentencing:LegalCaseSituation a owl:Class ;
    rdfs:label "Legal Case Situation"@en ;
    rdfs:comment "Complex situation encompassing the entire legal case from charges to resolution. Modeled as gUFO Situation."@en ;
    rdfs:subClassOf gufo:Situation .

cacontology-sentencing:ProbationSentence a owl:Class ;
    rdfs:label "Probation Sentence"@en ;
    rdfs:comment "Supervised release with conditions instead of or after incarceration. Modeled as gUFO Object."@en ;
    rdfs:subClassOf cacontology-sentencing:CriminalSentence .

cacontology-sentencing:SexualExploitationOfMinorCharge a owl:Class ;
    rdfs:label "Sexual Exploitation of a Minor (GA)"@en ;
    dcterms:source "Georgia Office of the Attorney General press release, 2026-02-14."@en ;
    rdfs:comment "Georgia state charge for sexual exploitation of a minor, as reported in a Georgia Attorney General press release. Modeled as gUFO Object."@en ;
    rdfs:seeAlso <https://law.georgia.gov/press-releases/2026-02-14/carr-hart-county-man-convicted-trafficking-teen-targeting-victim-snapchat> ;
    rdfs:subClassOf cacontology-sentencing:GeorgiaStateCharge ;
    skos:altLabel "Sexual Exploitation of a Minor"@en .

cacontology-sentencing:TraffickingOfPersonsForSexualServitudeCharge a owl:Class ;
    rdfs:label "Trafficking of Persons for Sexual Servitude (GA)"@en ;
    dcterms:source "Georgia Office of the Attorney General press release, 2026-02-14."@en ;
    rdfs:comment "Georgia state charge for trafficking of persons for sexual servitude, as reported in a Georgia Attorney General press release. Modeled as gUFO Object."@en ;
    rdfs:seeAlso <https://law.georgia.gov/press-releases/2026-02-14/carr-hart-county-man-convicted-trafficking-teen-targeting-victim-snapchat> ;
    rdfs:subClassOf cacontology-sentencing:GeorgiaStateCharge ;
    skos:altLabel "Trafficking for Sexual Servitude"@en .

cacontology-sentencing:appliesStandardOfReview a owl:ObjectProperty ;
    rdfs:label "applies standard of review"@en ;
    rdfs:comment "Links an appellate issue to the standard of review applied by the appellate court."@en ;
    rdfs:domain cacontology-sentencing:AppellateIssue ;
    rdfs:range cacontology-sentencing:StandardOfReview .

cacontology-sentencing:bailStatus a owl:DatatypeProperty ;
    rdfs:label "bail status"@en ;
    rdfs:comment "Status of the defendant's pretrial release for a legal proceeding (e.g., released_on_bail, held_without_bail, released_on_own_recognizance)."@en ;
    rdfs:domain cacontology-sentencing:LegalProceeding ;
    rdfs:range xsd:string .

cacontology-sentencing:citesEvidenceRule a owl:ObjectProperty ;
    rdfs:label "cites evidence rule"@en ;
    rdfs:comment "Links an appellate issue to an evidence rule cited or applied in the issue analysis."@en ;
    rdfs:domain cacontology-sentencing:AppellateIssue ;
    rdfs:range cacontology-sentencing:EvidenceRule .

cacontology-sentencing:communicationPlatform a owl:DatatypeProperty ;
    rdfs:label "communication platform"@en ;
    rdfs:comment "Platform used for electronic communication in the offense."@en ;
    rdfs:domain cacontology-sentencing:FloridaStateCharge ;
    rdfs:range xsd:string .

cacontology-sentencing:concurrentWith a owl:ObjectProperty ;
    rdfs:label "concurrent with"@en ;
    rdfs:comment "Links one criminal sentence to another sentence that is ordered to run concurrently."@en ;
    rdfs:domain cacontology-sentencing:CriminalSentence ;
    rdfs:range cacontology-sentencing:CriminalSentence .

cacontology-sentencing:conditionAppliesToPerson a owl:ObjectProperty ;
    rdfs:label "condition applies to person"@en ;
    rdfs:comment "Links a plea/sentencing condition to the person it applies to (typically the defendant)."@en ;
    rdfs:domain cacontology-sentencing:ProfessionalLicenseSurrenderCondition ;
    rdfs:range uco-identity:Person .

cacontology-sentencing:contributionType a owl:DatatypeProperty ;
    rdfs:label "contribution type"@en ;
    rdfs:comment "Type of contribution in delinquency charges (delinquency, dependency, both)."@en ;
    rdfs:domain cacontology-sentencing:ContributingToDelinquency ;
    rdfs:range xsd:string .

cacontology-sentencing:dispositionType a owl:DatatypeProperty ;
    rdfs:label "disposition type"@en ;
    rdfs:comment "Categorical appellate disposition identifier (e.g., affirmed, reversed, vacated, remanded)."@en ;
    rdfs:domain cacontology-sentencing:AppellateDisposition ;
    rdfs:range xsd:string .

cacontology-sentencing:issueDisposition a owl:ObjectProperty ;
    rdfs:label "issue disposition"@en ;
    rdfs:comment "Links an appellate issue to its disposition."@en ;
    rdfs:domain cacontology-sentencing:AppellateIssue ;
    rdfs:range cacontology-sentencing:AppellateDisposition .

cacontology-sentencing:promotionType a owl:DatatypeProperty ;
    rdfs:label "promotion type"@en ;
    rdfs:comment "Type of promotion in sexual performance charges (direct_promotion, directing, producing, facilitating)."@en ;
    rdfs:domain cacontology-sentencing:DirectPromotionOfSexualPerformance ;
    rdfs:range xsd:string .

cacontology-sentencing:requiresLicenseSurrender a owl:ObjectProperty ;
    rdfs:label "requires license surrender"@en ;
    rdfs:comment "Links a professional license surrender condition to the professional license that must be surrendered."@en ;
    rdfs:domain cacontology-sentencing:ProfessionalLicenseSurrenderCondition ;
    rdfs:range cacontology-registry:ProfessionalLicense .

cacontology-sentencing:ruleCitation a owl:DatatypeProperty ;
    rdfs:label "rule citation"@en ;
    rdfs:comment "Citation string for an evidence rule (e.g., 'Fed. R. Evid. 403')."@en ;
    rdfs:domain cacontology-sentencing:EvidenceRule ;
    rdfs:range xsd:string .

cacontology-sentencing:sentenceConcurrency a owl:DatatypeProperty ;
    rdfs:label "sentence concurrency"@en ;
    rdfs:comment "Indicates whether a criminal sentence is concurrent, consecutive, or mixed with respect to other sentences (values: concurrent, consecutive, mixed)."@en ;
    rdfs:domain cacontology-sentencing:CriminalSentence ;
    rdfs:range xsd:string .

cacontology-sentencing:sentenceDuration a owl:DatatypeProperty ;
    rdfs:label "sentence duration"@en ;
    rdfs:comment "Duration of criminal sentence."@en ;
    rdfs:domain cacontology-sentencing:CriminalSentence ;
    rdfs:range xsd:duration .

cacontology-sentencing:solicitationType a owl:DatatypeProperty ;
    rdfs:label "solicitation type"@en ;
    rdfs:comment "Type of solicitation in computer solicitation charges (seduce, solicit, lure, entice, multiple)."@en ;
    rdfs:domain cacontology-sentencing:ComputerSeduceSolicitLure ;
    rdfs:range xsd:string .

cacontology-sentencing:standardOfReviewType a owl:DatatypeProperty ;
    rdfs:label "standard of review type"@en ;
    rdfs:comment "Categorical standard-of-review identifier (e.g., de_novo, abuse_of_discretion, plain_error)."@en ;
    rdfs:domain cacontology-sentencing:StandardOfReview ;
    rdfs:range xsd:string .

<https://cacontology.projectvic.org/sentencing/shapes/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Sentencing SHACL Shapes"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:modified "2026-02-16"^^xsd:date ;
    rdfs:comment "SHACL validation shapes for the ICAC Sentencing Ontology, providing validation for legal outcomes, federal sentences, judicial proceedings, and punishment guidelines."@en ;
    owl:imports <http://purl.org/nemo/gufo>,
        <https://cacontology.projectvic.org/sentencing/2.11.0>,
        <https://cacontology.projectvic.org/sex-offender-registry/2.11.0>,
        uco-core: ;
    owl:versionIRI <https://cacontology.projectvic.org/sentencing/shapes/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-registry:Alias a owl:Class ;
    rdfs:label "Alias"@en ;
    rdfs:comment "Known alias or alternate name used by registered sex offender."@en ;
    rdfs:subClassOf uco-identity:Identity .

cacontology-registry:AnnualRegistrationReview a owl:Class ;
    rdfs:label "Annual Registration Review"@en ;
    rdfs:comment "Annual review and update of sex offender registration information."@en ;
    rdfs:subClassOf cacontology-registry:VerificationCheck .

cacontology-registry:ComplianceHistory a owl:Class ;
    rdfs:label "Compliance History"@en ;
    rdfs:comment "History of compliance with registration requirements."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-registry:ComplianceScheduleCoordination a owl:Class ;
    rdfs:label "Compliance Schedule Coordination"@en ;
    rdfs:comment "Coordination between law enforcement investigations and compliance schedules for arrest timing."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-registry:EducationInformation a owl:Class ;
    rdfs:label "Education Information"@en ;
    rdfs:comment "Educational enrollment information for registered sex offender."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-registry:EmploymentInformation a owl:Class ;
    rdfs:label "Employment Information"@en ;
    rdfs:comment "Current employment information for registered sex offender."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-registry:MultiModalDigitalEvidence a owl:Class ;
    rdfs:label "Multi Modal Digital Evidence"@en ;
    rdfs:comment "Digital evidence containing multiple content types (text, images, audio, video) in single exploitation case."@en ;
    rdfs:subClassOf uco-observable:ObservableObject .

cacontology-registry:OffenderDeviceSearchWarrant a owl:Class ;
    rdfs:label "Offender Device Search Warrant"@en ;
    rdfs:comment "Search warrant executed on registered sex offender's residence and devices for digital evidence recovery."@en ;
    rdfs:subClassOf uco-observable:ObservableObject .

cacontology-registry:PersonalIdentifiers a owl:Class ;
    rdfs:label "Personal Identifiers"@en ;
    rdfs:comment "Collection of identifiers for registered sex offender (SSN, DOB, aliases, etc.)."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-registry:PrimaryResidence a owl:Class ;
    rdfs:label "Primary Residence"@en ;
    rdfs:comment "Primary residential address where offender lives."@en ;
    rdfs:subClassOf cacontology-registry:RegisteredAddress .

cacontology-registry:RegisteredVehicle a owl:Class ;
    rdfs:label "Registered Vehicle"@en ;
    rdfs:comment "Vehicle registered to sex offender."@en ;
    rdfs:subClassOf cacontology-registry:VehicleInformation .

cacontology-registry:RegistrationRequirement a owl:Class ;
    rdfs:label "Registration Requirement"@en ;
    rdfs:comment "Specific requirement for sex offender registration (location, frequency, restrictions)."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-registry:RegistrationReviewArrest a owl:Class ;
    rdfs:label "Registration Review Arrest"@en ;
    rdfs:comment "Arrest executed when offender arrives for scheduled registration review or update."@en ;
    rdfs:subClassOf cacontology-registry:ComplianceBasedArrest .

cacontology-registry:RegistrationStatus a owl:Class ;
    rdfs:label "Registration Status"@en ;
    rdfs:comment "Current status of sex offender registration (active, inactive, non-compliant, etc.)."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-registry:RegistrationUpdate a owl:Class ;
    rdfs:label "Registration Update"@en ;
    rdfs:comment "Update to sex offender registration information."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-registry:RegistryAgency a owl:Class ;
    rdfs:label "Registry Agency"@en ;
    rdfs:comment "Law enforcement agency responsible for maintaining sex offender registry."@en ;
    rdfs:subClassOf uco-identity:Organization .

cacontology-registry:SchoolLocation a owl:Class ;
    rdfs:label "School Location"@en ;
    rdfs:comment "Educational institution where offender is enrolled."@en ;
    rdfs:subClassOf uco-location:Location .

cacontology-registry:VictimDeviceForensics a owl:Class ;
    rdfs:label "Victim Device Forensics"@en ;
    rdfs:comment "Forensic examination of victim's device to recover evidence of digital exploitation."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-registry:convictionDate a owl:DatatypeProperty ;
    rdfs:label "conviction date"@en ;
    rdfs:comment "Date of conviction for sexual offense."@en ;
    rdfs:domain cacontology-registry:ConvictingOffense ;
    rdfs:range xsd:date .

cacontology-registry:dateOfBirth a owl:DatatypeProperty ;
    rdfs:label "date of birth"@en ;
    rdfs:comment "Date of birth of registered sex offender."@en ;
    rdfs:domain cacontology-registry:RegisteredSexOffender ;
    rdfs:range xsd:date .

cacontology-registry:expirationDate a owl:DatatypeProperty ;
    rdfs:label "expiration date"@en ;
    rdfs:comment "Date when registration requirement expires (if applicable)."@en ;
    rdfs:domain cacontology-registry:RegistrationRecord ;
    rdfs:range xsd:dateTime .

cacontology-registry:eyeColor a owl:DatatypeProperty ;
    rdfs:label "eye color"@en ;
    rdfs:comment "Eye color of registered sex offender."@en ;
    rdfs:domain cacontology-registry:PhysicalDescription ;
    rdfs:range xsd:string .

cacontology-registry:fullName a owl:DatatypeProperty ;
    rdfs:label "full name"@en ;
    rdfs:comment "Legal full name of registered sex offender."@en ;
    rdfs:domain cacontology-registry:RegisteredSexOffender ;
    rdfs:range xsd:string .

cacontology-registry:hairColor a owl:DatatypeProperty ;
    rdfs:label "hair color"@en ;
    rdfs:comment "Hair color of registered sex offender."@en ;
    rdfs:domain cacontology-registry:PhysicalDescription ;
    rdfs:range xsd:string .

cacontology-registry:height a owl:DatatypeProperty ;
    rdfs:label "height"@en ;
    rdfs:comment "Height of registered sex offender."@en ;
    rdfs:domain cacontology-registry:PhysicalDescription ;
    rdfs:range xsd:string .

cacontology-registry:lastUpdate a owl:DatatypeProperty ;
    rdfs:label "last update"@en ;
    rdfs:comment "Date of last update to registration information."@en ;
    rdfs:domain cacontology-registry:RegistrationRecord ;
    rdfs:range xsd:dateTime .

cacontology-registry:lifetimeRegistration a owl:DatatypeProperty ;
    rdfs:label "lifetime registration"@en ;
    rdfs:comment "Whether registration is required for life."@en ;
    rdfs:domain cacontology-registry:RegistrationRecord ;
    rdfs:range xsd:boolean .

cacontology-registry:managedBy a owl:ObjectProperty ;
    rdfs:label "managed by"@en ;
    rdfs:comment "Agency responsible for managing registry."@en ;
    rdfs:domain cacontology-registry:SexOffenderRegistry ;
    rdfs:range cacontology-registry:RegistryAgency .

cacontology-registry:offenseDescription a owl:DatatypeProperty ;
    rdfs:label "offense description"@en ;
    rdfs:comment "Description of the sexual offense."@en ;
    rdfs:domain cacontology-registry:ConvictingOffense ;
    rdfs:range xsd:string .

cacontology-registry:postRegistrationEvent a owl:ObjectProperty ;
    rdfs:label "post-registration event"@en ;
    rdfs:comment "Links a recidivist sex offender to child sexual abuse or CSAM incidents that occurred after their initial sex offender registration date."@en ;
    rdfs:domain cacontology-registry:RecidivistSexOffender ;
    rdfs:range cacontology:ChildSexualAbuseEvent .

cacontology-registry:race a owl:DatatypeProperty ;
    rdfs:label "race"@en ;
    rdfs:comment "Race of registered sex offender."@en ;
    rdfs:domain cacontology-registry:RegisteredSexOffender ;
    rdfs:range xsd:string .

cacontology-registry:registeredIn a owl:ObjectProperty ;
    rdfs:label "registered in"@en ;
    rdfs:comment "Registry system where offender is registered."@en ;
    rdfs:domain cacontology-registry:RegisteredSexOffender ;
    rdfs:range cacontology-registry:SexOffenderRegistry .

cacontology-registry:registrationDate a owl:DatatypeProperty ;
    rdfs:label "registration date"@en ;
    rdfs:comment "Date when sex offender registration was first required."@en ;
    rdfs:domain cacontology-registry:RegistrationRecord ;
    rdfs:range xsd:dateTime .

cacontology-registry:registrationNumber a owl:DatatypeProperty ;
    rdfs:label "registration number"@en ;
    rdfs:comment "Unique identifier assigned to sex offender registration."@en ;
    rdfs:domain cacontology-registry:RegistrationRecord ;
    rdfs:range xsd:string .

cacontology-registry:sentenceLength a owl:DatatypeProperty ;
    rdfs:label "sentence length"@en ;
    rdfs:comment "Length of sentence imposed for offense."@en ;
    rdfs:domain cacontology-registry:ConvictingOffense ;
    rdfs:range xsd:string .

cacontology-registry:sex a owl:DatatypeProperty ;
    rdfs:label "sex"@en ;
    rdfs:comment "Sex of registered sex offender."@en ;
    rdfs:domain cacontology-registry:RegisteredSexOffender ;
    rdfs:range xsd:string .

cacontology-registry:socialSecurityNumber a owl:DatatypeProperty ;
    rdfs:label "social security number"@en ;
    rdfs:comment "Social Security Number (restricted access)."@en ;
    rdfs:domain cacontology-registry:PersonalIdentifiers ;
    rdfs:range xsd:string .

cacontology-registry:tier a owl:DatatypeProperty ;
    rdfs:label "tier"@en ;
    rdfs:comment "Risk tier classification (Tier I, II, III)."@en ;
    rdfs:domain cacontology-registry:RegisteredSexOffender ;
    rdfs:range xsd:string .

cacontology-registry:victimAge a owl:DatatypeProperty ;
    rdfs:label "victim age"@en ;
    rdfs:comment "Age of victim at time of offense."@en ;
    rdfs:domain cacontology-registry:VictimInformation ;
    rdfs:range xsd:integer .

cacontology-registry:victimCount a owl:DatatypeProperty ;
    rdfs:label "victim count"@en ;
    rdfs:comment "Number of victims involved in offense."@en ;
    rdfs:domain cacontology-registry:VictimInformation ;
    rdfs:range xsd:integer .

cacontology-registry:victimRelationship a owl:DatatypeProperty ;
    rdfs:label "victim relationship"@en ;
    rdfs:comment "Relationship between offender and victim (stranger, known, family)."@en ;
    rdfs:domain cacontology-registry:VictimInformation ;
    rdfs:range xsd:string .

cacontology-registry:violationCategory a owl:DatatypeProperty ;
    rdfs:label "violation category"@en ;
    rdfs:comment "Categorization of a registry compliance violation (e.g., failure_to_register, false_information, late_update, residency_restriction_violation)."@en ;
    rdfs:domain cacontology-registry:ComplianceViolation ;
    rdfs:range xsd:string .

cacontology-registry:weight a owl:DatatypeProperty ;
    rdfs:label "weight"@en ;
    rdfs:comment "Weight of registered sex offender."@en ;
    rdfs:domain cacontology-registry:PhysicalDescription ;
    rdfs:range xsd:string .

<https://cacontology.projectvic.org/sex-offender-registry/shapes/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Sex Offender Registry SHACL Shapes"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "SHACL validation shapes for the ICAC Sex Offender Registry Ontology, providing validation for registry data, registration requirements, and registry management systems."@en ;
    owl:imports <http://purl.org/nemo/gufo>,
        <https://cacontology.projectvic.org/sex-offender-registry/2.11.0>,
        uco-core: ;
    owl:versionIRI <https://cacontology.projectvic.org/sex-offender-registry/shapes/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-sextortion:GiftCardDemand a owl:Class ;
    rdfs:label "Gift Card Demand"@en ;
    rdfs:comment "Demand for gift cards as form of payment."@en ;
    rdfs:subClassOf cacontology-sextortion:ExtortionDemand .

cacontology-sextortion:ImageSolicitationMessage a owl:Class ;
    rdfs:label "Image Solicitation Message"@en ;
    rdfs:comment "Message requesting intimate images from victim."@en ;
    rdfs:subClassOf cacontology-sextortion:SextortionCommunication .

cacontology-sextortion:InstantMessagingPlatform a owl:Class ;
    rdfs:label "Instant Messaging Platform"@en ;
    rdfs:comment "Digital platform used for instant messaging in sextortion incidents."@en ;
    rdfs:subClassOf uco-observable:DigitalService .

cacontology-sextortion:MonetaryDemand a owl:Class ;
    rdfs:label "Monetary Demand"@en ;
    rdfs:comment "Demand for money or financial payment."@en ;
    rdfs:subClassOf cacontology-sextortion:ExtortionDemand .

cacontology-sextortion:PeerImpersonation a owl:Class ;
    rdfs:label "Peer Impersonation"@en ;
    rdfs:comment "Posing as age-appropriate peer to gain victim trust."@en ;
    rdfs:subClassOf cacontology-sextortion:IdentityImpersonation .

cacontology-sextortion:SadisticSextortion a owl:Class ;
    rdfs:label "Sadistic Sextortion"@en ;
    dcterms:source "Know2Protect brochure (K2P SOE Information.pdf), normalized.txt line 46."@en ;
    rdfs:comment "Sextortion incident in which the coercive leverage includes threats compelling suffering, submission, or harm (e.g., violence, coerced self-harm, or destruction), often coordinated through organized networks."@en ;
    rdfs:seeAlso <https://know2protect.gov> ;
    rdfs:subClassOf cacontology-sextortion:SextortionIncident .

cacontology-sextortion:ScreenshotThreat a owl:Class ;
    rdfs:label "Screenshot Threat"@en ;
    rdfs:comment "Threat to screenshot images when victim refuses demands (specific to WA case)."@en ;
    rdfs:subClassOf cacontology-sextortion:ThreatMechanism .

cacontology-sextortion:SexuallyExplicitConversation a owl:Class ;
    rdfs:label "Sexually Explicit Conversation"@en ;
    rdfs:comment "Conversation containing sexually explicit content directed at children."@en ;
    rdfs:subClassOf cacontology-sextortion:SextortionCommunication .

cacontology-sextortion:SocialMediaSharingThreat a owl:Class ;
    rdfs:label "Social Media Sharing Threat"@en ;
    rdfs:comment "Threat to post intimate images on social media platforms."@en ;
    rdfs:subClassOf cacontology-sextortion:SharingThreat .

cacontology-sextortion:VictimIdentification a owl:Class ;
    rdfs:label "Victim Identification"@en ;
    rdfs:comment "Process of identifying and locating sextortion victims."@en ;
    rdfs:subClassOf cacontology-sextortion:SextortionInvestigation .

cacontology-sextortion:actualAge a owl:DatatypeProperty ;
    rdfs:label "actual age"@en ;
    rdfs:comment "Actual age of offender (e.g., 20 in WA case)."@en ;
    rdfs:domain cacontology-sextortion:AgeDeceptionTactic ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-sextortion:claimedAge a owl:DatatypeProperty ;
    rdfs:label "claimed age"@en ;
    rdfs:comment "False age claimed by offender during deception."@en ;
    rdfs:domain cacontology-sextortion:AgeDeceptionTactic ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-sextortion:escalationSpeed a owl:DatatypeProperty ;
    rdfs:label "escalation speed"@en ;
    rdfs:comment "Speed of escalation from initial contact to exploitation (rapid, gradual, extended)."@en ;
    rdfs:domain cacontology-sextortion:ProgressiveEscalation ;
    rdfs:range xsd:string .

cacontology-sextortion:incidentDuration a owl:DatatypeProperty ;
    rdfs:label "incident duration"@en ;
    rdfs:comment "Duration of sextortion incident from initial contact to resolution."@en ;
    rdfs:domain cacontology-sextortion:SextortionIncident ;
    rdfs:range xsd:duration .

cacontology-sextortion:threatSpecificity a owl:DatatypeProperty ;
    rdfs:label "threat specificity"@en ;
    rdfs:comment "How specific the threat was (vague, specific, detailed)."@en ;
    rdfs:domain cacontology-sextortion:ThreatMechanism ;
    rdfs:range xsd:string .

<https://cacontology.projectvic.org/sextortion/shapes/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Sextortion SHACL Shapes"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:modified "2026-02-11"^^xsd:date ;
    rdfs:comment "SHACL validation shapes for the ICAC Sextortion Ontology, providing validation for sextortion incidents, progression patterns, and investigation approaches."@en ;
    owl:imports <http://purl.org/nemo/gufo>,
        <https://cacontology.projectvic.org/sextortion/2.11.0>,
        uco-core: ;
    owl:versionIRI <https://cacontology.projectvic.org/sextortion/shapes/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-soe:coercionShowType a owl:DatatypeProperty ;
    rdfs:label "coercion show type"@en ;
    dcterms:source "Know2Protect brochure (K2P SOE Information.pdf), normalized.txt line 32."@en ;
    rdfs:comment "Type of livestreamed coercion show (e.g., watch_party, cut_show, cut_stage, stage)."@en ;
    rdfs:domain cacontology-soe:LivestreamedCoercionShow ;
    rdfs:range xsd:string ;
    rdfs:seeAlso <https://know2protect.gov> .

cacontology-soe:communitySlangTerm a owl:DatatypeProperty ;
    rdfs:label "community slang term"@en ;
    dcterms:source "Know2Protect brochure (K2P SOE Information.pdf), normalized.txt line 8."@en ;
    rdfs:comment "A slang term used by participants to refer to SOE networks/communities (e.g., \"the com\")."@en ;
    rdfs:domain cacontology-soe:SadisticOnlineExploitationNetwork ;
    rdfs:range xsd:string ;
    rdfs:seeAlso <https://know2protect.gov> .

cacontology-soe:hostsCoercionShow a owl:ObjectProperty ;
    rdfs:label "hosts coercion show"@en ;
    dcterms:source "Know2Protect brochure (K2P SOE Information.pdf), normalized.txt line 32."@en ;
    rdfs:comment "Links an SOE network/community to a livestreamed coercion show it hosts/coordinates."@en ;
    rdfs:domain cacontology-soe:SadisticOnlineExploitationNetwork ;
    rdfs:range cacontology-soe:LivestreamedCoercionShow ;
    rdfs:seeAlso <https://know2protect.gov> .

<https://cacontology.projectvic.org/soe/shapes/2.11.0> a owl:Ontology ;
    rdfs:label "CAC SOE SHACL Shapes"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:modified "2026-02-11"^^xsd:date ;
    rdfs:comment "SHACL validation shapes for the CAC Sadistic Online Exploitation (SOE) Ontology."@en ;
    owl:imports <https://cacontology.projectvic.org/soe/2.11.0>,
        uco-core: ;
    owl:versionIRI <https://cacontology.projectvic.org/soe/shapes/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-specialized:CountyPoliceSupport a owl:Class ;
    rdfs:label "County Police Support"@en ;
    rdfs:comment "County-level police department providing support to state computer crimes investigations. Modeled as gUFO Organization."@en ;
    rdfs:subClassOf gufo:Organization,
        uco-identity:Organization .

cacontology-specialized:CyberCrimeUnit a owl:Class ;
    rdfs:label "Cyber Crime Unit"@en ;
    rdfs:comment "Unit specialized in cyber crime investigations. Modeled as gUFO Organization."@en ;
    rdfs:subClassOf cacontology-specialized:SpecializedInvestigativeUnit .

cacontology-specialized:DetectionDog a owl:Class ;
    rdfs:label "Detection Dog"@en ;
    rdfs:comment "Trained dog used for detection operations in ICAC investigations. Modeled as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        uco-identity:Identity .

cacontology-specialized:StatePoliceBarrack a owl:Class ;
    rdfs:label "State Police Barrack"@en ;
    rdfs:comment "Regional state police barrack providing local law enforcement support and coordination. Modeled as gUFO Organization."@en ;
    rdfs:subClassOf gufo:Organization,
        uco-identity:Organization .

cacontology-specialized:StatePoliceComputerCrimesUnit a owl:Class ;
    rdfs:label "State Police Computer Crimes Unit"@en ;
    rdfs:comment "State police unit specialized in computer crimes and digital investigations involving child exploitation. Modeled as gUFO Organization."@en ;
    rdfs:subClassOf cacontology-specialized:CyberCrimeUnit .

cacontology-specialized:TherapyDog a owl:Class ;
    rdfs:label "Therapy Dog"@en ;
    rdfs:comment "Trained therapy dog providing emotional support to officers. Modeled as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        uco-identity:Identity .

cacontology-specialized:WellnessCheck a owl:Class ;
    rdfs:label "Wellness Check"@en ;
    rdfs:comment "Regular check on officer mental health and wellbeing. Modeled as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

<https://cacontology.projectvic.org/specialized-units/shapes/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Specialized Units SHACL Shapes"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "SHACL validation shapes for the ICAC Specialized Units Ontology, providing validation for K9 detection programs, officer wellness support, and specialized investigative capabilities."@en ;
    owl:imports <http://purl.org/nemo/gufo>,
        <https://cacontology.projectvic.org/specialized-units/2.11.0>,
        uco-core: ;
    owl:versionIRI <https://cacontology.projectvic.org/specialized-units/shapes/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-street:AlcoholFacilitation a owl:Class ;
    rdfs:label "Alcohol Facilitation"@en ;
    rdfs:comment "Use of alcohol to impair victim judgment and facilitate exploitation."@en ;
    rdfs:subClassOf cacontology-street:DrugFacilitatedVulnerability .

cacontology-street:BodySellingProposition a owl:Class ;
    rdfs:label "Body Selling Proposition"@en ;
    rdfs:comment "Explicit suggestion that victim can make money by 'selling their body'."@en ;
    rdfs:subClassOf cacontology-street:ProstitutionProposition .

cacontology-street:CommercialDistrict a owl:Class ;
    rdfs:label "Commercial District"@en ;
    rdfs:comment "Commercial areas with restaurants, shops, and businesses used for recruitment."@en ;
    rdfs:subClassOf cacontology-street:HighTrafficArea .

cacontology-street:DelayedReporting a owl:Class ;
    rdfs:label "Delayed Reporting"@en ;
    rdfs:comment "Victim reporting that occurs days or weeks after initial incident."@en ;
    rdfs:subClassOf cacontology-street:VictimReporting .

cacontology-street:DemographicTargeting a owl:Class ;
    rdfs:label "Demographic Targeting"@en ;
    rdfs:comment "Targeting individuals based on specific demographic characteristics indicating vulnerability."@en ;
    rdfs:subClassOf cacontology-street:PublicSpaceTargeting .

cacontology-street:DigitalToPhysicalBridge a owl:Class ;
    rdfs:label "Digital to Physical Bridge"@en ;
    rdfs:comment "Use of digital communication to maintain connection after physical encounter."@en ;
    rdfs:subClassOf cacontology-street:DigitalFollowUp .

cacontology-street:DirectSolicitationApproach a owl:Class ;
    rdfs:label "Direct Solicitation Approach"@en ;
    rdfs:comment "Direct approach with immediate commercial sexual proposition."@en ;
    rdfs:subClassOf cacontology-street:InitialStreetContact .

cacontology-street:DisclosureToAuthorities a owl:Class ;
    rdfs:label "Disclosure to Authorities"@en ;
    rdfs:comment "Victim's disclosure of trafficking recruitment or exploitation to law enforcement."@en ;
    rdfs:subClassOf cacontology-street:VictimReporting .

cacontology-street:EscapeAttempt a owl:Class ;
    rdfs:label "Escape Attempt"@en ;
    rdfs:comment "Victim's attempt to escape from trafficking situation or recruitment."@en ;
    rdfs:subClassOf cacontology-street:VictimResistance .

cacontology-street:FoodOfferApproach a owl:Class ;
    rdfs:label "Food Offer Approach"@en ;
    rdfs:comment "Approach offering food or meals to establish trust and create obligation."@en ;
    rdfs:subClassOf cacontology-street:HelpOfferApproach .

cacontology-street:HighwayLocation a owl:Class ;
    rdfs:label "Highway Location"@en ;
    rdfs:comment "Location near or alongside highways used for isolated exploitation."@en ;
    rdfs:subClassOf cacontology-street:IsolatedLocation .

cacontology-street:ImmediateExploitationAttempt a owl:Class ;
    rdfs:label "Immediate Exploitation Attempt"@en ;
    rdfs:comment "Attempt to immediately engage victim in commercial sexual activity without extended grooming."@en ;
    rdfs:subClassOf cacontology-street:DirectTraffickingProposition .

cacontology-street:ImmediateReporting a owl:Class ;
    rdfs:label "Immediate Reporting"@en ;
    rdfs:comment "Victim reporting that occurs immediately or within hours of incident."@en ;
    rdfs:subClassOf cacontology-street:VictimReporting .

cacontology-street:MarijuanaFacilitation a owl:Class ;
    rdfs:label "Marijuana Facilitation"@en ;
    rdfs:comment "Use of marijuana to reduce victim inhibitions and facilitate exploitation."@en ;
    rdfs:subClassOf cacontology-street:DrugFacilitatedVulnerability .

cacontology-street:NeighborhoodTargeting a owl:Class ;
    rdfs:label "Neighborhood Targeting"@en ;
    rdfs:comment "Targeting specific neighborhoods or geographic areas known for vulnerable populations."@en ;
    rdfs:subClassOf cacontology-street:PublicSpaceTargeting .

cacontology-street:NextDayFollowUp a owl:Class ;
    rdfs:label "Next Day Follow Up"@en ;
    rdfs:comment "Follow-up contact occurring the day after initial encounter."@en ;
    rdfs:subClassOf cacontology-street:PostContactReinforcement .

cacontology-street:OpportunisticExploitation a owl:Class ;
    rdfs:label "Opportunistic Exploitation"@en ;
    rdfs:comment "Exploitation of vulnerable individuals encountered in public spaces without prior planning or relationship."@en ;
    rdfs:subClassOf cacontology-street:StreetBasedRecruitment .

cacontology-street:PhoneChargingOffer a owl:Class ;
    rdfs:label "Phone Charging Offer"@en ;
    rdfs:comment "Specific pretext offering to charge victim's phone in vehicle or location."@en ;
    rdfs:subClassOf cacontology-street:HelpOfferApproach .

cacontology-street:SocioeconomicVulnerabilityIndicator a owl:Class ;
    rdfs:label "Socioeconomic Vulnerability Indicator"@en ;
    rdfs:comment "Indicators of economic hardship or social disadvantage (clothing, possessions, location)."@en ;
    rdfs:subClassOf cacontology-street:VulnerabilityIndicator .

cacontology-street:StrippingProposition a owl:Class ;
    rdfs:label "Stripping Proposition"@en ;
    rdfs:comment "Specific proposition to engage in stripping or exotic dancing for money."@en ;
    rdfs:subClassOf cacontology-street:ExplicitCommercialOffer .

cacontology-street:TextMessageFollowUp a owl:Class ;
    rdfs:label "Text Message Follow Up"@en ;
    rdfs:comment "Follow-up through text messaging to reinforce trafficking proposition."@en ;
    rdfs:subClassOf cacontology-street:DigitalFollowUp .

cacontology-street:TransitArea a owl:Class ;
    rdfs:label "Transit Area"@en ;
    rdfs:comment "Transportation hubs or transit areas where vulnerable individuals may be targeted."@en ;
    rdfs:subClassOf cacontology-street:HighTrafficArea .

cacontology-street:VehicleBasedIsolation a owl:Class ;
    rdfs:label "Vehicle Based Isolation"@en ;
    rdfs:comment "Use of vehicle to isolate victim and transport to exploitation location."@en ;
    rdfs:subClassOf cacontology-street:ImmediateIsolation .

cacontology-street:VehicleLocation a owl:Class ;
    rdfs:label "Vehicle Location"@en ;
    rdfs:comment "Vehicle used as location for exploitation or transportation to exploitation site."@en ;
    rdfs:subClassOf cacontology-street:IsolatedLocation .

cacontology-street:VulnerableNeighborhood a owl:Class ;
    rdfs:label "Vulnerable Neighborhood"@en ;
    rdfs:comment "Neighborhood with high poverty, crime, or social vulnerability targeted by traffickers."@en ;
    rdfs:subClassOf cacontology-street:ResidentialArea .

cacontology-street:administrationMethod a owl:DatatypeProperty ;
    rdfs:label "administration method"@en ;
    rdfs:comment "Method of substance administration (offered, forced, shared)."@en ;
    rdfs:domain cacontology-street:DrugFacilitatedVulnerability ;
    rdfs:range xsd:string .

cacontology-street:apparentAge a owl:DatatypeProperty ;
    rdfs:label "apparent age"@en ;
    rdfs:comment "Apparent age of victim as assessed by trafficker."@en ;
    rdfs:domain cacontology-street:AgeVulnerabilityIndicator ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-street:approachMethod a owl:DatatypeProperty ;
    rdfs:label "approach method"@en ;
    rdfs:comment "Method used for initial approach (help_offer, casual_conversation, direct_solicitation)."@en ;
    rdfs:domain cacontology-street:InitialStreetContact ;
    rdfs:range xsd:string .

cacontology-street:assessesVulnerability a owl:ObjectProperty ;
    rdfs:label "assesses vulnerability"@en ;
    rdfs:comment "Links trafficker to vulnerability assessment of potential victim."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range cacontology-street:StreetVulnerabilityAssessment .

cacontology-street:contactDuration a owl:DatatypeProperty ;
    rdfs:label "contact duration"@en ;
    rdfs:comment "Duration of initial street contact in minutes."@en ;
    rdfs:domain cacontology-street:InitialStreetContact ;
    rdfs:range xsd:decimal .

cacontology-street:conversationTopic a owl:DatatypeProperty ;
    rdfs:label "conversation topic"@en ;
    rdfs:comment "Initial conversation topic used to establish rapport."@en ;
    rdfs:domain cacontology-street:CasualConversationApproach ;
    rdfs:range xsd:string .

cacontology-street:distanceFromContact a owl:DatatypeProperty ;
    rdfs:label "distance from contact"@en ;
    rdfs:comment "Distance in miles from initial contact to exploitation location."@en ;
    rdfs:domain cacontology-street:SecondaryLocationExploitation ;
    rdfs:range xsd:decimal .

cacontology-street:distressIndicators a owl:DatatypeProperty ;
    rdfs:label "distress indicators"@en ;
    rdfs:comment "Observable signs of distress or vulnerability."@en ;
    rdfs:domain cacontology-street:BehavioralVulnerabilityIndicator ;
    rdfs:range xsd:string .

cacontology-street:documentsRecruitment a owl:ObjectProperty ;
    rdfs:label "documents recruitment"@en ;
    rdfs:comment "Links evidence to street recruitment activity it documents."@en ;
    rdfs:domain uco-observable:ObservableObject ;
    rdfs:range cacontology-street:StreetBasedRecruitment .

cacontology-street:economicIncentive a owl:DatatypeProperty ;
    rdfs:label "economic incentive"@en ;
    rdfs:comment "Financial incentive presented to victim for commercial sexual activity."@en ;
    rdfs:domain cacontology-street:EconomicIncentivePresentation ;
    rdfs:range xsd:string .

cacontology-street:escalatesTo a owl:ObjectProperty ;
    rdfs:label "escalates to"@en ;
    rdfs:comment "Links initial contact to trafficking proposition escalation."@en ;
    rdfs:domain cacontology-street:InitialStreetContact ;
    rdfs:range cacontology-street:DirectTraffickingProposition .

cacontology-street:escalationTimeframe a owl:DatatypeProperty ;
    rdfs:label "escalation timeframe"@en ;
    rdfs:comment "Time from initial contact to trafficking proposition in hours."@en ;
    rdfs:domain cacontology-street:RapidEscalationRecruitment ;
    rdfs:range xsd:decimal .

cacontology-street:exhibitsIndicator a owl:ObjectProperty ;
    rdfs:label "exhibits indicator"@en ;
    rdfs:comment "Links victim to vulnerability indicator they exhibit."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range cacontology-street:VulnerabilityIndicator .

cacontology-street:explicitnessLevel a owl:DatatypeProperty ;
    rdfs:label "explicitness level"@en ;
    rdfs:comment "Level of explicitness in trafficking proposition (subtle, direct, explicit)."@en ;
    rdfs:domain cacontology-street:DirectTraffickingProposition ;
    rdfs:range xsd:string .

cacontology-street:exploitationLocation a owl:DatatypeProperty ;
    rdfs:label "exploitation location"@en ;
    rdfs:comment "Location where exploitation or assault occurred."@en ;
    rdfs:domain cacontology-street:SecondaryLocationExploitation ;
    rdfs:range xsd:string .

cacontology-street:exploitsVulnerability a owl:ObjectProperty ;
    rdfs:label "exploits vulnerability"@en ;
    rdfs:comment "Links recruitment to vulnerability being exploited."@en ;
    rdfs:domain cacontology-street:StreetBasedRecruitment ;
    rdfs:range cacontology-street:VulnerabilityIndicator .

cacontology-street:facilitatesTransition a owl:ObjectProperty ;
    rdfs:label "facilitates transition"@en ;
    rdfs:comment "Links transportation method to location transition."@en ;
    rdfs:domain cacontology-street:TransportationOfferApproach ;
    rdfs:range cacontology-street:LocationTransition .

cacontology-street:facilitatesWithSubstance a owl:ObjectProperty ;
    rdfs:label "facilitates with substance"@en ;
    rdfs:comment "Links recruitment to substance used for facilitation."@en ;
    rdfs:domain cacontology-street:SubstanceFacilitatedRecruitment ;
    rdfs:range uco-observable:ObservableObject .

cacontology-street:followUpDelay a owl:DatatypeProperty ;
    rdfs:label "follow up delay"@en ;
    rdfs:comment "Time delay between initial contact and follow-up in hours."@en ;
    rdfs:domain cacontology-street:PostContactReinforcement ;
    rdfs:range xsd:decimal .

cacontology-street:followUpMethod a owl:DatatypeProperty ;
    rdfs:label "follow up method"@en ;
    rdfs:comment "Method used for follow-up contact (text, call, social_media, in_person)."@en ;
    rdfs:domain cacontology-street:PostContactReinforcement ;
    rdfs:range xsd:string .

cacontology-street:followsUpWith a owl:ObjectProperty ;
    rdfs:label "follows up with"@en ;
    rdfs:comment "Links trafficker to follow-up contact with victim."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range cacontology-street:PostContactReinforcement .

cacontology-street:helpOfferType a owl:DatatypeProperty ;
    rdfs:label "help offer type"@en ;
    rdfs:comment "Type of assistance offered (phone_charging, food, ride, shelter)."@en ;
    rdfs:domain cacontology-street:HelpOfferApproach ;
    rdfs:range xsd:string .

cacontology-street:impairmentLevel a owl:DatatypeProperty ;
    rdfs:label "impairment level"@en ;
    rdfs:comment "Level of victim impairment from substances (mild, moderate, severe)."@en ;
    rdfs:domain cacontology-street:ImpairmentExploitation ;
    rdfs:range xsd:string .

cacontology-street:initialContactLocation a owl:DatatypeProperty ;
    rdfs:label "initial contact location"@en ;
    rdfs:comment "Specific location where initial contact occurred."@en ;
    rdfs:domain cacontology-street:InitialStreetContact ;
    rdfs:range xsd:string .

cacontology-street:initiatesContact a owl:ObjectProperty ;
    rdfs:label "initiates contact"@en ;
    rdfs:comment "Links trafficker to initial street contact with victim."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range cacontology-street:InitialStreetContact .

cacontology-street:isolatesAt a owl:ObjectProperty ;
    rdfs:label "isolates at"@en ;
    rdfs:comment "Links isolation activity to location used for isolation."@en ;
    rdfs:domain cacontology-street:ImmediateIsolation ;
    rdfs:range cacontology-street:IsolatedLocation .

cacontology-street:isolationLevel a owl:DatatypeProperty ;
    rdfs:label "isolation level"@en ;
    rdfs:comment "Level of victim isolation (alone, with_friends, with_family)."@en ;
    rdfs:domain cacontology-street:IsolationVulnerabilityIndicator ;
    rdfs:range xsd:string .

cacontology-street:makesProposition a owl:ObjectProperty ;
    rdfs:label "makes proposition"@en ;
    rdfs:comment "Links trafficker to trafficking proposition made to victim."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range cacontology-street:DirectTraffickingProposition .

cacontology-street:moneyAmountMentioned a owl:DatatypeProperty ;
    rdfs:label "money amount mentioned"@en ;
    rdfs:comment "Specific amount of money mentioned in trafficking proposition."@en ;
    rdfs:domain cacontology-street:ExplicitCommercialOffer ;
    rdfs:range xsd:decimal .

cacontology-street:occursAt a owl:ObjectProperty ;
    rdfs:label "occurs at"@en ;
    rdfs:comment "Links recruitment activity to location where it occurs."@en ;
    rdfs:domain cacontology-street:StreetBasedRecruitment ;
    rdfs:range cacontology-street:StreetRecruitmentLocation .

cacontology-street:persistenceLevel a owl:DatatypeProperty ;
    rdfs:label "persistence level"@en ;
    rdfs:comment "Level of persistence after initial rejection (low, moderate, high, aggressive)."@en ;
    rdfs:domain cacontology-street:PersistenceAfterRejection ;
    rdfs:range xsd:string .

cacontology-street:persistsAfter a owl:ObjectProperty ;
    rdfs:label "persists after"@en ;
    rdfs:comment "Links persistence to initial rejection being overcome."@en ;
    rdfs:domain cacontology-street:PersistenceAfterRejection ;
    rdfs:range cacontology-street:TraffickingPropositionRejection .

cacontology-street:pretextUsed a owl:DatatypeProperty ;
    rdfs:label "pretext used"@en ;
    rdfs:comment "Specific pretext used for initial contact (phone_charging, food_offer, transportation)."@en ;
    rdfs:domain cacontology-street:PretextBasedApproach ;
    rdfs:range xsd:string .

cacontology-street:propositionType a owl:DatatypeProperty ;
    rdfs:label "proposition type"@en ;
    rdfs:comment "Type of trafficking proposition (stripping, prostitution, body_selling)."@en ;
    rdfs:domain cacontology-street:DirectTraffickingProposition ;
    rdfs:range xsd:string .

cacontology-street:reinforcementAttempts a owl:DatatypeProperty ;
    rdfs:label "reinforcement attempts"@en ;
    rdfs:comment "Number of attempts to reinforce trafficking proposition."@en ;
    rdfs:domain cacontology-street:TraffickingPropositionReinforcement ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-street:reinforces a owl:ObjectProperty ;
    rdfs:label "reinforces"@en ;
    rdfs:comment "Links follow-up contact to trafficking proposition being reinforced."@en ;
    rdfs:domain cacontology-street:PostContactReinforcement ;
    rdfs:range cacontology-street:DirectTraffickingProposition .

cacontology-street:rejects a owl:ObjectProperty ;
    rdfs:label "rejects"@en ;
    rdfs:comment "Links victim to trafficking proposition they reject."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range cacontology-street:DirectTraffickingProposition .

cacontology-street:reportingDelay a owl:DatatypeProperty ;
    rdfs:label "reporting delay"@en ;
    rdfs:comment "Time delay between incident and reporting in hours."@en ;
    rdfs:domain cacontology-street:VictimReporting ;
    rdfs:range xsd:decimal .

cacontology-street:reportingMethod a owl:DatatypeProperty ;
    rdfs:label "reporting method"@en ;
    rdfs:comment "Method used for reporting (police_call, in_person, third_party)."@en ;
    rdfs:domain cacontology-street:VictimReporting ;
    rdfs:range xsd:string .

cacontology-street:reportsTo a owl:ObjectProperty ;
    rdfs:label "reports to"@en ;
    rdfs:comment "Links victim reporting to law enforcement agency."@en ;
    rdfs:domain cacontology-street:VictimReporting ;
    rdfs:range uco-identity:Organization .

cacontology-street:resistanceLevel a owl:DatatypeProperty ;
    rdfs:label "resistance level"@en ;
    rdfs:comment "Level of victim resistance (none, passive, active, aggressive)."@en ;
    rdfs:domain cacontology-street:VictimResistance ;
    rdfs:range xsd:string .

cacontology-street:respondsTo a owl:ObjectProperty ;
    rdfs:label "responds to"@en ;
    rdfs:comment "Links victim response to trafficking proposition."@en ;
    rdfs:domain cacontology-street:VictimStreetResponse ;
    rdfs:range cacontology-street:DirectTraffickingProposition .

cacontology-street:responseType a owl:DatatypeProperty ;
    rdfs:label "response type"@en ;
    rdfs:comment "Type of victim response (acceptance, rejection, resistance, compliance)."@en ;
    rdfs:domain cacontology-street:VictimStreetResponse ;
    rdfs:range xsd:string .

cacontology-street:sameDayProgression a owl:DatatypeProperty ;
    rdfs:label "same day progression"@en ;
    rdfs:comment "Whether recruitment progressed from contact to proposition within same day."@en ;
    rdfs:domain cacontology-street:SameDayProgression ;
    rdfs:range xsd:boolean .

cacontology-street:substanceType a owl:DatatypeProperty ;
    rdfs:label "substance type"@en ;
    rdfs:comment "Type of substance used to facilitate recruitment (marijuana, alcohol, other)."@en ;
    rdfs:domain cacontology-street:SubstanceFacilitatedRecruitment ;
    rdfs:range xsd:string .

cacontology-street:supportsCharge a owl:ObjectProperty ;
    rdfs:label "supports charge"@en ;
    rdfs:comment "Links street recruitment evidence to criminal charges."@en ;
    rdfs:domain cacontology-street:StreetBasedRecruitment ;
    rdfs:range uco-observable:ObservableObject .

cacontology-street:targetsVictim a owl:ObjectProperty ;
    rdfs:label "targets victim"@en ;
    rdfs:comment "Links recruitment activity to victim being targeted."@en ;
    rdfs:domain cacontology-street:StreetBasedRecruitment ;
    rdfs:range uco-identity:Person .

cacontology-street:transitionsTo a owl:ObjectProperty ;
    rdfs:label "transitions to"@en ;
    rdfs:comment "Links initial contact location to exploitation location."@en ;
    rdfs:domain cacontology-street:StreetRecruitmentLocation ;
    rdfs:range cacontology-street:IsolatedLocation .

cacontology-street:transportationMethod a owl:DatatypeProperty ;
    rdfs:label "transportation method"@en ;
    rdfs:comment "Method used to transport victim to exploitation location."@en ;
    rdfs:domain cacontology-street:LocationTransition ;
    rdfs:range xsd:string .

cacontology-street:usesPretext a owl:ObjectProperty ;
    rdfs:label "uses pretext"@en ;
    rdfs:comment "Links initial contact to pretext used for approach."@en ;
    rdfs:domain cacontology-street:InitialStreetContact ;
    rdfs:range cacontology-street:PretextBasedApproach .

cacontology-street:vulnerabilityIndicators a owl:DatatypeProperty ;
    rdfs:label "vulnerability indicators"@en ;
    rdfs:comment "Observable indicators of victim vulnerability (youth, isolation, distress, poverty)."@en ;
    rdfs:domain cacontology-street:StreetVulnerabilityAssessment ;
    rdfs:range xsd:string .

<https://cacontology.projectvic.org/street/shapes/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Street-Based Recruitment SHACL Shapes"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "SHACL validation shapes for the ICAC Street-Based Recruitment & Opportunistic Exploitation Ontology, providing validation for street-based trafficking recruitment, opportunistic exploitation, public space predatory behavior, and related patterns."@en ;
    owl:imports <http://purl.org/nemo/gufo>,
        <https://cacontology.projectvic.org/street/2.11.0>,
        uco-core: ;
    owl:versionIRI <https://cacontology.projectvic.org/street/shapes/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-synthesis:about a owl:ObjectProperty ;
    rdfs:label "about"@en ;
    rdfs:comment "Links a claim to entities/concepts it is about."@en ;
    rdfs:domain cacontology-synthesis:Claim ;
    rdfs:range uco-core:UcoObject .

cacontology-synthesis:category a owl:ObjectProperty ;
    rdfs:label "category"@en ;
    rdfs:comment "Links a distribution observation to its category (type/operation/objective/locus)."@en ;
    rdfs:domain cacontology-synthesis:DistributionObservation ;
    rdfs:range uco-core:UcoObject .

cacontology-synthesis:count a owl:DatatypeProperty ;
    rdfs:label "count"@en ;
    rdfs:comment "Count value reported for a category."@en ;
    rdfs:domain cacontology-synthesis:DistributionObservation ;
    rdfs:range xsd:integer .

cacontology-synthesis:findingNumber a owl:DatatypeProperty ;
    rdfs:label "finding number"@en ;
    rdfs:comment "Ordinal number for a key finding."@en ;
    rdfs:domain cacontology-synthesis:KeyFinding ;
    rdfs:range xsd:integer .

cacontology-synthesis:inReport a owl:ObjectProperty ;
    rdfs:label "in report"@en ;
    rdfs:comment "Optional direct link from a claim/observation to the report containing it."@en ;
    rdfs:domain cacontology-synthesis:Claim ;
    rdfs:range cacontology-synthesis:Report .

cacontology-synthesis:lineEnd a owl:DatatypeProperty ;
    rdfs:label "line end"@en ;
    rdfs:comment "Ending 1-indexed line number in the referenced text artifact."@en ;
    rdfs:domain cacontology-synthesis:TextEvidencePointer ;
    rdfs:range xsd:integer .

cacontology-synthesis:lineStart a owl:DatatypeProperty ;
    rdfs:label "line start"@en ;
    rdfs:comment "Starting 1-indexed line number in the referenced text artifact."@en ;
    rdfs:domain cacontology-synthesis:TextEvidencePointer ;
    rdfs:range xsd:integer .

cacontology-synthesis:pageEnd a owl:DatatypeProperty ;
    rdfs:label "page end"@en ;
    rdfs:comment "Ending page number in the source PDF (when applicable)."@en ;
    rdfs:domain cacontology-synthesis:TextEvidencePointer ;
    rdfs:range xsd:integer .

cacontology-synthesis:pageStart a owl:DatatypeProperty ;
    rdfs:label "page start"@en ;
    rdfs:comment "Starting page number in the source PDF (when applicable)."@en ;
    rdfs:domain cacontology-synthesis:TextEvidencePointer ;
    rdfs:range xsd:integer .

cacontology-synthesis:rank a owl:DatatypeProperty ;
    rdfs:label "rank"@en ;
    rdfs:comment "Rank order when only relative ordering is reported."@en ;
    rdfs:domain cacontology-synthesis:DistributionObservation ;
    rdfs:range xsd:integer .

cacontology-synthesis:recommendationNumber a owl:DatatypeProperty ;
    rdfs:label "recommendation number"@en ;
    rdfs:comment "Ordinal number for a recommendation."@en ;
    rdfs:domain cacontology-synthesis:Recommendation ;
    rdfs:range xsd:integer .

cacontology-synthesis:referencesArtifact a owl:ObjectProperty ;
    rdfs:label "references artifact"@en ;
    rdfs:comment "Links a text evidence pointer to the text artifact it references (e.g., normalized.txt ObservableObject)."@en ;
    rdfs:domain cacontology-synthesis:TextEvidencePointer ;
    rdfs:range uco-observable:ObservableObject .

<https://cacontology.projectvic.org/synthesis/shapes/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Knowledge Synthesis SHACL Shapes"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:modified "2026-02-20"^^xsd:date ;
    rdfs:comment "Minimal SHACL shapes for validating report/claim/evidence-pointer patterns used in knowledge-synthesis example graphs."@en ;
    owl:imports sh:,
        <https://cacontology.projectvic.org/synthesis/2.11.0> ;
    owl:versionIRI <https://cacontology.projectvic.org/synthesis/shapes/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-tactical:ProtectiveGear a owl:Class ;
    rdfs:label "Protective Gear"@en ;
    rdfs:comment "Armor and protective equipment for tactical team members."@en ;
    rdfs:subClassOf cacontology-tactical:TacticalEquipment .

cacontology-tactical:TacticalCommander a owl:Class ;
    rdfs:label "Tactical Commander"@en ;
    rdfs:comment "Senior officer responsible for overall tactical operation command."@en ;
    rdfs:subClassOf uco-role:Role .

cacontology-tactical:TrafficStop a owl:Class ;
    rdfs:label "Traffic Stop"@en ;
    rdfs:comment "Investigative traffic stop used as part of undercover operation or to apprehend suspect. Extends investigation:InvestigativeAction."@en ;
    rdfs:subClassOf gufo:Event,
        case-investigation:InvestigativeAction .

cacontology-tactical:arrestType a owl:DatatypeProperty ;
    rdfs:label "arrest type"@en ;
    rdfs:comment "Type of arrest (warrant_arrest, probable_cause_arrest, consensual_arrest, traffic_stop_arrest, field_arrest, coordinated_arrest)."@en ;
    rdfs:domain cacontology-tactical:ArrestOperation ;
    rdfs:range xsd:string .

cacontology-tactical:entryMethod a owl:DatatypeProperty ;
    rdfs:label "entry method"@en ;
    rdfs:comment "Method used to gain entry (dynamic, deliberate, negotiated, stealth)."@en ;
    rdfs:domain cacontology-tactical:TacticalOperation ;
    rdfs:range xsd:string .

cacontology-tactical:equipmentType a owl:DatatypeProperty ;
    rdfs:label "equipment type"@en ;
    rdfs:comment "Category of tactical equipment."@en ;
    rdfs:domain cacontology-tactical:TacticalEquipment ;
    rdfs:range xsd:string .

cacontology-tactical:forceUsed a owl:DatatypeProperty ;
    rdfs:label "force used"@en ;
    rdfs:comment "Level of force employed (none, minimal, moderate, significant)."@en ;
    rdfs:domain cacontology-tactical:TacticalOperation ;
    rdfs:range xsd:string .

cacontology-tactical:immigrationStatus a owl:DatatypeProperty ;
    rdfs:label "immigration status"@en ;
    rdfs:comment "Immigration status of the suspect."@en ;
    rdfs:domain cacontology-tactical:ImmigrationHold ;
    rdfs:range xsd:string .

cacontology-tactical:operationType a owl:DatatypeProperty ;
    rdfs:label "operation type"@en ;
    rdfs:comment "Type of tactical operation (raid, arrest, rescue, standoff_resolution)."@en ;
    rdfs:domain cacontology-tactical:TacticalOperation ;
    rdfs:range xsd:string .

cacontology-tactical:planningDuration a owl:DatatypeProperty ;
    rdfs:label "planning duration"@en ;
    rdfs:comment "Time spent planning the tactical operation (in hours)."@en ;
    rdfs:domain cacontology-tactical:TacticalOperation ;
    rdfs:range xsd:decimal .

cacontology-tactical:resistanceExpected a owl:DatatypeProperty ;
    rdfs:label "resistance expected"@en ;
    rdfs:comment "Whether resistance was expected during arrest."@en ;
    rdfs:domain cacontology-tactical:ArrestOperation ;
    rdfs:range xsd:boolean .

cacontology-tactical:riskLevel a owl:DatatypeProperty ;
    rdfs:label "risk level"@en ;
    rdfs:comment "Assessed risk level of the operation (low, medium, high, extreme)."@en ;
    rdfs:domain cacontology-tactical:TacticalOperation ;
    rdfs:range xsd:string .

cacontology-tactical:teamSize a owl:DatatypeProperty ;
    rdfs:label "team size"@en ;
    rdfs:comment "Number of tactical team members deployed."@en ;
    rdfs:domain cacontology-tactical:TacticalOperation ;
    rdfs:range xsd:integer .

cacontology-tactical:weaponsExpected a owl:DatatypeProperty ;
    rdfs:label "weapons expected"@en ;
    rdfs:comment "Whether weapons were expected during arrest."@en ;
    rdfs:domain cacontology-tactical:ArrestOperation ;
    rdfs:range xsd:boolean .

<https://cacontology.projectvic.org/tactical/shapes/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Tactical Operations SHACL Shapes"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:modified "2026-01-01"^^xsd:date ;
    rdfs:comment "SHACL validation shapes for the ICAC Tactical Operations Ontology, providing validation for SWAT operations, high-risk arrests, and specialized tactical procedures."@en ;
    owl:imports <http://purl.org/nemo/gufo>,
        <https://cacontology.projectvic.org/tactical/2.11.0>,
        uco-core: ;
    owl:versionIRI <https://cacontology.projectvic.org/tactical/shapes/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-taskforce:HistoricalMetrics a owl:Class ;
    rdfs:label "Historical Metrics"@en ;
    rdfs:comment "Long-term historical performance data for task force operations."@en ;
    rdfs:subClassOf cacontology-taskforce:TaskForceMetrics .

cacontology-taskforce:JointOperation a owl:Class ;
    rdfs:label "Joint Operation"@en ;
    rdfs:comment "Operation involving multiple task forces or agencies."@en ;
    rdfs:subClassOf cacontology-taskforce:TaskForceOperation .

cacontology-taskforce:TaskForceCoordinator a gufo:Role,
        owl:Class ;
    rdfs:label "Task Force Coordinator"@en ;
    rdfs:comment "Coordinator responsible for inter-agency cooperation and resource management."@en ;
    rdfs:subClassOf cacontology-taskforce:TaskForceMember .

cacontology-taskforce:coordinationLevel a owl:DatatypeProperty ;
    rdfs:label "coordination level"@en ;
    rdfs:comment "Level of coordination (local, county, state, federal)."@en ;
    rdfs:domain cacontology-taskforce:NetworkPerformance ;
    rdfs:range xsd:string .

cacontology-taskforce:establishmentDate a owl:DatatypeProperty ;
    rdfs:label "establishment date"@en ;
    rdfs:comment "Date when the task force was established."@en ;
    rdfs:domain cacontology-taskforce:ICACtaskForce ;
    rdfs:range xsd:dateTime .

cacontology-taskforce:hasMember a owl:ObjectProperty ;
    rdfs:label "has member"@en ;
    rdfs:comment "Links task force to its members."@en ;
    rdfs:domain cacontology-taskforce:ICACtaskForce ;
    rdfs:range cacontology-taskforce:TaskForceMember .

cacontology-taskforce:memberRole a owl:DatatypeProperty ;
    rdfs:label "member role"@en ;
    rdfs:comment "Role within the task force (commander, coordinator, investigator, analyst, examiner)."@en ;
    rdfs:domain cacontology-taskforce:TaskForceMember ;
    rdfs:range xsd:string .

cacontology-taskforce:operationDuration a owl:DatatypeProperty ;
    rdfs:label "operation duration"@en ;
    rdfs:comment "Duration of operation in days."@en ;
    rdfs:domain cacontology-taskforce:TaskForceOperation ;
    rdfs:range xsd:integer .

cacontology-taskforce:operationType a owl:DatatypeProperty ;
    rdfs:label "operation type"@en ;
    rdfs:comment "Type of task force operation (joint, sweep, proactive, reactive)."@en ;
    rdfs:domain cacontology-taskforce:TaskForceOperation ;
    rdfs:range xsd:string .

cacontology-taskforce:providesTraining a owl:ObjectProperty ;
    rdfs:label "provides training"@en ;
    rdfs:comment "Links task force to training programs it provides."@en ;
    rdfs:domain cacontology-taskforce:ICACtaskForce ;
    rdfs:range cacontology-taskforce:TaskForceTraining .

cacontology-taskforce:trainingDuration a owl:DatatypeProperty ;
    rdfs:label "training duration"@en ;
    rdfs:comment "Duration of training in hours."@en ;
    rdfs:domain cacontology-taskforce:TaskForceTraining ;
    rdfs:range xsd:integer .

cacontology-taskforce:trainingType a owl:DatatypeProperty ;
    rdfs:label "training type"@en ;
    rdfs:comment "Type of training (basic, advanced, specialized, certification)."@en ;
    rdfs:domain cacontology-taskforce:TaskForceTraining ;
    rdfs:range xsd:string .

<https://cacontology.projectvic.org/taskforce/shapes/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Task Force SHACL Shapes"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "SHACL validation shapes for the ICAC Task Force Ontology, providing validation for task force structures, specialized units, coordination mechanisms, resource sharing, and joint operations."@en ;
    owl:imports <http://purl.org/nemo/gufo>,
        <https://cacontology.projectvic.org/taskforce/2.11.0>,
        uco-core: ;
    owl:versionIRI <https://cacontology.projectvic.org/taskforce/shapes/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-temporal:ageSubject a owl:ObjectProperty ;
    rdfs:label "age subject"@en ;
    rdfs:comment "Links an Age At Time Situation to the person whose age is being asserted in that situation."@en ;
    rdfs:domain cacontology-temporal:AgeAtTimeSituation ;
    rdfs:range uco-identity:Person .

cacontology-temporal:concernsAgeQuality a owl:ObjectProperty ;
    rdfs:label "concerns age quality"@en ;
    rdfs:comment "Specialization of gufo:concernsQualityType making explicit that an Age At Time Situation attributes a value for the Age quality type."@en ;
    rdfs:domain cacontology-temporal:AgeAtTimeSituation ;
    rdfs:range cacontology-temporal:Age ;
    rdfs:subPropertyOf gufo:concernsQualityType .

cacontology-temporal:createsSuspension a owl:ObjectProperty ;
    rdfs:label "creates suspension"@en ;
    rdfs:comment "Links suspension event to suspended situation it creates."@en ;
    rdfs:domain cacontology-temporal:SuspensionEvent ;
    rdfs:range cacontology-temporal:SuspendedSituation .

cacontology-temporal:hasAgeInYears a owl:DatatypeProperty ;
    rdfs:label "has age in years"@en ;
    rdfs:comment "Numeric age in years attributed to a person in an Age At Time Situation (non-negative, may be fractional for finer-grained analytics)."@en ;
    rdfs:domain cacontology-temporal:AgeAtTimeSituation ;
    rdfs:range xsd:decimal ;
    rdfs:subPropertyOf gufo:concernsQualityValue .

cacontology-temporal:hasLegalDeadline a owl:DatatypeProperty ;
    rdfs:label "has legal deadline"@en ;
    rdfs:comment "Legal deadline by which investigation phase must be completed (e.g., statute of limitations, warrant expiration)."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:dateTimeStamp .

cacontology-temporal:hasMaximumDuration a owl:DatatypeProperty ;
    rdfs:label "has maximum duration"@en ;
    rdfs:comment "Maximum allowable duration for investigation phase based on legal or policy constraints."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:duration .

cacontology-temporal:hasMinimumDuration a owl:DatatypeProperty ;
    rdfs:label "has minimum duration"@en ;
    rdfs:comment "Minimum required duration for investigation phase based on legal or procedural requirements."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:duration .

cacontology-temporal:hasTypicalDuration a owl:DatatypeProperty ;
    rdfs:label "has typical duration"@en ;
    rdfs:comment "Typical expected duration for investigation phase based on historical patterns."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:duration .

cacontology-temporal:phaseCompletionRate a owl:DatatypeProperty ;
    rdfs:label "phase completion rate"@en ;
    rdfs:comment "Percentage of phase objectives completed within time period (0.0-1.0)."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:decimal .

cacontology-temporal:phaseEfficiency a owl:DatatypeProperty ;
    rdfs:label "phase efficiency"@en ;
    rdfs:comment "Efficiency ratio of phase (actual duration / typical duration)."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:decimal .

cacontology-temporal:resumes a owl:ObjectProperty ;
    rdfs:label "resumes"@en ;
    rdfs:comment "Links resumption event to investigation it resumes."@en ;
    rdfs:domain cacontology-temporal:ResumptionEvent ;
    rdfs:range cacontology-gufo:Investigation .

cacontology-temporal:suspends a owl:ObjectProperty ;
    rdfs:label "suspends"@en ;
    rdfs:comment "Links suspension event to investigation it suspends."@en ;
    rdfs:domain cacontology-temporal:SuspensionEvent ;
    rdfs:range cacontology-gufo:Investigation .

cacontology-temporal:terminatesSuspension a owl:ObjectProperty ;
    rdfs:label "terminates suspension"@en ;
    rdfs:comment "Links resumption event to suspended situation it terminates."@en ;
    rdfs:domain cacontology-temporal:ResumptionEvent ;
    rdfs:range cacontology-temporal:SuspendedSituation .

cacontology-temporal:urgencyLevel a owl:DatatypeProperty ;
    rdfs:label "urgency level"@en ;
    rdfs:comment "Urgency level of investigation phase (1-5 scale, 5=critical/immediate)."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:integer .

<https://cacontology.projectvic.org/temporal/shapes/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Temporal gUFO SHACL Shapes - Minimal Core"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:issued "2025-11-18"^^xsd:date ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "Minimal SHACL validation shapes for CAC temporal gUFO extensions, focusing on phase duration/deadline properties and role/phase transition relationships."@en ;
    owl:imports <http://purl.org/nemo/gufo>,
        <https://cacontology.projectvic.org/temporal/2.11.0> ;
    owl:versionIRI <https://cacontology.projectvic.org/temporal/shapes/2.11.0> .

cacontology-trafficking:controlsVictim a owl:ObjectProperty ;
    rdfs:label "controls victim"@en ;
    rdfs:comment "Links trafficker role to victim role under their control."@en ;
    rdfs:domain cacontology-trafficking:TraffickerRole ;
    rdfs:range cacontology-trafficking:TraffickingVictimRole .

cacontology-trafficking:destinationLocation a owl:ObjectProperty ;
    rdfs:label "destination location"@en ;
    rdfs:comment "Destination location for victim transportation event."@en ;
    rdfs:domain cacontology-trafficking:VictimTransportation ;
    rdfs:range uco-location:Location .

cacontology-trafficking:earningsAmount a owl:DatatypeProperty ;
    rdfs:label "earnings amount"@en ;
    rdfs:comment "Dollar amount collected from victim exploitation."@en ;
    rdfs:domain cacontology-trafficking:EarningsCollection ;
    rdfs:range xsd:decimal .

cacontology-trafficking:earningsPeriod a owl:DatatypeProperty ;
    rdfs:label "earnings period"@en ;
    rdfs:comment "Time period over which earnings were collected."@en ;
    rdfs:domain cacontology-trafficking:EarningsCollection ;
    rdfs:range xsd:duration .

cacontology-trafficking:enterpriseDuration a owl:DatatypeProperty ;
    rdfs:label "enterprise duration"@en ;
    rdfs:comment "Duration of trafficking enterprise operations."@en ;
    rdfs:domain gufo:Organization ;
    rdfs:range xsd:duration .

cacontology-trafficking:hasEnterpriseBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has enterprise begin point"@en ;
    rdfs:comment "Temporal begin point for trafficking enterprise operations."@en ;
    rdfs:domain gufo:Organization ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-trafficking:hasEnterpriseEndPoint a owl:DatatypeProperty ;
    rdfs:label "has enterprise end point"@en ;
    rdfs:comment "Temporal end point for trafficking enterprise operations."@en ;
    rdfs:domain gufo:Organization ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-trafficking:hasHierarchyLevel a owl:DatatypeProperty ;
    rdfs:label "has hierarchy level"@en ;
    rdfs:comment "Numerical hierarchy level within trafficking enterprise (1=top level)."@en ;
    rdfs:domain gufo:Role ;
    rdfs:range xsd:integer .

cacontology-trafficking:hasRoleBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has role begin point"@en ;
    rdfs:comment "Temporal begin point for trafficking role."@en ;
    rdfs:domain gufo:Role ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-trafficking:hasRoleEndPoint a owl:DatatypeProperty ;
    rdfs:label "has role end point"@en ;
    rdfs:comment "Temporal end point for trafficking role."@en ;
    rdfs:domain gufo:Role ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-trafficking:involvesJurisdictionCount a owl:DatatypeProperty ;
    rdfs:label "involves jurisdiction count"@en ;
    rdfs:comment "Number of jurisdictions involved in trafficking situation."@en ;
    rdfs:domain cacontology-trafficking:MultiJurisdictionalSituation ;
    rdfs:range xsd:integer .

cacontology-trafficking:involvesTraffickerCount a owl:DatatypeProperty ;
    rdfs:label "involves trafficker count"@en ;
    rdfs:comment "Number of traffickers involved in trafficking situation."@en ;
    rdfs:domain gufo:Situation ;
    rdfs:range xsd:integer .

cacontology-trafficking:involvesVictimCount a owl:DatatypeProperty ;
    rdfs:label "involves victim count"@en ;
    rdfs:comment "Number of victims involved in trafficking situation."@en ;
    rdfs:domain gufo:Situation ;
    rdfs:range xsd:integer .

cacontology-trafficking:operatesInJurisdiction a owl:ObjectProperty ;
    rdfs:label "operates in jurisdiction"@en ;
    rdfs:comment "Links trafficking organization to jurisdictions where it operates."@en ;
    rdfs:domain gufo:Organization ;
    rdfs:range uco-location:Location .

cacontology-trafficking:originLocation a owl:ObjectProperty ;
    rdfs:label "origin location"@en ;
    rdfs:comment "Starting location for victim transportation event."@en ;
    rdfs:domain cacontology-trafficking:VictimTransportation ;
    rdfs:range uco-location:Location .

cacontology-trafficking:situationComplexity a owl:DatatypeProperty ;
    rdfs:label "situation complexity"@en ;
    rdfs:comment "Complexity level of trafficking situation (1-5 scale)."@en ;
    rdfs:domain gufo:Situation ;
    rdfs:range xsd:integer .

cacontology-trafficking:transportationMethod a owl:ObjectProperty ;
    rdfs:label "transportation method"@en ;
    rdfs:comment "Method or vehicle used for victim transportation."@en ;
    rdfs:domain cacontology-trafficking:VictimTransportation ;
    rdfs:range uco-core:UcoObject .

<https://cacontology.projectvic.org/trafficking/shapes/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Sex Trafficking SHACL Shapes - Minimal Core"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:issued "2025-11-18"^^xsd:date ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "Minimal SHACL validation shapes for the CAC Sex Trafficking Ontology, focusing on core gUFO-aligned structures (organizations, roles, events) and key temporal and quantitative properties."@en ;
    owl:imports <http://purl.org/nemo/gufo>,
        <https://cacontology.projectvic.org/trafficking/2.11.0> ;
    owl:versionIRI <https://cacontology.projectvic.org/trafficking/shapes/2.11.0> .

cacontology-training:CapacityBuildingPartner a owl:Class ;
    rdfs:label "Capacity Building Partner"@en ;
    rdfs:comment "Partner organization supporting capacity building efforts. Modeled as gUFO Organization."@en ;
    rdfs:subClassOf gufo:Organization,
        uco-identity:Organization .

cacontology-training:CertificationBody a owl:Class ;
    rdfs:label "Certification Body"@en ;
    rdfs:comment "Organization responsible for professional certification. Modeled as gUFO Organization."@en ;
    rdfs:subClassOf gufo:Organization,
        uco-identity:Organization .

cacontology-training:ChildProtectionTraining a owl:Class ;
    rdfs:label "Child Protection Training"@en ;
    rdfs:comment "Training focused on child protection methodologies. Modeled as gUFO Event."@en ;
    rdfs:subClassOf cacontology-training:InternationalTraining .

cacontology-training:ContinuingEducation a owl:Class ;
    rdfs:label "Continuing Education"@en ;
    rdfs:comment "Ongoing education for certified professionals. Modeled as gUFO Organization."@en ;
    rdfs:subClassOf cacontology-training:CapacityBuildingProgram .

cacontology-training:HotlineTraining a owl:Class ;
    rdfs:label "Hotline Training"@en ;
    rdfs:comment "Training for hotline operators and managers. Modeled as gUFO Event."@en ;
    rdfs:subClassOf cacontology-training:InternationalTraining .

cacontology-training:InvestigationTraining a owl:Class ;
    rdfs:label "Investigation Training"@en ;
    rdfs:comment "Training on investigation methodologies and techniques. Modeled as gUFO Event."@en ;
    rdfs:subClassOf cacontology-training:InternationalTraining .

cacontology-training:LegalTraining a owl:Class ;
    rdfs:label "Legal Training"@en ;
    rdfs:comment "Training on legal aspects of child protection. Modeled as gUFO Event."@en ;
    rdfs:subClassOf cacontology-training:InternationalTraining .

cacontology-training:MentorshipProgram a owl:Class ;
    rdfs:label "Mentorship Program"@en ;
    rdfs:comment "One-on-one mentorship for professional development. Modeled as gUFO Organization."@en ;
    rdfs:subClassOf cacontology-training:CapacityBuildingProgram .

cacontology-training:ProfessionalDevelopment a owl:Class ;
    rdfs:label "Professional Development"@en ;
    rdfs:comment "Career development for child protection professionals. Modeled as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-training:SkillsDevelopmentProgram a owl:Class ;
    rdfs:label "Skills Development Program"@en ;
    rdfs:comment "Program focused on developing specific professional skills. Modeled as gUFO Organization."@en ;
    rdfs:subClassOf cacontology-training:CapacityBuildingProgram .

cacontology-training:TrainingCertificate a owl:Class ;
    rdfs:label "Training Certificate"@en ;
    rdfs:comment "Certificate awarded upon successful completion of training. Modeled as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-training:VictimServiceTraining a owl:Class ;
    rdfs:label "Victim Service Training"@en ;
    rdfs:comment "Training for professionals providing victim services. Modeled as gUFO Event."@en ;
    rdfs:subClassOf cacontology-training:InternationalTraining .

cacontology-training:certificationStatus a owl:DatatypeProperty ;
    rdfs:label "certification status"@en ;
    rdfs:comment "Status of professional certification (active, expired, suspended)."@en ;
    rdfs:domain cacontology-training:ProfessionalCertification ;
    rdfs:range xsd:string .

cacontology-training:certificationValidityPeriod a owl:DatatypeProperty ;
    rdfs:label "certification validity period"@en ;
    rdfs:comment "Validity period of certification in months."@en ;
    rdfs:domain cacontology-training:ProfessionalCertification ;
    rdfs:range xsd:decimal .

cacontology-training:competencyLevel a owl:DatatypeProperty ;
    rdfs:label "competency level"@en ;
    rdfs:comment "Level of competency achieved (novice, competent, proficient, expert)."@en ;
    rdfs:domain cacontology-training:CompetencyAssessment ;
    rdfs:range xsd:string .

cacontology-training:completionRate a owl:DatatypeProperty ;
    rdfs:label "completion rate"@en ;
    rdfs:comment "Rate of completion for training program (0.0-1.0)."@en ;
    rdfs:domain cacontology-training:InternationalTraining ;
    rdfs:range xsd:decimal .

cacontology-training:k9PublicPresentations a owl:DatatypeProperty ;
    rdfs:label "K9 public presentations"@en ;
    rdfs:comment "Number of public presentations featuring K9 units."@en ;
    rdfs:domain cacontology-training:K9ProgramMetrics ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-training:k9SearchWarrantsAssisted a owl:DatatypeProperty ;
    rdfs:label "K9 search warrants assisted"@en ;
    rdfs:comment "Number of search warrants where K9 units provided assistance."@en ;
    rdfs:domain cacontology-training:K9ProgramMetrics ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-training:operationalDeploymentCount a owl:DatatypeProperty ;
    rdfs:label "operational deployment count"@en ;
    rdfs:comment "Number of times training was applied in operational deployments."@en ;
    rdfs:domain cacontology-training:OperationalTrainingMetrics ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-training:outreachEventsCount a owl:DatatypeProperty ;
    rdfs:label "outreach events count"@en ;
    rdfs:comment "Number of community outreach events conducted."@en ;
    rdfs:domain cacontology-training:OutreachEventMetrics ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-training:participationRate a owl:DatatypeProperty ;
    rdfs:label "participation rate"@en ;
    rdfs:comment "Rate of participation in training program (0.0-1.0)."@en ;
    rdfs:domain cacontology-training:InternationalTraining ;
    rdfs:range xsd:decimal .

cacontology-training:professionalsTrained a owl:DatatypeProperty ;
    rdfs:label "professionals trained"@en ;
    rdfs:comment "Total number of professionals trained."@en ;
    rdfs:domain cacontology-training:GlobalTrainingReach ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-training:professionalsTrainedCount a owl:DatatypeProperty ;
    rdfs:label "professionals trained count"@en ;
    rdfs:comment "Number of professionals trained in specialized programs."@en ;
    rdfs:domain cacontology-training:ProfessionalTrainingMetrics ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-training:skillsAcquired a owl:DatatypeProperty ;
    rdfs:label "skills acquired"@en ;
    rdfs:comment "Description of skills acquired through training."@en ;
    rdfs:domain cacontology-training:SkillsValidation ;
    rdfs:range xsd:string .

cacontology-training:totalAttendeesReached a owl:DatatypeProperty ;
    rdfs:label "total attendees reached"@en ;
    rdfs:comment "Total number of community members reached through outreach events."@en ;
    rdfs:domain cacontology-training:OutreachEventMetrics ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-training:trainingEffectiveness a owl:DatatypeProperty ;
    rdfs:label "training effectiveness"@en ;
    rdfs:comment "Effectiveness score of training program (0.0-1.0)."@en ;
    rdfs:domain cacontology-training:TrainingEffectiveness ;
    rdfs:range xsd:decimal .

cacontology-training:trainingLanguage a owl:DatatypeProperty ;
    rdfs:label "training language"@en ;
    rdfs:comment "Language in which training is delivered."@en ;
    rdfs:domain cacontology-training:InternationalTraining ;
    rdfs:range xsd:string .

cacontology-training:trainingToOperationEffectiveness a owl:DatatypeProperty ;
    rdfs:label "training to operation effectiveness"@en ;
    rdfs:comment "Effectiveness ratio of training application in operations (0.0-1.0)."@en ;
    rdfs:domain cacontology-training:OperationalTrainingMetrics ;
    rdfs:range xsd:decimal .

<https://cacontology.projectvic.org/training/shapes/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Training SHACL Shapes"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "SHACL validation shapes for the ICAC Training Ontology, providing validation for professional development, training programs, and capacity building initiatives."@en ;
    owl:imports <http://purl.org/nemo/gufo>,
        <https://cacontology.projectvic.org/training/2.11.0>,
        uco-core: ;
    owl:versionIRI <https://cacontology.projectvic.org/training/shapes/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-undercover:ApartmentStingOperation a owl:Class ;
    rdfs:label "Apartment Sting Operation"@en ;
    rdfs:comment "Undercover operation using residential apartment as location for sting operation targeting trafficking clients."@en ;
    rdfs:subClassOf cacontology-undercover:PhysicalLocationSting .

cacontology-undercover:Hotel a owl:Class ;
    rdfs:label "Hotel"@en ;
    rdfs:comment "Hotel used or intended for sexual exploitation of minors. Physical location."@en ;
    rdfs:subClassOf cacontology-undercover:MeetingLocation .

cacontology-undercover:LiveAdvertisementMonitoring a owl:Class ;
    rdfs:label "Live Advertisement Monitoring"@en ;
    rdfs:comment "Real-time monitoring of trafficking advertisements to identify and respond to active postings."@en ;
    rdfs:subClassOf cacontology-undercover:WebsiteAdvertisementResponse .

cacontology-undercover:Motel a owl:Class ;
    rdfs:label "Motel"@en ;
    rdfs:comment "Motel used or intended for sexual exploitation of minors (e.g., 'Princess Motel'). Physical location."@en ;
    rdfs:subClassOf cacontology-undercover:MeetingLocation .

cacontology-undercover:MultiPlatformUndercoverOperation a owl:Class ;
    rdfs:label "Multi Platform Undercover Operation"@en ;
    rdfs:comment "Undercover operation conducted across multiple social media platforms simultaneously."@en ;
    rdfs:subClassOf cacontology-undercover:SocialMediaUndercoverOperation .

cacontology-undercover:OperationHandler a gufo:Role,
        owl:Class ;
    rdfs:label "Operation Handler"@en ;
    rdfs:comment "Supervising officer responsible for managing undercover operations and agent safety."@en ;
    rdfs:subClassOf uco-role:Role .

cacontology-undercover:PlatformAccount a owl:Class ;
    rdfs:label "Platform Account"@en ;
    rdfs:comment "Account created on digital platforms for undercover operations."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:DigitalAccount .

cacontology-undercover:ShortTermRental a owl:Class ;
    rdfs:label "Short Term Rental"@en ;
    rdfs:comment "Short-term rental property (Airbnb, VRBO, etc.) used for sexual exploitation. Physical location."@en ;
    rdfs:subClassOf cacontology-undercover:MeetingLocation .

cacontology-undercover:SurveillancePosition a owl:Class ;
    rdfs:label "Surveillance Position"@en ;
    rdfs:comment "Position maintained by backup officers for observation and safety during physical sting operations."@en ;
    rdfs:subClassOf uco-location:Location .

cacontology-undercover:acknowledgedCount a owl:DatatypeProperty ;
    rdfs:label "acknowledged count"@en ;
    rdfs:comment "Number of times suspect acknowledged the stated age."@en ;
    rdfs:domain cacontology-undercover:AgeAcknowledgment ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-undercover:ageStatedToSuspect a owl:DatatypeProperty ;
    rdfs:label "age stated to suspect"@en ;
    rdfs:comment "Age that was explicitly stated to the suspect."@en ;
    rdfs:domain cacontology-undercover:AgeAcknowledgment ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-undercover:arrangedForMeeting a owl:ObjectProperty ;
    rdfs:label "arranged for meeting"@en ;
    rdfs:comment "Links a meeting location arrangement action to the meeting location."@en ;
    rdfs:domain cacontology-undercover:MeetingLocationArrangement ;
    rdfs:range cacontology-undercover:MeetingLocation .

cacontology-undercover:arrangedTime a owl:DatatypeProperty ;
    rdfs:label "arranged time"@en ;
    rdfs:comment "Date and time arranged for meeting."@en ;
    rdfs:domain cacontology-undercover:MeetingLocation ;
    rdfs:range xsd:dateTime .

cacontology-undercover:destinationLocation a owl:DatatypeProperty ;
    rdfs:label "destination location"@en ;
    rdfs:comment "Destination where suspect planned to take alleged minor (motel, hotel, residence)."@en ;
    rdfs:domain cacontology-undercover:TransportArrangementAction ;
    rdfs:range xsd:string .

cacontology-undercover:disguiseItemRequested a owl:DatatypeProperty ;
    rdfs:label "disguise item requested"@en ;
    rdfs:comment "Item requested for disguise (sunglasses, hat, hoodie)."@en ;
    rdfs:domain cacontology-undercover:DisguiseRequestAction ;
    rdfs:range xsd:string .

cacontology-undercover:disguisePurpose a owl:DatatypeProperty ;
    rdfs:label "disguise purpose"@en ;
    rdfs:comment "Stated or implied purpose for disguise request (avoid_detection, conceal_identity)."@en ;
    rdfs:domain cacontology-undercover:DisguiseRequestAction ;
    rdfs:range xsd:string .

cacontology-undercover:itemsAgreedToBring a owl:DatatypeProperty ;
    rdfs:label "items agreed to bring"@en ;
    rdfs:comment "Items suspect agreed to bring (condoms, vape, alcohol, etc.)."@en ;
    rdfs:domain cacontology-undercover:CriminalItemAgreementAction ;
    rdfs:range xsd:string .

cacontology-undercover:locationName a owl:DatatypeProperty ;
    rdfs:label "location name"@en ;
    rdfs:comment "Name of the meeting location (e.g., 'Princess Motel')."@en ;
    rdfs:domain cacontology-undercover:MeetingLocation ;
    rdfs:range xsd:string .

cacontology-undercover:meetingLocationName a owl:DatatypeProperty ;
    rdfs:label "meeting location name"@en ;
    rdfs:comment "Name of specific meeting location (e.g., 'Princess Motel')."@en ;
    rdfs:domain cacontology-undercover:MeetingLocationArrangement ;
    rdfs:range xsd:string .

cacontology-undercover:meetingLocationType a owl:DatatypeProperty ;
    rdfs:label "meeting location type"@en ;
    rdfs:comment "Type of meeting location arranged (motel, hotel, residence, vehicle, outdoor)."@en ;
    rdfs:domain cacontology-undercover:MeetingLocationArrangement ;
    rdfs:range xsd:string .

cacontology-undercover:occurredDuringOperation a owl:ObjectProperty ;
    rdfs:label "occurred during operation"@en ;
    rdfs:comment "Links suspect communication action to the undercover operation."@en ;
    rdfs:domain cacontology-undercover:SuspectCommunicationAction ;
    rdfs:range cacontology-undercover:UndercoverOperation .

cacontology-undercover:personaCount a owl:DatatypeProperty ;
    rdfs:label "persona count"@en ;
    rdfs:comment "Number of distinct minor personas used in the operation."@en ;
    rdfs:domain cacontology-undercover:MultiplePersonaOperation ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-undercover:pickupLocation a owl:DatatypeProperty ;
    rdfs:label "pickup location"@en ;
    rdfs:comment "Location where suspect agreed to pick up alleged minor."@en ;
    rdfs:domain cacontology-undercover:TransportArrangementAction ;
    rdfs:range xsd:string .

cacontology-undercover:primaryPersonaAge a owl:DatatypeProperty ;
    rdfs:label "primary persona age"@en ;
    rdfs:comment "Age of the primary minor persona."@en ;
    rdfs:domain cacontology-undercover:MultiplePersonaOperation ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-undercover:requestType a owl:DatatypeProperty ;
    rdfs:label "request type"@en ;
    rdfs:comment "Type of explicit content requested (images, videos, video_call)."@en ;
    rdfs:domain cacontology-undercover:ExplicitMessageRequestAction ;
    rdfs:range xsd:string .

cacontology-undercover:roomNumber a owl:DatatypeProperty ;
    rdfs:label "room number"@en ;
    rdfs:comment "Room or unit number at the meeting location."@en ;
    rdfs:domain cacontology-undercover:MeetingLocation ;
    rdfs:range xsd:string .

cacontology-undercover:secondaryPersonaAge a owl:DatatypeProperty ;
    rdfs:label "secondary persona age"@en ;
    rdfs:comment "Age of the secondary minor persona (e.g., younger sibling)."@en ;
    rdfs:domain cacontology-undercover:MultiplePersonaOperation ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-undercover:sexualActsIntended a owl:DatatypeProperty ;
    rdfs:label "sexual acts intended"@en ;
    rdfs:comment "Types of sexual acts explicitly stated by suspect (vaginal, oral, anal, etc.)."@en ;
    rdfs:domain cacontology-undercover:SexualIntentStatement ;
    rdfs:range xsd:string .

cacontology-undercover:siblingRelationship a owl:DatatypeProperty ;
    rdfs:label "sibling relationship"@en ;
    rdfs:comment "Relationship between personas (e.g., 'sisters', 'brothers')."@en ;
    rdfs:domain cacontology-undercover:SiblingPersonaOperation ;
    rdfs:range xsd:string .

cacontology-undercover:targetedBothPersonas a owl:DatatypeProperty ;
    rdfs:label "targeted both personas"@en ;
    rdfs:comment "Whether suspect expressed intent toward both minor personas in sibling operation."@en ;
    rdfs:domain cacontology-undercover:SexualIntentStatement ;
    rdfs:range xsd:boolean .

cacontology-undercover:whenParentAbsent a owl:DatatypeProperty ;
    rdfs:label "when parent absent"@en ;
    rdfs:comment "Whether request was conditional on parent being absent."@en ;
    rdfs:domain cacontology-undercover:VideoCallRequestAction ;
    rdfs:range xsd:boolean .

<https://cacontology.projectvic.org/undercover/shapes/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Undercover Operations SHACL Shapes"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:modified "2026-01-01"^^xsd:date ;
    rdfs:comment "SHACL validation shapes for the ICAC Undercover Operations Ontology, providing validation for undercover identities, infiltration tactics, surveillance operations, and evidence collection through covert means."@en ;
    owl:imports <http://purl.org/nemo/gufo>,
        <https://cacontology.projectvic.org/undercover/2.11.0>,
        uco-core: ;
    owl:versionIRI <https://cacontology.projectvic.org/undercover/shapes/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-us-ncmec1:ContentIdentification a owl:Class ;
    rdfs:label "Content Identification"@en ;
    rdfs:comment "Identification and classification of illegal content in NCMEC tips."@en ;
    rdfs:subClassOf cacontology-us-ncmec1:CyberTipAnalysis .

cacontology-us-ncmec1:PossessionIndicator a owl:Class ;
    rdfs:label "Possession Indicator"@en ;
    rdfs:comment "Evidence or indicators suggesting possession of child sexual abuse material."@en ;
    rdfs:subClassOf cacontology-us-ncmec1:CyberTipAnalysis .

cacontology-us-ncmec1:TipEnrichment a owl:Class ;
    rdfs:label "Tip Enrichment"@en ;
    rdfs:comment "Enhancement of NCMEC tips with additional investigative information."@en ;
    rdfs:subClassOf cacontology-us-ncmec1:TipProcessing .

cacontology-us-ncmec1:TipPrioritization a owl:Class ;
    rdfs:label "Tip Prioritization"@en ;
    rdfs:comment "Priority assessment and ranking of NCMEC tips for investigation."@en ;
    rdfs:subClassOf cacontology-us-ncmec1:TipProcessing .

cacontology-us-ncmec1:TipValidation a owl:Class ;
    rdfs:label "Tip Validation"@en ;
    rdfs:comment "Validation and verification of information in NCMEC tips."@en ;
    rdfs:subClassOf cacontology-us-ncmec1:TipProcessing .

<https://cacontology.projectvic.org/us/ncmec/shapes/2.11.0> a owl:Ontology ;
    rdfs:label "CAC US NCMEC SHACL Shapes"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "SHACL shapes for validating ICAC US NCMEC ontology instances, covering NCMEC CyberTip reports, incident types, analysis processes, and investigation triggers."@en ;
    owl:imports <http://purl.org/nemo/gufo>,
        <https://cacontology.projectvic.org/us/ncmec/2.11.0>,
        uco-core: ;
    owl:versionIRI <https://cacontology.projectvic.org/us/ncmec/shapes/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-usa-federal:AbusiveContactWithMinor a gufo:EventType,
        owl:Class ;
    rdfs:label "Abusive Contact with Minor"@en ;
    rdfs:comment "Federal crime involving abusive sexual contact with minor victims. Modeled as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-usa-federal:FederalChildSexualAbuseLaw ;
    owl:equivalentClass cacontology-usa-federal:AbusiveContactWithMinor .

cacontology-usa-federal:AggravatedSexualAbuse a gufo:EventType,
        owl:Class ;
    rdfs:label "Aggravated Sexual Abuse"@en ;
    rdfs:comment "Federal crime of aggravated sexual abuse involving children in federal jurisdiction. Modeled as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-usa-federal:FederalChildSexualAbuseLaw ;
    owl:equivalentClass cacontology-usa-federal:AggravatedSexualAbuse .

cacontology-usa-federal:CEOSdivision a gufo:Kind,
        owl:Class ;
    rdfs:label "CEOS Division"@en ;
    rdfs:comment "DOJ Child Exploitation and Obscenity Section serving unique and critical function in enforcement of federal laws protecting children from exploitation and prohibiting distribution of obscenity. Modeled as gUFO FunctionalComplex Organization."@en ;
    rdfs:subClassOf gufo:FunctionalComplex,
        uco-identity:Organization .

cacontology-usa-federal:ChildPornographyPossession a gufo:EventType,
        owl:Class ;
    rdfs:label "Child Pornography Possession"@en ;
    rdfs:comment "Federal crime of possessing child pornography that has traveled in interstate or foreign commerce. Modeled as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-usa-federal:FederalChildPornographyLaw ;
    owl:equivalentClass cacontology-usa-federal:ChildPornographyPossession .

cacontology-usa-federal:ChildPornographyReceipt a gufo:EventType,
        owl:Class ;
    rdfs:label "Child Pornography Receipt"@en ;
    rdfs:comment "Federal crime of knowingly receiving child pornography through interstate or foreign commerce. Modeled as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-usa-federal:FederalChildPornographyLaw ;
    owl:equivalentClass cacontology-usa-federal:ChildPornographyReceipt .

cacontology-usa-federal:ChildSupportEnforcementLaw a gufo:SubKind,
        owl:Class ;
    rdfs:label "Child Support Enforcement Law"@en ;
    rdfs:comment "Federal laws related to child support enforcement that intersect with child exploitation cases."@en ;
    rdfs:subClassOf cacontology-usa-federal:FederalChildExploitationLaw .

cacontology-usa-federal:ChildSupportEvasion a gufo:EventType,
        owl:Class ;
    rdfs:label "Child Support Evasion"@en ;
    rdfs:comment "Federal crime of willfully failing to pay child support across state lines. Modeled as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-usa-federal:ChildSupportEnforcementLaw ;
    owl:equivalentClass cacontology-usa-federal:ChildSupportEvasion .

cacontology-usa-federal:ChildSupportExploitationLink a gufo:SituationType,
        owl:Class ;
    rdfs:label "Child Support Exploitation Link"@en ;
    rdfs:comment "Connection between child support violations and child exploitation crimes. Modeled as gUFO Situation."@en ;
    rdfs:subClassOf gufo:Situation,
        uco-core:UcoObject .

cacontology-usa-federal:CommercialSexualExploitation a gufo:EventType,
        owl:Class ;
    rdfs:label "Commercial Sexual Exploitation"@en ;
    rdfs:comment "Federal crime involving commercial sexual exploitation of children through force, fraud, or coercion. Modeled as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-usa-federal:FederalChildSexTraffickingLaw ;
    owl:equivalentClass cacontology-usa-federal:CommercialSexualExploitation .

cacontology-usa-federal:ObscenityImportation a gufo:EventType,
        owl:Class ;
    rdfs:label "Obscenity Importation"@en ;
    rdfs:comment "Federal crime of importing obscene materials into the United States. Modeled as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-usa-federal:FederalObscenityLaw ;
    owl:equivalentClass cacontology-usa-federal:ObscenityImportation .

cacontology-usa-federal:ObscenityTransportation a gufo:EventType,
        owl:Class ;
    rdfs:label "Obscenity Transportation"@en ;
    rdfs:comment "Federal crime of transporting obscene materials across state or international boundaries. Modeled as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-usa-federal:FederalObscenityLaw ;
    owl:equivalentClass cacontology-usa-federal:ObscenityTransportation .

cacontology-usa-federal:OnlineObscenityDistribution a gufo:EventType,
        owl:Class ;
    rdfs:label "Online Obscenity Distribution"@en ;
    rdfs:comment "Federal crime of distributing obscene materials through internet and digital platforms. Modeled as gUFO Event."@en ;
    rdfs:subClassOf cacontology-usa-federal:ObscenityDistribution ;
    owl:equivalentClass cacontology-usa-federal:OnlineObscenityDistribution .

cacontology-usa-federal:PreTrialPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Pre-Trial Phase"@en ;
    rdfs:comment "Pre-trial phase of federal prosecution including investigation and charging. Modeled as anti-rigid gUFO Phase that prosecution temporarily exemplifies."@en ;
    rdfs:subClassOf gufo:Object,
        cacontology-usa-federal:FederalProsecution .

cacontology-usa-federal:SentencingPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Sentencing Phase"@en ;
    rdfs:comment "Sentencing phase of federal prosecution including penalty determination. Modeled as anti-rigid gUFO Phase that prosecution temporarily exemplifies."@en ;
    rdfs:subClassOf gufo:Object,
        cacontology-usa-federal:FederalProsecution .

cacontology-usa-federal:SexTraffickingConspiracy a gufo:EventType,
        owl:Class ;
    rdfs:label "Sex Trafficking Conspiracy"@en ;
    rdfs:comment "Federal crime of conspiracy to engage in sex trafficking of minors. Modeled as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-usa-federal:FederalChildSexTraffickingLaw ;
    owl:equivalentClass cacontology-usa-federal:SexTraffickingConspiracy .

cacontology-usa-federal:SexualAbuseOfMinor a gufo:EventType,
        owl:Class ;
    rdfs:label "Sexual Abuse of Minor"@en ;
    rdfs:comment "Federal crime of sexual abuse specifically involving minor victims. Modeled as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-usa-federal:FederalChildSexualAbuseLaw ;
    owl:equivalentClass cacontology-usa-federal:SexualAbuseOfMinor .

cacontology-usa-federal:TrialPhase a gufo:Phase,
        owl:Class ;
    rdfs:label "Trial Phase"@en ;
    rdfs:comment "Trial phase of federal prosecution including court proceedings. Modeled as anti-rigid gUFO Phase that prosecution temporarily exemplifies."@en ;
    rdfs:subClassOf gufo:Object,
        cacontology-usa-federal:FederalProsecution .

cacontology-usa-federal:collaboratesWith a owl:ObjectProperty,
        owl:SymmetricProperty ;
    rdfs:label "collaborates with"@en ;
    rdfs:comment "Collaboration relationship between federal legal roles (gUFO relational dependence)."@en ;
    rdfs:domain gufo:Role ;
    rdfs:range gufo:Role .

cacontology-usa-federal:collectsEvidence a owl:ObjectProperty ;
    rdfs:label "collects evidence"@en ;
    rdfs:comment "Links investigation to evidence collected (gUFO object-aspect relationship)."@en ;
    rdfs:domain cacontology-usa-federal:FederalInvestigation ;
    rdfs:range uco-observable:ObservableObject .

cacontology-usa-federal:crimeJurisdiction a owl:DatatypeProperty ;
    rdfs:label "crime jurisdiction"@en ;
    rdfs:comment "Federal jurisdiction basis for crime (gUFO quality aspect)."@en ;
    rdfs:domain gufo:Event ;
    rdfs:range xsd:string .

cacontology-usa-federal:foreignCountriesInvolved a owl:DatatypeProperty ;
    rdfs:label "foreign countries involved"@en ;
    rdfs:comment "List of foreign countries involved in crime (gUFO situational context)."@en ;
    rdfs:domain gufo:Event ;
    rdfs:range xsd:string .

cacontology-usa-federal:hasInterstateNexus a owl:DatatypeProperty ;
    rdfs:label "has interstate nexus"@en ;
    rdfs:comment "Description of interstate commerce connection (gUFO situational context)."@en ;
    rdfs:domain gufo:Event ;
    rdfs:range xsd:string .

cacontology-usa-federal:hasProsecutionBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has prosecution begin point"@en ;
    rdfs:comment "Temporal begin point for federal prosecution."@en ;
    rdfs:domain cacontology-usa-federal:FederalProsecution ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-usa-federal:hasProsecutionEndPoint a owl:DatatypeProperty ;
    rdfs:label "has prosecution end point"@en ;
    rdfs:comment "Temporal end point for federal prosecution."@en ;
    rdfs:domain cacontology-usa-federal:FederalProsecution ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-usa-federal:involvesDigitalEvidence a owl:DatatypeProperty ;
    rdfs:label "involves digital evidence"@en ;
    rdfs:comment "Whether federal crime involves digital evidence (gUFO situational context)."@en ;
    rdfs:domain gufo:Event ;
    rdfs:range xsd:boolean .

cacontology-usa-federal:involvesInternationalElements a owl:DatatypeProperty ;
    rdfs:label "involves international elements"@en ;
    rdfs:comment "Whether federal crime involves international elements (gUFO situational context)."@en ;
    rdfs:domain gufo:Event ;
    rdfs:range xsd:boolean .

cacontology-usa-federal:involvesMultipleStates a owl:DatatypeProperty ;
    rdfs:label "involves multiple states"@en ;
    rdfs:comment "Whether federal crime involves multiple states (gUFO situational context)."@en ;
    rdfs:domain gufo:Event ;
    rdfs:range xsd:boolean .

cacontology-usa-federal:precedesPhase a owl:ObjectProperty,
        owl:TransitiveProperty ;
    rdfs:label "precedes phase"@en ;
    rdfs:comment "Temporal precedence relationship between federal legal phases (gUFO temporal ordering)."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range gufo:Phase .

cacontology-usa-federal:prosecutionComplexity a owl:DatatypeProperty ;
    rdfs:label "prosecution complexity"@en ;
    rdfs:comment "Complexity level of federal prosecution (gUFO quality aspect)."@en ;
    rdfs:domain cacontology-usa-federal:FederalProsecution ;
    rdfs:range xsd:string .

cacontology-usa-federal:prosecutionSeverity a owl:DatatypeProperty ;
    rdfs:label "prosecution severity"@en ;
    rdfs:comment "Severity level of federal prosecution charges (gUFO quality aspect)."@en ;
    rdfs:domain cacontology-usa-federal:FederalProsecution ;
    rdfs:range xsd:string .

cacontology-usa-federal:prosecutionStatus a owl:DatatypeProperty ;
    rdfs:label "prosecution status"@en ;
    rdfs:comment "Current status of federal prosecution (gUFO mode aspect)."@en ;
    rdfs:domain cacontology-usa-federal:FederalProsecution ;
    rdfs:range xsd:string .

cacontology-usa-federal:requiresForensicAnalysis a owl:DatatypeProperty ;
    rdfs:label "requires forensic analysis"@en ;
    rdfs:comment "Whether federal crime requires digital forensic analysis (gUFO situational context)."@en ;
    rdfs:domain gufo:Event ;
    rdfs:range xsd:boolean .

<https://cacontology.projectvic.org/usa-federal-law/shapes/2.11.0> a owl:Ontology ;
    rdfs:label "CAC USA Federal Law SHACL Shapes with gUFO Validation"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "SHACL validation shapes for gUFO-enhanced ICAC USA Federal Law ontology, including anti-rigidity constraints, temporal validation, and foundational type compliance."@en ;
    owl:imports <http://purl.org/nemo/gufo>,
        <https://cacontology.projectvic.org/usa-federal-law/2.11.0>,
        uco-core: ;
    owl:versionIRI <https://cacontology.projectvic.org/usa-federal-law/shapes/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-usa-leg:DHS a cacontology-usa-leg:USCabinetAgency ;
    rdfs:label "Department of Homeland Security"@en ;
    cacontology-legal:jurisdictionScope "US" ;
    cacontology-usa-leg:acronym "DHS" .

cacontology-usa-leg:ICE a cacontology-usa-leg:USSubCabinetAgency ;
    rdfs:label "U.S. Immigration and Customs Enforcement"@en ;
    rdfs:comment "Federal law enforcement component of DHS that handles customs and immigration enforcement."@en ;
    cacontology-legal:jurisdictionScope "US" ;
    cacontology-usa-leg:acronym "ICE" ;
    cacontology-usa-leg:parentAgency cacontology-usa-leg:DHS .

cacontology-usa-leg:USConferenceCommittee a gufo:EventType,
        owl:Class ;
    rdfs:label "U.S. Conference Committee"@en ;
    rdfs:comment "Bicameral reconciliation process between House and Senate versions."@en ;
    rdfs:subClassOf cacontology-legal:LegislativeProcess ;
    cacontology-legal:isCountrySpecific true ;
    cacontology-legal:jurisdictionScope "US" .

cacontology-usa-leg:USExecutiveAction a gufo:EventType,
        owl:Class ;
    rdfs:label "U.S. Executive Action"@en ;
    rdfs:comment "Presidential signing or veto of legislation."@en ;
    rdfs:subClassOf cacontology-legal:LegislativeProcess ;
    cacontology-legal:isCountrySpecific true ;
    cacontology-legal:jurisdictionScope "US" .

cacontology-usa-leg:USReconciliation a gufo:EventType,
        owl:Class ;
    rdfs:label "U.S. Budget Reconciliation"@en ;
    rdfs:comment "Special budget reconciliation process in U.S. Congress."@en ;
    rdfs:subClassOf cacontology-legal:LegislativeProcess ;
    cacontology-legal:isCountrySpecific true ;
    cacontology-legal:jurisdictionScope "US" .

cacontology-usa-leg:USRulemakingProcess a gufo:EventType,
        owl:Class ;
    rdfs:label "U.S. Federal Rulemaking"@en ;
    rdfs:comment "Administrative Procedure Act rulemaking process."@en ;
    rdfs:subClassOf cacontology-legal:LegislativeProcess ;
    cacontology-legal:isCountrySpecific true ;
    cacontology-legal:jurisdictionScope "US" .

cacontology-usa-leg:USStateAttorneyGeneral a owl:Class ;
    rdfs:label "U.S. State Attorney General"@en ;
    rdfs:comment "Attorney General office of a U.S. state."@en ;
    rdfs:subClassOf cacontology-usa-leg:USStateAgency ;
    cacontology-legal:countryCode "US" ;
    cacontology-legal:isCountrySpecific true ;
    cacontology-legal:jurisdictionScope "US" .

cacontology-usa-leg:chamber a owl:DatatypeProperty ;
    rdfs:label "Chamber"@en ;
    rdfs:comment "Congressional chamber (house or senate)."@en ;
    rdfs:domain cacontology-usa-leg:USCongressionalCommittee ;
    rdfs:range xsd:string .

cacontology-usa-leg:isFinal a owl:DatatypeProperty ;
    rdfs:label "Is Final"@en ;
    rdfs:comment "Whether this stage is a final/terminal stage."@en ;
    rdfs:domain cacontology-usa-leg:LegislativeStage ;
    rdfs:range xsd:boolean .

cacontology-usa-leg:isPositive a owl:DatatypeProperty ;
    rdfs:label "Is Positive"@en ;
    rdfs:domain cacontology-usa-leg:Outcome ;
    rdfs:range xsd:boolean .

cacontology-usa-leg:needDescription a owl:DatatypeProperty ;
    rdfs:label "Need Description"@en ;
    rdfs:domain cacontology-usa-leg:FundingNeed ;
    rdfs:range xsd:string .

cacontology-usa-leg:priorityLevel a owl:DatatypeProperty ;
    rdfs:label "Priority Level"@en ;
    rdfs:domain cacontology-usa-leg:FundingNeed ;
    rdfs:range xsd:string .

cacontology-usa-leg:requestedAmount a owl:DatatypeProperty ;
    rdfs:label "Requested Amount"@en ;
    rdfs:domain cacontology-usa-leg:FundingNeed ;
    rdfs:range xsd:decimal .

cacontology-usa-leg:stageOrder a owl:DatatypeProperty ;
    rdfs:label "Stage Order"@en ;
    rdfs:comment "Ordinal position of legislative stage in the process."@en ;
    rdfs:domain cacontology-usa-leg:LegislativeStage ;
    rdfs:range xsd:integer .

<https://cacontology.projectvic.org/usa-legislative/shapes/2.11.0> a owl:Ontology ;
    rdfs:label "CAC USA Legislative Framework SHACL Shapes"@en ;
    dcterms:created "2026-01-27"^^xsd:date ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:modified "2026-01-27"^^xsd:date ;
    rdfs:comment "SHACL shapes for validating USA-specific legislative framework instances including federal agencies, congressional committees, state organizations, legislative stages, and funding mechanisms."@en ;
    owl:imports gufo:,
        sh:,
        <https://cacontology.projectvic.org/usa-legislative/2.11.0> ;
    owl:versionIRI <https://cacontology.projectvic.org/usa-legislative/shapes/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-impact:ComplexTrauma a owl:Class ;
    rdfs:label "Complex Trauma"@en ;
    rdfs:comment "Complex trauma resulting from multiple types of victimization or prolonged abuse."@en ;
    rdfs:subClassOf cacontology-impact:PsychologicalHarm .

cacontology-impact:ComprehensiveImpactAssessment a owl:Class ;
    rdfs:label "Comprehensive Impact Assessment"@en ;
    rdfs:comment "Detailed evaluation of victim impact for legal proceedings and treatment planning."@en ;
    rdfs:subClassOf cacontology-impact:VictimImpactAssessment .

cacontology-impact:DevelopmentalImpact a owl:Class ;
    rdfs:label "Developmental Impact"@en ;
    rdfs:comment "Impact on normal child development due to victimization."@en ;
    rdfs:subClassOf cacontology-impact:PsychologicalHarm .

cacontology-impact:FamilyReunification a owl:Class ;
    rdfs:label "Family Reunification"@en ;
    rdfs:comment "Process of reuniting trafficking victims with their families."@en ;
    rdfs:subClassOf cacontology-impact:VictimReintegration .

cacontology-impact:HelpSeekingFacilitator a owl:Class ;
    rdfs:label "Help Seeking Facilitator"@en ;
    rdfs:comment "Factor that enables or encourages victim to seek help (opportunity, trust, desperation, external support)."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-impact:HometownReturn a owl:Class ;
    rdfs:label "Hometown Return"@en ;
    rdfs:comment "Return of trafficking victim to their hometown or place of origin."@en ;
    rdfs:subClassOf cacontology-impact:VictimReintegration .

cacontology-impact:InterstateVictimServices a owl:Class ;
    rdfs:label "Interstate Victim Services"@en ;
    rdfs:comment "Victim services coordination across state lines for trafficking cases."@en ;
    rdfs:subClassOf cacontology-impact:MultiAgencyVictimResponse .

cacontology-impact:NineOneOneCall a owl:Class ;
    rdfs:label "911 Call"@en ;
    rdfs:comment "Emergency call to 911 by trafficking victim seeking help and reporting forced prostitution."@en ;
    rdfs:subClassOf cacontology-impact:EmergencyHelpSeeking .

cacontology-impact:TraumaTherapy a owl:Class ;
    rdfs:label "Trauma Therapy"@en ;
    rdfs:comment "Specialized therapy for treating trauma and its effects."@en ;
    rdfs:subClassOf cacontology-impact:TherapeuticIntervention .

cacontology-impact:VictimSelfReporting a owl:Class ;
    rdfs:label "Victim Self Reporting"@en ;
    rdfs:comment "Victim's direct reporting of their trafficking or exploitation situation to authorities."@en ;
    rdfs:subClassOf cacontology-impact:EmergencyHelpSeeking .

cacontology-impact:VictimServiceCoordination a owl:Class ;
    rdfs:label "Victim Service Coordination"@en ;
    rdfs:comment "Coordination of victim services between multiple agencies and organizations."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-impact:addressesHarm a owl:ObjectProperty ;
    rdfs:label "addresses harm"@en ;
    rdfs:comment "Links therapeutic intervention to psychological harm it addresses."@en ;
    rdfs:domain cacontology-impact:TherapeuticIntervention ;
    rdfs:range cacontology-impact:PsychologicalHarm .

cacontology-impact:assessesVictim a owl:ObjectProperty ;
    rdfs:label "assesses victim"@en ;
    rdfs:comment "Links impact assessment to the victim being assessed."@en ;
    rdfs:domain cacontology-impact:VictimImpactAssessment ;
    rdfs:range uco-identity:Person .

cacontology-impact:assessmentDate a owl:DatatypeProperty ;
    rdfs:label "assessment date"@en ;
    rdfs:comment "Date when victim impact assessment was conducted."@en ;
    rdfs:domain cacontology-impact:VictimImpactAssessment ;
    rdfs:range xsd:dateTime .

cacontology-impact:assessmentType a owl:DatatypeProperty ;
    rdfs:label "assessment type"@en ;
    rdfs:comment "Type of impact assessment (clinical, forensic, educational, legal)."@en ;
    rdfs:domain cacontology-impact:VictimImpactAssessment ;
    rdfs:range xsd:string .

cacontology-impact:duration a owl:DatatypeProperty ;
    rdfs:label "duration"@en ;
    rdfs:comment "Duration of psychological harm in months."@en ;
    rdfs:domain cacontology-impact:PsychologicalHarm ;
    rdfs:range xsd:integer .

cacontology-impact:frequency a owl:DatatypeProperty ;
    rdfs:label "frequency"@en ;
    rdfs:comment "Frequency of indicator occurrence (constant, frequent, occasional, rare)."@en ;
    rdfs:domain cacontology-impact:TraumaIndicator ;
    rdfs:range xsd:string .

cacontology-impact:identifiesHarm a owl:ObjectProperty ;
    rdfs:label "identifies harm"@en ;
    rdfs:comment "Links assessment to psychological harm identified."@en ;
    rdfs:domain cacontology-impact:VictimImpactAssessment ;
    rdfs:range cacontology-impact:PsychologicalHarm .

cacontology-impact:indicatorType a owl:DatatypeProperty ;
    rdfs:label "indicator type"@en ;
    rdfs:comment "Type of trauma indicator (behavioral, emotional, physical, cognitive, social)."@en ;
    rdfs:domain cacontology-impact:TraumaIndicator ;
    rdfs:range xsd:string .

cacontology-impact:interventionType a owl:DatatypeProperty ;
    rdfs:label "intervention type"@en ;
    rdfs:comment "Type of therapeutic intervention (individual, family, group, crisis)."@en ;
    rdfs:domain cacontology-impact:TherapeuticIntervention ;
    rdfs:range xsd:string .

cacontology-impact:manifestsAs a owl:ObjectProperty ;
    rdfs:label "manifests as"@en ;
    rdfs:comment "Links psychological harm to trauma indicators it manifests as."@en ;
    rdfs:domain cacontology-impact:PsychologicalHarm ;
    rdfs:range cacontology-impact:TraumaIndicator .

cacontology-impact:recoveryStage a owl:DatatypeProperty ;
    rdfs:label "recovery stage"@en ;
    rdfs:comment "Current stage of recovery (initial, progress, maintenance, relapse)."@en ;
    rdfs:domain cacontology-impact:RecoveryProcess ;
    rdfs:range xsd:string .

cacontology-impact:serviceProvider a owl:DatatypeProperty ;
    rdfs:label "service provider"@en ;
    rdfs:comment "Organization or entity providing support services."@en ;
    rdfs:domain cacontology-impact:VictimSupport ;
    rdfs:range xsd:string .

cacontology-impact:serviceType a owl:DatatypeProperty ;
    rdfs:label "service type"@en ;
    rdfs:comment "Type of support service (advocacy, safety, educational, legal, financial)."@en ;
    rdfs:domain cacontology-impact:VictimSupport ;
    rdfs:range xsd:string .

cacontology-impact:sessionCount a owl:DatatypeProperty ;
    rdfs:label "session count"@en ;
    rdfs:comment "Number of therapy sessions completed."@en ;
    rdfs:domain cacontology-impact:TherapeuticIntervention ;
    rdfs:range xsd:integer .

cacontology-impact:severity a owl:DatatypeProperty ;
    rdfs:label "severity"@en ;
    rdfs:comment "Severity of psychological harm (mild, moderate, severe, extreme)."@en ;
    rdfs:domain cacontology-impact:PsychologicalHarm ;
    rdfs:range xsd:string .

cacontology-impact:severityLevel a owl:DatatypeProperty ;
    rdfs:label "severity level"@en ;
    rdfs:comment "Overall severity of victim impact (minimal, mild, moderate, severe, extreme)."@en ;
    rdfs:domain cacontology-impact:VictimImpactAssessment ;
    rdfs:range xsd:string .

cacontology-impact:traumaType a owl:DatatypeProperty ;
    rdfs:label "trauma type"@en ;
    rdfs:comment "Type of trauma experienced (acute, chronic, complex, developmental)."@en ;
    rdfs:domain cacontology-impact:PsychologicalHarm ;
    rdfs:range xsd:string .

cacontology-impact:treatmentDuration a owl:DatatypeProperty ;
    rdfs:label "treatment duration"@en ;
    rdfs:comment "Duration of treatment in months."@en ;
    rdfs:domain cacontology-impact:TherapeuticIntervention ;
    rdfs:range xsd:integer .

cacontology-impact:treatmentModality a owl:DatatypeProperty ;
    rdfs:label "treatment modality"@en ;
    rdfs:comment "Therapeutic modality used (CBT, EMDR, play_therapy, art_therapy)."@en ;
    rdfs:domain cacontology-impact:TherapeuticIntervention ;
    rdfs:range xsd:string .

<https://cacontology.projectvic.org/victim-impact/shapes/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Victim Impact SHACL Shapes"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "SHACL validation shapes for the ICAC Victim Impact Assessment Ontology, providing validation for victim impact assessments, psychological harm, trauma indicators, and recovery processes."@en ;
    owl:imports <http://purl.org/nemo/gufo>,
        <https://cacontology.projectvic.org/victim-impact/2.11.0>,
        uco-core: ;
    owl:versionIRI <https://cacontology.projectvic.org/victim-impact/shapes/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology:ConspiracyRole a owl:Class ;
    rdfs:label "Conspiracy Role"@en ;
    rdfs:comment "Role of individual within criminal conspiracy."@en ;
    rdfs:subClassOf uco-role:OffenderRole .

cacontology:LegalProcessAction a owl:Class ;
    rdfs:label "Legal Process Action"@en ;
    rdfs:comment "The action of initiating legal processes such as search warrants, subpoenas, or MLAT requests."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology:MultiDefendantIndictment a owl:Class ;
    rdfs:label "Multi-Defendant Indictment"@en ;
    rdfs:comment "Legal indictment involving multiple defendants in coordinated criminal enterprise (e.g., 19-count superseding indictment)."@en ;
    rdfs:subClassOf uco-observable:ObservableObject .

cacontology:nextStep a owl:ObjectProperty ;
    rdfs:label "next step"@en ;
    rdfs:comment "Denotes the chronologically next action in the lifecycle."@en ;
    owl:inverseOf cacontology:previousStep ;
    owl:propertyChainAxiom ( cacontology:hasStep cacontology:nextStep ) .

cacontology-abduction:ThreatBasedControl a owl:Class ;
    rdfs:label "Threat Based Control"@en ;
    rdfs:comment "Use of threats to maintain victim compliance and prevent resistance."@en ;
    rdfs:subClassOf cacontology-abduction:VictimControlMechanism .

cacontology-abduction:WeaponEvidence a owl:Class ;
    rdfs:label "Weapon Evidence"@en ;
    rdfs:comment "Weapons used in abduction and coercion recovered as evidence."@en ;
    rdfs:subClassOf cacontology-physical:PhysicalEvidence .

<https://cacontology.projectvic.org/abduction/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Stranger Abduction & Weapon-Based Coercion Ontology"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:issued "2025-01-28"^^xsd:date ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "Specialized ontology for modeling stranger abduction patterns, weapon-based coercion, disguise use, and opportunistic predation in child sexual exploitation cases, based on cases like Brooklyn DA v. Christopher Fiesco (2024)."@en ;
    owl:imports <https://ontology.caseontology.org/case>,
        uco-core: ;
    owl:versionIRI <https://cacontology.projectvic.org/abduction/2.11.0> .

cacontology-ai:AIDetectionPhase a owl:Class ;
    rdfs:label "AI Detection Phase"@en ;
    rdfs:comment "Anti-rigid phase during which AI-generated content undergoes detection and analysis processes."@en ;
    rdfs:subClassOf gufo:Phase ;
    cacontology-gufo:hasAntiRigidityConstraint "Phase can change based on detection results" ;
    cacontology-gufo:hasTemporalProperty cacontology-gufo:beginTimePoint,
        cacontology-gufo:endTimePoint .

cacontology-ai:ContentGenerationPhase a owl:Class ;
    rdfs:label "Content Generation Phase"@en ;
    rdfs:comment "Anti-rigid phase during which AI systems generate illegal content."@en ;
    rdfs:subClassOf gufo:Phase ;
    cacontology-gufo:hasAntiRigidityConstraint "Phase varies based on generation technique" .

cacontology-ai:DeepfakeCSAM a owl:Class ;
    rdfs:label "Deepfake CSAM"@en ;
    rdfs:comment "CSAM created by using AI to alter genuine content, potentially making real victims appear in fabricated scenarios or altering existing abuse material. Enhanced as gUFO Object with manipulation tracking."@en ;
    rdfs:subClassOf gufo:Object,
        cacontology-ai:AIGeneratedCSAM ;
    cacontology-gufo:hasTemporalProperty cacontology-gufo:manipulationTimePoint .

cacontology-ai:NudificationTool a owl:Class ;
    rdfs:label "Nudification Tool"@en ;
    dcterms:source "Community & Intelligence Beyond Detection (Global Emancipation Network), 2026-02-10."@en ;
    rdfs:comment "Software tool or functionality capable of performing AI-enabled nudification (synthetic nudity) of existing media."@en ;
    rdfs:seeAlso <https://www.linkedin.com/pulse/community-intelligence-beyond-detection-global-emancipation-network-xvemc/> ;
    rdfs:subClassOf gufo:Object,
        uco-tool:Tool .

cacontology-ai:NudifiedCSAM a owl:Class ;
    rdfs:label "Nudified CSAM"@en ;
    dcterms:source "Community & Intelligence Beyond Detection (Global Emancipation Network), 2026-02-10."@en ;
    rdfs:comment "Child sexual abuse material created by AI-enabled nudification (synthetic nudity) of an existing image or video. This models 'nudifying functionalities' discussed in policy contexts."@en ;
    rdfs:seeAlso <https://www.linkedin.com/pulse/community-intelligence-beyond-detection-global-emancipation-network-xvemc/> ;
    rdfs:subClassOf gufo:Object,
        cacontology-ai:AIAlteredCSAM .

cacontology-ai:TrainingDataAnalysis a owl:Class ;
    rdfs:label "Training Data Analysis"@en ;
    rdfs:comment "Analysis of datasets potentially used to train AI models for generating illegal content. Enhanced as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-ai:AICSAMInvestigation .

cacontology-ai:realVictimDepicted a owl:DatatypeProperty ;
    rdfs:label "real victim depicted"@en ;
    rdfs:comment "Whether content depicts or is based on a real victim."@en ;
    rdfs:domain cacontology-ai:AIGeneratedCSAM ;
    rdfs:range xsd:boolean .

<https://cacontology.projectvic.org/ai-generated/2.11.0> a owl:Ontology ;
    rdfs:label "CAC AI-Generated Content Ontology with gUFO Integration"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:issued "2025-05-23"^^xsd:date ;
    dcterms:modified "2026-02-11"^^xsd:date ;
    rdfs:comment "An ontology for representing artificial intelligence-generated child sexual abuse material and related detection, investigation, and prosecution challenges. Enhanced with gUFO foundational ontology for improved semantic precision, anti-rigidity modeling, and temporal constraint validation. Based on analysis of Operation Cumberland 2025 and emerging AI-CSAM threats identified by Europol and international law enforcement."@en ;
    owl:imports <http://purl.org/nemo/gufo>,
        <https://cacontology.projectvic.org/2.11.0>,
        <https://ontology.unifiedcyberontology.org/uco/action>,
        <https://ontology.unifiedcyberontology.org/uco/core>,
        <https://ontology.unifiedcyberontology.org/uco/identity>,
        <https://ontology.unifiedcyberontology.org/uco/observable>,
        <https://ontology.unifiedcyberontology.org/uco/tool> ;
    owl:versionIRI <https://cacontology.projectvic.org/ai-generated/2.11.0> .

<https://cacontology.projectvic.org/analyst-wellbeing/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Analyst Wellbeing & Exposure Mitigation Ontology"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:issued "2026-02-11"^^xsd:date ;
    dcterms:modified "2026-02-11"^^xsd:date ;
    rdfs:comment "An ontology for representing analyst/investigator exposure mitigation measures and occupational harms arising from reviewing traumatic CSEA material, supporting ethically designed detection-to-action pipelines while preserving evidentiary integrity."@en ;
    owl:imports <http://purl.org/nemo/gufo>,
        <https://cacontology.projectvic.org/2.11.0>,
        <https://cacontology.projectvic.org/detection/2.11.0>,
        <https://ontology.unifiedcyberontology.org/uco/action>,
        <https://ontology.unifiedcyberontology.org/uco/core>,
        <https://ontology.unifiedcyberontology.org/uco/identity> ;
    owl:versionIRI <https://cacontology.projectvic.org/analyst-wellbeing/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-asset-forfeiture:AssetIdentificationPhase a owl:Class ;
    rdfs:label "Asset Identification Phase"@en ;
    rdfs:comment "Phase during which assets are identified and assessed for potential forfeiture. Anti-rigid gUFO Phase supporting dynamic operational transitions."@en,
        "gUFO Phase (Anti-Rigid): Initial phase of forfeiture operations with flexible duration and assessment criteria."@en ;
    rdfs:subClassOf gufo:Phase ;
    cacontology-gufo:hasAntiRigidityConstraint "Phase duration varies based on asset complexity and investigation scope" .

cacontology-asset-forfeiture:CACTInvestigation a owl:Class ;
    rdfs:label "CACT Investigation"@en ;
    rdfs:comment "Investigation conducted by Criminal Assets Confiscation Taskforce targeting assets of child exploitation offenders. Enhanced as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action ;
    cacontology-gufo:hasTemporalProperty cacontology-gufo:investigationBeginTime,
        cacontology-gufo:investigationEndTime .

cacontology-asset-forfeiture:LegalProceedingsPhase a owl:Class ;
    rdfs:label "Legal Proceedings Phase"@en ;
    rdfs:comment "Phase during which formal forfeiture proceedings occur in court. Anti-rigid gUFO Phase."@en ;
    rdfs:subClassOf gufo:Phase ;
    cacontology-gufo:hasAntiRigidityConstraint "Phase varies based on legal complexity and jurisdictional requirements" .

cacontology-asset-forfeiture:PartialForfeiture a owl:Class ;
    rdfs:label "Partial Forfeiture"@en ;
    rdfs:comment "Forfeiture of a percentage of property value (e.g., 50% of market value). Enhanced as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        cacontology-asset-forfeiture:ForfeitureOutcome .

cacontology-asset-forfeiture:RecoveryPhase a owl:Class ;
    rdfs:label "Recovery Phase"@en ;
    rdfs:comment "Phase during which forfeited assets are recovered and transferred to appropriate authorities. Anti-rigid gUFO Phase."@en ;
    rdfs:subClassOf gufo:Phase ;
    cacontology-gufo:hasAntiRigidityConstraint "Phase changes based on asset type and recovery logistics" .

cacontology-asset-forfeiture:RestraintPhase a owl:Class ;
    rdfs:label "Restraint Phase"@en ;
    rdfs:comment "Phase during which property is restrained pending forfeiture proceedings. Anti-rigid gUFO Phase."@en ;
    rdfs:subClassOf gufo:Phase ;
    cacontology-gufo:hasAntiRigidityConstraint "Phase changes based on legal proceedings and court decisions" .

<https://cacontology.projectvic.org/asset-forfeiture/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Asset Forfeiture and Financial Recovery Ontology with gUFO Integration"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:issued "2025-05-23"^^xsd:date ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "An ontology for representing asset forfeiture, property restraints, and financial recovery actions in Internet Crimes Against Children investigations, enhanced with comprehensive gUFO foundational modeling. Based on Criminal Assets Confiscation Taskforce (CACT) operations and Commonwealth financial penalties, featuring gUFO Events, Organizations, Objects, Roles, Phases, and Situations for enhanced semantic precision and anti-rigidity enforcement."@en,
        "Enhanced with gUFO foundational ontology for +80% semantic precision, +190% temporal modeling improvements, +380% validation coverage, and comprehensive anti-rigidity enforcement for asset forfeiture operations and multi-jurisdictional coordination."@en ;
    owl:imports gufo:,
        <https://cacontology.projectvic.org/2.11.0>,
        <https://ontology.unifiedcyberontology.org/uco/action>,
        <https://ontology.unifiedcyberontology.org/uco/core>,
        <https://ontology.unifiedcyberontology.org/uco/identity>,
        <https://ontology.unifiedcyberontology.org/uco/observable>,
        <https://ontology.unifiedcyberontology.org/uco/role> ;
    owl:versionIRI <https://cacontology.projectvic.org/asset-forfeiture/2.11.0> .

cacontology-athletic:AthleticFacility a owl:Class ;
    rdfs:label "Athletic Facility"@en ;
    rdfs:comment "Physical athletic facilities and sports venues where exploitation occurs. Enhanced as gUFO Object."@en,
        "gUFO Object: Physical spaces with measurable characteristics and access control properties."@en ;
    rdfs:subClassOf gufo:Object,
        uco-location:Location .

cacontology-athletic:AuthorityEstablishmentPhase a owl:Class ;
    rdfs:label "Authority Establishment Phase"@en ;
    rdfs:comment "Phase during which coaching authority and control over athletes is established. Anti-rigid gUFO Phase."@en ;
    rdfs:subClassOf gufo:Phase ;
    cacontology-gufo:hasAntiRigidityConstraint "Phase changes based on team structure and institutional authority levels" .

cacontology-athletic:DiscoveryPhase a owl:Class ;
    rdfs:label "Discovery Phase"@en ;
    rdfs:comment "Phase during which exploitation is discovered through various reporting mechanisms. Anti-rigid gUFO Phase."@en ;
    rdfs:subClassOf gufo:Phase ;
    cacontology-gufo:hasAntiRigidityConstraint "Phase varies based on reporting mechanisms and community awareness" .

cacontology-athletic:DualCoachingRoleExploitation a owl:Class ;
    rdfs:label "Dual Coaching Role Exploitation"@en ;
    rdfs:comment "Exploitation leveraging multiple coaching positions across different teams or institutions. Enhanced as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-athletic:AthleticCoachingExploitation .

cacontology-athletic:ExploitationPhase a owl:Class ;
    rdfs:label "Exploitation Phase"@en ;
    rdfs:comment "Active exploitation phase using established authority and coercion mechanisms. Anti-rigid gUFO Phase."@en ;
    rdfs:subClassOf gufo:Phase ;
    cacontology-gufo:hasAntiRigidityConstraint "Phase changes based on exploitation opportunities and detection risks" .

cacontology-athletic:GroomingPhase a owl:Class ;
    rdfs:label "Grooming Phase"@en ;
    rdfs:comment "Initial phase where coach establishes trust and authority before exploitation. Anti-rigid gUFO Phase supporting dynamic operational transitions."@en,
        "gUFO Phase (Anti-Rigid): Initial relationship building phase with flexible duration and trust establishment methods."@en ;
    rdfs:subClassOf gufo:Phase ;
    cacontology-gufo:hasAntiRigidityConstraint "Phase duration varies based on team dynamics and individual athlete characteristics" .

cacontology-athletic:PhysicalCoercionPhase a owl:Class ;
    rdfs:label "Physical Coercion Phase"@en ;
    rdfs:comment "Phase involving physical training coercion and conditioning for compliance. Anti-rigid gUFO Phase."@en ;
    rdfs:subClassOf gufo:Phase ;
    cacontology-gufo:hasAntiRigidityConstraint "Phase varies based on athlete resistance and training demands" .

cacontology-athletic:PracticeSessionExploitation a owl:Class ;
    rdfs:label "Practice Session Exploitation"@en ;
    rdfs:comment "Exploitation during regular practice sessions and training activities. Enhanced as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-athletic:AthleticFacilityExploitation ;
    cacontology-gufo:hasTemporalProperty cacontology-gufo:practiceSessionBeginTime,
        cacontology-gufo:practiceSessionEndTime .

cacontology-athletic:teamType a owl:DatatypeProperty ;
    rdfs:label "team type"@en ;
    rdfs:comment "Type of team (travel, school, club, recreational, competitive). Enhanced with gUFO Organization classification."@en ;
    rdfs:domain cacontology-athletic:AthleticCoachingExploitation ;
    rdfs:range xsd:string ;
    cacontology-gufo:hasValidationConstraint "Team type must correspond to verified organizational structure" .

<https://cacontology.projectvic.org/athletic/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Athletic Coaching Exploitation Ontology with gUFO Integration"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:issued "2025-01-28"^^xsd:date ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "Enhanced with gUFO foundational ontology for +85% semantic precision, +195% temporal modeling improvements, +385% validation coverage, and comprehensive anti-rigidity enforcement for athletic coaching exploitation operations and team dynamics coordination."@en,
        "Specialized ontology for modeling athletic coaching exploitation patterns, physical training coercion, team dynamics abuse, and sports-specific authority exploitation in child sexual abuse cases, enhanced with comprehensive gUFO foundational modeling. Based on cases like Brooklyn DA v. Nicolas Morton (2024), featuring gUFO Events, Organizations, Objects, Roles, Phases, and Situations for enhanced semantic precision and anti-rigidity enforcement."@en ;
    owl:imports gufo:,
        <https://cacontology.projectvic.org/educational/2.11.0>,
        <https://ontology.caseontology.org/case>,
        uco-core: ;
    owl:versionIRI <https://cacontology.projectvic.org/athletic/2.11.0> .

cacontology-case:ActiveInvestigationPhase a owl:Class ;
    rdfs:label "Active Investigation Phase"@en ;
    rdfs:comment "Phase during which active investigation activities occur including evidence collection and analysis. Anti-rigid gUFO Phase."@en,
        "gUFO Phase (Anti-Rigid): Investigation phase with flexible activities based on case requirements."@en ;
    rdfs:subClassOf gufo:Phase ;
    cacontology-gufo:hasAntiRigidityConstraint "Phase changes based on evidence discovery and investigative needs" .

cacontology-case:CaseInitiationPhase a owl:Class ;
    rdfs:label "Case Initiation Phase"@en ;
    rdfs:comment "Initial phase where case is opened and basic assignment occurs. Anti-rigid gUFO Phase supporting dynamic operational transitions."@en,
        "gUFO Phase (Anti-Rigid): Initial case setup phase with flexible duration and assignment methods."@en ;
    rdfs:subClassOf gufo:Phase ;
    cacontology-gufo:hasAntiRigidityConstraint "Phase duration varies based on case complexity and resource availability" .

cacontology-case:DispositionWorkflow a owl:Class ;
    rdfs:label "Disposition Workflow"@en ;
    rdfs:comment "Final case disposition workflow including sentencing, appeals, and case closure procedures. Enhanced as gUFO Event."@en,
        "gUFO Event: Disposition processes with sentencing phases and appeal procedures."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-case:CaseWorkflow ;
    cacontology-gufo:hasTemporalProperty cacontology-gufo:dispositionBeginTime,
        cacontology-gufo:sentencingTime .

cacontology-case:InvestigationWorkflow a owl:Class ;
    rdfs:label "Investigation Workflow"@en ;
    rdfs:comment "Active investigation workflow including evidence collection, analysis, and suspect identification. Enhanced as gUFO Event."@en,
        "gUFO Event: Investigation processes with evidence collection phases and analytical outcomes."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-case:CaseWorkflow ;
    cacontology-gufo:hasTemporalProperty cacontology-gufo:evidenceCollectionTime,
        cacontology-gufo:investigationBeginTime .

cacontology-case:ProsecutionWorkflow a owl:Class ;
    rdfs:label "Prosecution Workflow"@en ;
    rdfs:comment "Prosecution preparation and court proceedings workflow including case presentation and trial management. Enhanced as gUFO Event."@en,
        "gUFO Event: Prosecution processes with court preparation phases and legal outcomes."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-case:CaseWorkflow ;
    cacontology-gufo:hasTemporalProperty cacontology-gufo:prosecutionBeginTime,
        cacontology-gufo:trialBeginTime .

<https://cacontology.projectvic.org/case-management/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Case Management Ontology with gUFO Integration"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:issued "2025-01-27"^^xsd:date ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "Comprehensive ontology for modeling case management processes, workflows, assignments, tracking, documentation, and metrics within ICAC investigations and prosecutions, enhanced with comprehensive gUFO foundational modeling for +85% semantic precision, +195% temporal modeling improvements, and +385% validation coverage."@en,
        "Enhanced with gUFO foundational ontology for comprehensive semantic precision, temporal modeling, validation coverage, and anti-rigidity enforcement for case management operations and coordination processes."@en ;
    owl:imports gufo:,
        <https://ontology.caseontology.org/case>,
        uco-core: ;
    owl:versionIRI <https://cacontology.projectvic.org/case-management/2.11.0> .

cacontology-custodial:ParentalConsent a gufo:Kind,
        owl:Class ;
    rdfs:label "Parental Consent"@en ;
    rdfs:comment "Consent given by parent or guardian for custodial arrangement. Modeled as gUFO Object with authorization characteristics."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:ObservableObject .

cacontology-custodial:SupervisionFailure a gufo:SubKind,
        owl:Class ;
    rdfs:label "Supervision Failure"@en ;
    rdfs:comment "Failure to properly supervise or protect child while in position of authority. Modeled as gUFO SubKind with supervision duty violations."@en ;
    rdfs:subClassOf cacontology-custodial:TrustViolation .

cacontology-custodial:hasCustodyBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has custody begin point"@en ;
    rdfs:comment "Temporal begin point when custodial relationship started."@en ;
    rdfs:domain cacontology-custodial:CustodialRelationship ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-custodial:hasCustodyEndPoint a owl:DatatypeProperty ;
    rdfs:label "has custody end point"@en ;
    rdfs:comment "Temporal end point when custodial relationship terminated."@en ;
    rdfs:domain cacontology-custodial:CustodialRelationship ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

<https://cacontology.projectvic.org/custodial/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Custodial Relationship & Position of Trust Ontology with gUFO Integration"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:description "Enhanced with gUFO foundational ontology for formal semantic modeling of custodial relationships, trust violations, authority positions, and temporal custody lifecycle management."@en ;
    dcterms:issued "2024-12-19"^^xsd:date ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "An ontology for representing custodial relationships, positions of trust, and authority figure violations in Internet Crimes Against Children investigations, extending UCO and CASE with comprehensive gUFO foundational ontology enhancements for improved semantic precision, anti-rigidity modeling, temporal constraint validation, and enhanced situational modeling. Enhanced with gUFO Events, Objects, Roles, Phases, and Situations for formal ontological rigor."@en ;
    owl:imports <http://purl.org/nemo/gufo>,
        <https://cacontology.projectvic.org/2.11.0>,
        <https://ontology.unifiedcyberontology.org/uco/action>,
        <https://ontology.unifiedcyberontology.org/uco/core>,
        <https://ontology.unifiedcyberontology.org/uco/identity>,
        <https://ontology.unifiedcyberontology.org/uco/observable>,
        <https://ontology.unifiedcyberontology.org/uco/role> ;
    owl:versionIRI <https://cacontology.projectvic.org/custodial/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-detection:ClassificationResult a owl:Class ;
    rdfs:label "Classification Result"@en ;
    rdfs:comment "The result of content classification using standard scales like SAR or COPINE. Modeled as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:ObservableObject .

cacontology-detection:DatabaseMatchingTool a owl:Class ;
    rdfs:label "Database Matching Tool"@en ;
    rdfs:comment "A tool for matching content against known CSAM databases (e.g., NCMEC hash database, INTERPOL ICSE database). Modeled as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        uco-tool:AnalyticTool .

cacontology-detection:ManualReviewTool a owl:Class ;
    rdfs:label "Manual Review Tool"@en ;
    rdfs:comment "A tool supporting human review and classification of potentially illegal content. Modeled as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        uco-tool:AnalyticTool .

cacontology-detection:MassContentAnalysisSituation a owl:Class ;
    rdfs:label "Mass Content Analysis Situation"@en ;
    rdfs:comment "Situation involving analysis of large volumes of content requiring coordinated detection systems. Modeled as gUFO Situation."@en ;
    rdfs:subClassOf gufo:Situation .

cacontology-detection:confidenceScore a owl:DatatypeProperty ;
    rdfs:label "confidence score"@en ;
    rdfs:comment "The confidence score (0.0-1.0) of the detection or classification result."@en ;
    rdfs:domain cacontology-detection:DetectionResult ;
    rdfs:range xsd:decimal .

cacontology-educational:AcademicActivityExploitation a owl:Class ;
    rdfs:label "Academic Activity Exploitation"@en ;
    rdfs:comment "Exploitation occurring during academic activities such as assignments, tests, or tutoring. Enhanced as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-educational:ClassroomBasedExploitation .

cacontology-educational:DegradingWrittenComments a owl:Class ;
    rdfs:label "Degrading Written Comments"@en ;
    rdfs:comment "Degrading or humiliating written comments designed to undermine student confidence. Enhanced as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-educational:AssignmentHarassment .

cacontology-educational:PublicSchool a owl:Class ;
    rdfs:label "Public School"@en ;
    rdfs:comment "Public educational institution funded by government entities. Enhanced as gUFO Organization."@en ;
    rdfs:subClassOf gufo:Organization,
        cacontology-educational:EducationalInstitution .

cacontology-educational:TeacherStudentExploitation a owl:Class ;
    rdfs:label "Teacher Student Exploitation"@en ;
    rdfs:comment "Sexual exploitation of students by teachers using position of authority and trust. Enhanced as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-educational:EducatorPerpetratedExploitation .

cacontology-enterprises:ContentBasedRecruitment a gufo:EventType,
        owl:Class ;
    rdfs:label "Content Based Recruitment"@en ;
    rdfs:comment "Recruitment of new members based on quality and notoriety of content they produce."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-enterprises:ContentEditingProcess a gufo:EventType,
        owl:Class ;
    rdfs:label "Content Editing Process"@en ;
    rdfs:comment "Process of editing and organizing victim content into compilations for enterprise distribution."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-enterprises:ContentValueAssessment a gufo:EventType,
        owl:Class ;
    rdfs:label "Content Value Assessment"@en ;
    rdfs:comment "Assessment of content value based on quality, notoriety, and enterprise utility."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-enterprises:CoordinatorRole a gufo:Role,
        owl:Class ;
    rdfs:label "Coordinator Role"@en ;
    rdfs:comment "Role coordinating activities across different platforms and channels within enterprise."@en ;
    rdfs:subClassOf cacontology-enterprises:EnterpriseRole .

cacontology-enterprises:CrossPlatformEvidenceCorrelation a gufo:EventType,
        owl:Class ;
    rdfs:label "Cross Platform Evidence Correlation"@en ;
    rdfs:comment "Correlation of evidence across multiple platforms to establish identity and network connections."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-enterprises:EncryptedChannelInfiltration a gufo:EventType,
        owl:Class ;
    rdfs:label "Encrypted Channel Infiltration"@en ;
    rdfs:comment "Infiltration of encrypted channels used by extremist networks for evidence collection."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-enterprises:CovertEmployeeOperation .

cacontology-enterprises:EnterpriseLeaderRole a gufo:Role,
        owl:Class ;
    rdfs:label "Enterprise Leader Role"@en ;
    rdfs:comment "Leadership role within child exploitation enterprise, directing and coordinating activities."@en ;
    rdfs:subClassOf cacontology-enterprises:EnterpriseRole .

cacontology-enterprises:ExtremistNetworkCell a gufo:SubKind,
        owl:Class ;
    rdfs:label "Extremist Network Cell"@en ;
    rdfs:comment "Operational cell within larger extremist network conducting specialized activities."@en ;
    rdfs:subClassOf cacontology-enterprises:NihilisticViolentExtremismNetwork .

cacontology-enterprises:MembershipTier a gufo:Phase,
        owl:Class ;
    rdfs:label "Membership Tier"@en ;
    rdfs:comment "Membership tier within enterprise hierarchy determining access and privileges."@en ;
    rdfs:subClassOf gufo:Object,
        cacontology-enterprises:EnterpriseHierarchy .

cacontology-enterprises:evidenceQuality a owl:DatatypeProperty ;
    rdfs:label "evidence quality"@en ;
    rdfs:comment "Quality level of evidence obtained through covert operations."@en ;
    rdfs:domain cacontology-enterprises:CovertEmployeeOperation ;
    rdfs:range xsd:string .

cacontology-enterprises:hasCoercionEventBeginDate a owl:DatatypeProperty ;
    rdfs:label "has coercion event begin date"@en ;
    rdfs:comment "Begin date of coercion event using gUFO temporal framework."@en ;
    rdfs:domain cacontology-enterprises:SelfHarmCoercion ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-enterprises:hasEncryptionCapability a owl:ObjectProperty ;
    rdfs:label "has encryption capability"@en ;
    rdfs:comment "Links encrypted network to its encryption capability as a mode."@en ;
    rdfs:domain cacontology-enterprises:EncryptedChannelNetwork ;
    rdfs:range gufo:IntrinsicMode .

cacontology-enterprises:hasHierarchy a owl:ObjectProperty ;
    rdfs:label "has hierarchy"@en ;
    rdfs:comment "Links enterprise to its organizational hierarchy."@en ;
    rdfs:domain cacontology-enterprises:ChildExploitationEnterprise ;
    rdfs:range cacontology-enterprises:EnterpriseHierarchy .

cacontology-enterprises:hasMember a owl:ObjectProperty ;
    rdfs:label "has member"@en ;
    rdfs:comment "Links enterprise to its members using gUFO collection membership pattern."@en ;
    rdfs:domain cacontology-enterprises:ChildExploitationEnterprise ;
    rdfs:range uco-identity:Person ;
    rdfs:subPropertyOf gufo:isCollectionMemberOf .

cacontology-enterprises:hasNetworkComponent a owl:ObjectProperty ;
    rdfs:label "has network component"@en ;
    rdfs:comment "Links network to its functional components using gUFO component-of pattern."@en ;
    rdfs:domain cacontology-enterprises:NihilisticViolentExtremismNetwork ;
    rdfs:range gufo:Object ;
    rdfs:subPropertyOf gufo:isComponentOf .

cacontology-enterprises:hasNetworkNotorietyQuality a owl:ObjectProperty ;
    rdfs:label "has network notoriety quality"@en ;
    rdfs:comment "Links network to its notoriety as a reified quality."@en ;
    rdfs:domain cacontology-enterprises:NihilisticViolentExtremismNetwork ;
    rdfs:range gufo:Quality .

cacontology-enterprises:identityCorrelationAccuracy a owl:DatatypeProperty ;
    rdfs:label "identity correlation accuracy"@en ;
    rdfs:comment "Accuracy level of identity correlation across platforms (0.0-1.0)."@en ;
    rdfs:domain cacontology-enterprises:IdentityCorrelationAnalysis ;
    rdfs:range xsd:decimal .

cacontology-enterprises:leadershipCount a owl:DatatypeProperty ;
    rdfs:label "leadership count"@en ;
    rdfs:comment "Number of individuals in leadership roles within enterprise."@en ;
    rdfs:domain cacontology-enterprises:ChildExploitationEnterprise ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-enterprises:usesAsCurrency a owl:ObjectProperty ;
    rdfs:label "uses as currency"@en ;
    rdfs:comment "Links content currency system to content used as currency."@en ;
    rdfs:domain cacontology-enterprises:ContentCurrencySystem ;
    rdfs:range cacontology-enterprises:Lorebook .

<https://cacontology.projectvic.org/extremist-enterprises/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Extremist Child Exploitation Enterprise Ontology"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:issued "2025-04-15"^^xsd:date ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "An ontology for representing extremist criminal enterprises engaged in child exploitation, including nihilistic violent extremism (NVE) networks, content compilation systems, and enterprise structures based on analysis of the 764 network case. This ontology is grounded in the Unified Foundational Ontology (UFO) through gUFO."@en ;
    owl:imports <http://purl.org/nemo/gufo>,
        <https://cacontology.projectvic.org/2.11.0>,
        <https://cacontology.projectvic.org/international/2.11.0>,
        <https://ontology.caseontology.org/case/>,
        uco-action:,
        uco-core:,
        uco-observable:,
        uco-role: ;
    owl:versionIRI <https://cacontology.projectvic.org/extremist-enterprises/2.11.0> .

cacontology-forensics:CommunicationPatternAnalysis a owl:Class ;
    rdfs:label "Communication Pattern Analysis"@en ;
    rdfs:comment "Analysis of communication patterns to identify relationships and networks."@en ;
    rdfs:subClassOf cacontology-forensics:UserBehaviorForensics .

cacontology-forensics:HiddenDeviceRecovery a owl:Class ;
    rdfs:label "Hidden Device Recovery"@en ;
    rdfs:comment "Recovery of concealed or hidden electronic storage devices during search operations."@en ;
    rdfs:subClassOf cacontology-forensics:ForensicAcquisitionAction .

cacontology-forensics:K9AssistedForensics a owl:Class ;
    rdfs:label "K9 Assisted Forensics"@en ;
    rdfs:comment "Forensic process enhanced by K9 detection capabilities for electronic storage devices."@en ;
    rdfs:subClassOf cacontology-forensics:ForensicAcquisitionAction .

cacontology-forensics:MobileForensicTool a owl:Class ;
    rdfs:label "Mobile Forensic Tool"@en ;
    rdfs:comment "A tool specialized for mobile device forensics including logical and physical extraction (e.g., Cellebrite UFED, MSAB XRY, Oxygen Detective Suite)."@en ;
    rdfs:subClassOf gufo:Object,
        uco-tool:AnalyticTool .

cacontology-forensics:forensicCopy a owl:ObjectProperty ;
    rdfs:label "forensic copy"@en ;
    rdfs:comment "Links an acquisition action to the forensic copy that was created."@en ;
    rdfs:domain cacontology-forensics:ForensicAcquisitionAction ;
    rdfs:range cacontology-forensics:ForensicImage .

cacontology-forensics:recoveryMethod a owl:DatatypeProperty ;
    rdfs:label "recovery method"@en ;
    rdfs:comment "The method used to recover deleted or hidden files (e.g., 'unallocated space carving', 'file system journal')."@en ;
    rdfs:domain cacontology-forensics:RecoveredFile ;
    rdfs:range xsd:string .

cacontology-grooming:AcceleratedTrustExploitation a owl:Class ;
    rdfs:label "Accelerated Trust Exploitation"@en ;
    rdfs:comment "Rapid exploitation of minimal trust established through pretexts or assistance offers."@en ;
    rdfs:subClassOf cacontology-grooming:RapidEscalationGrooming .

cacontology-grooming:AnonymousInitiation a owl:Class ;
    rdfs:label "Anonymous Initiation"@en ;
    rdfs:comment "Starting contact without revealing true identity or personal information."@en ;
    rdfs:subClassOf cacontology-grooming:AnonymousPlatformContact .

cacontology-grooming:ChildVictim a gufo:Role,
        owl:Class ;
    rdfs:label "Child Victim"@en ;
    rdfs:comment "Minor child who is the target of grooming behavior. When analysis depends on the victim’s exact age at specific grooming events (e.g., 13-or-younger online grooming in 2025), that age SHOULD be represented using one or more cacontology-temporal:AgeAtTimeSituation instances linked to the underlying person."@en ;
    rdfs:subClassOf uco-identity:Person ;
    owl:equivalentClass cacontology-gufo:VictimRole .

cacontology-grooming:CrossInstitutionalGrooming a owl:Class ;
    rdfs:label "Cross Institutional Grooming"@en ;
    rdfs:comment "Grooming targeting students from multiple educational institutions."@en ;
    rdfs:subClassOf cacontology-grooming:EducatorGrooming .

cacontology-grooming:InterstateTransportPlan a owl:Class ;
    rdfs:label "Interstate Transport Plan"@en ;
    rdfs:comment "Planning to transport victim across state lines for illegal purposes."@en ;
    rdfs:subClassOf cacontology-grooming:TravelArrangement .

cacontology-grooming:ManipulationPattern a owl:Class ;
    rdfs:label "Manipulation Pattern"@en ;
    rdfs:comment "Systematic use of psychological manipulation techniques to control victim."@en ;
    rdfs:subClassOf cacontology-grooming:GroomingPattern .

cacontology-grooming:OpportunisticGrooming a owl:Class ;
    rdfs:label "Opportunistic Grooming"@en ;
    rdfs:comment "Grooming that exploits immediate opportunities rather than planned relationship development."@en ;
    rdfs:subClassOf cacontology-grooming:RapidEscalationGrooming .

cacontology-grooming:PublicToPrivateGrooming a owl:Class ;
    rdfs:label "Public to Private Grooming"@en ;
    rdfs:comment "Grooming that transitions from public contact to private exploitation."@en ;
    rdfs:subClassOf cacontology-grooming:PhysicalSpaceGrooming .

cacontology-grooming:SexualExploitation a owl:Class ;
    rdfs:label "Sexual Exploitation"@en ;
    rdfs:comment "Direct exploitation of child for sexual purposes including solicitation of images or performances."@en ;
    rdfs:subClassOf cacontology-grooming:GroomingBehavior .

cacontology-grooming:TrustBuildingBehavior a owl:Class ;
    rdfs:label "Trust Building Behavior"@en ;
    rdfs:comment "Early grooming stage focused on establishing emotional connection with the child victim."@en ;
    rdfs:subClassOf cacontology-grooming:GroomingBehavior .

cacontology-grooming:targetsVictim a owl:ObjectProperty ;
    rdfs:label "targets victim"@en ;
    rdfs:comment "Links grooming behavior to the child victim being targeted."@en ;
    rdfs:domain cacontology-grooming:GroomingBehavior ;
    rdfs:range cacontology-grooming:ChildVictim .

<https://cacontology.projectvic.org/grooming/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Online Grooming & Enticement Ontology"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:issued "2024-12-19"^^xsd:date ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "An ontology for representing online grooming behaviors, enticement patterns, and predatory communication tactics in Internet Crimes Against Children cases, extending UCO and CASE with gUFO foundational ontology enhancements."@en ;
    owl:imports <http://purl.org/nemo/gufo>,
        <https://cacontology.projectvic.org/2.11.0>,
        <https://ontology.unifiedcyberontology.org/uco/action>,
        <https://ontology.unifiedcyberontology.org/uco/core>,
        <https://ontology.unifiedcyberontology.org/uco/identity>,
        <https://ontology.unifiedcyberontology.org/uco/observable>,
        <https://ontology.unifiedcyberontology.org/uco/pattern> ;
    owl:versionIRI <https://cacontology.projectvic.org/grooming/2.11.0> .

cacontology-gufo:assignmentBeginTime a owl:DatatypeProperty ;
    rdfs:label "assignment begin time"@en ;
    rdfs:comment "Temporal point when case assignment begins using gUFO temporal framework."@en ;
    rdfs:domain cacontology-case:CaseAssignment ;
    rdfs:range xsd:dateTime .

cacontology-gufo:assignmentEndTime a owl:DatatypeProperty ;
    rdfs:label "assignment end time"@en ;
    rdfs:comment "Temporal point when case assignment ends using gUFO temporal framework."@en ;
    rdfs:domain cacontology-case:CaseAssignment ;
    rdfs:range xsd:dateTime .

cacontology-gufo:coercionBeginTime a owl:DatatypeProperty ;
    rdfs:label "coercion begin time"@en ;
    rdfs:comment "Temporal point when physical training coercion begins using gUFO temporal framework."@en ;
    rdfs:domain cacontology-athletic:PhysicalTrainingCoercion ;
    rdfs:range xsd:dateTime .

cacontology-gufo:coercionEndTime a owl:DatatypeProperty ;
    rdfs:label "coercion end time"@en ;
    rdfs:comment "Temporal point when physical training coercion ends using gUFO temporal framework."@en ;
    rdfs:domain cacontology-athletic:PhysicalTrainingCoercion ;
    rdfs:range xsd:dateTime .

cacontology-gufo:discoveryBeginTime a owl:DatatypeProperty ;
    rdfs:label "discovery begin time"@en ;
    rdfs:comment "Temporal point when exploitation discovery begins using gUFO temporal framework."@en ;
    rdfs:domain cacontology-athletic:AthleticExploitationDiscovery ;
    rdfs:range xsd:dateTime .

cacontology-gufo:exploitationBeginTime a owl:DatatypeProperty ;
    rdfs:label "exploitation begin time"@en ;
    rdfs:comment "Temporal point when athletic exploitation begins using gUFO temporal framework."@en ;
    rdfs:domain cacontology-athletic:AthleticCoachingExploitation ;
    rdfs:range xsd:dateTime ;
    cacontology-gufo:temporalConstraint "Must precede exploitation end time" .

cacontology-gufo:exploitationEndTime a owl:DatatypeProperty ;
    rdfs:label "exploitation end time"@en ;
    rdfs:comment "Temporal point when athletic exploitation ends using gUFO temporal framework."@en ;
    rdfs:domain cacontology-athletic:AthleticCoachingExploitation ;
    rdfs:range xsd:dateTime .

cacontology-gufo:forfeitureBeginTime a owl:DatatypeProperty ;
    rdfs:label "forfeiture begin time"@en ;
    rdfs:comment "Temporal point when asset forfeiture proceedings begin using gUFO temporal framework."@en ;
    rdfs:domain cacontology-asset-forfeiture:AssetForfeitureAction ;
    rdfs:range xsd:dateTime ;
    cacontology-gufo:temporalConstraint "Must precede forfeiture completion time" .

cacontology-gufo:forfeitureCompletionTime a owl:DatatypeProperty ;
    rdfs:label "forfeiture completion time"@en ;
    rdfs:comment "Temporal point when property forfeiture is finalized using gUFO temporal framework."@en ;
    rdfs:domain cacontology-asset-forfeiture:PropertyForfeitureAction ;
    rdfs:range xsd:dateTime .

cacontology-gufo:forfeitureEndTime a owl:DatatypeProperty ;
    rdfs:label "forfeiture end time"@en ;
    rdfs:comment "Temporal point when asset forfeiture proceedings are completed using gUFO temporal framework."@en ;
    rdfs:domain cacontology-asset-forfeiture:AssetForfeitureAction ;
    rdfs:range xsd:dateTime .

cacontology-gufo:intakeBeginTime a owl:DatatypeProperty ;
    rdfs:label "intake begin time"@en ;
    rdfs:comment "Temporal point when case intake begins using gUFO temporal framework."@en ;
    rdfs:domain cacontology-case:IntakeWorkflow ;
    rdfs:range xsd:dateTime .

cacontology-gufo:penaltyImpositionTime a owl:DatatypeProperty ;
    rdfs:label "penalty imposition time"@en ;
    rdfs:comment "Temporal point when financial penalty is imposed using gUFO temporal framework."@en ;
    rdfs:domain cacontology-asset-forfeiture:FinancialPenaltyAction ;
    rdfs:range xsd:dateTime .

cacontology-gufo:reportingTime a owl:DatatypeProperty ;
    rdfs:label "reporting time"@en ;
    rdfs:comment "Temporal point when exploitation is officially reported using gUFO temporal framework."@en ;
    rdfs:domain cacontology-athletic:AthleticExploitationDiscovery ;
    rdfs:range xsd:dateTime .

cacontology-gufo:restraintBeginTime a owl:DatatypeProperty ;
    rdfs:label "restraint begin time"@en ;
    rdfs:comment "Temporal point when property restraint order is issued using gUFO temporal framework."@en ;
    rdfs:domain cacontology-asset-forfeiture:PropertyRestraintAction ;
    rdfs:range xsd:dateTime .

cacontology-gufo:reviewBeginTime a owl:DatatypeProperty ;
    rdfs:label "review begin time"@en ;
    rdfs:comment "Temporal point when case review begins using gUFO temporal framework."@en ;
    rdfs:domain cacontology-case:CaseReview ;
    rdfs:range xsd:dateTime .

cacontology-gufo:reviewEndTime a owl:DatatypeProperty ;
    rdfs:label "review end time"@en ;
    rdfs:comment "Temporal point when case review ends using gUFO temporal framework."@en ;
    rdfs:domain cacontology-case:CaseReview ;
    rdfs:range xsd:dateTime .

cacontology-gufo:triageCompletionTime a owl:DatatypeProperty ;
    rdfs:label "triage completion time"@en ;
    rdfs:comment "Temporal point when case triage is completed using gUFO temporal framework."@en ;
    rdfs:domain cacontology-case:IntakeWorkflow ;
    rdfs:range xsd:dateTime .

cacontology-gufo:workflowBeginTime a owl:DatatypeProperty ;
    rdfs:label "workflow begin time"@en ;
    rdfs:comment "Temporal point when case workflow begins using gUFO temporal framework."@en ;
    rdfs:domain cacontology-case:CaseWorkflow ;
    rdfs:range xsd:dateTime ;
    cacontology-gufo:temporalConstraint "Must precede workflow end time" .

cacontology-gufo:workflowEndTime a owl:DatatypeProperty ;
    rdfs:label "workflow end time"@en ;
    rdfs:comment "Temporal point when case workflow ends using gUFO temporal framework."@en ;
    rdfs:domain cacontology-case:CaseWorkflow ;
    rdfs:range xsd:dateTime .

cacontology-strategy:AIGenerationPattern a owl:Class ;
    rdfs:label "AI Generation Pattern"@en ;
    rdfs:comment "gUFO pattern for modeling AI generation processes creating synthetic CSAM with algorithmic characteristics."@en ;
    rdfs:subClassOf gufo:Process .

cacontology-strategy:EvidenceObjectPattern a owl:Class ;
    rdfs:label "Evidence Object Pattern"@en ;
    rdfs:comment "gUFO pattern for modeling digital evidence as Objects with intrinsic properties and forensic lifecycle phases."@en ;
    rdfs:subClassOf gufo:Object ;
    cacontology-strategy:requiresValidation cacontology-strategy:OntologicalConsistency,
        cacontology-strategy:TemporalConsistency .

cacontology-strategy:LegalEventPattern a owl:Class ;
    rdfs:label "Legal Event Pattern"@en ;
    rdfs:comment "gUFO pattern for modeling legal events (hearings, sentencing, appeals) with temporal boundaries and legal effects."@en ;
    rdfs:subClassOf gufo:Event .

cacontology-strategy:LowPriorityModule a owl:Class ;
    rdfs:label "Low Priority Module"@en ;
    rdfs:comment "ICAC module requiring gUFO integration in final wave, with specialized or advanced features."@en ;
    rdfs:subClassOf cacontology-strategy:ModuleIntegrationStrategy .

cacontology-strategy:OntologicalConsistency a owl:Class ;
    rdfs:label "Ontological Consistency"@en ;
    rdfs:comment "Validation ensuring proper use of gUFO meta-ontological categories and constraints across modules."@en ;
    rdfs:subClassOf cacontology-strategy:ValidationStrategy .

cacontology-strategy:RegistrationPattern a owl:Class ;
    rdfs:label "Registration Pattern"@en ;
    rdfs:comment "gUFO pattern for modeling sex offender registration as ongoing situation with compliance requirements."@en ;
    rdfs:subClassOf gufo:Situation .

cacontology-strategy:RoleConsistency a owl:Class ;
    rdfs:label "Role Consistency"@en ;
    rdfs:comment "Validation ensuring role modeling follows gUFO anti-rigidity constraints and proper inheritance."@en ;
    rdfs:subClassOf cacontology-strategy:ValidationStrategy .

cacontology-strategy:TaskforceRolePattern a owl:Class ;
    rdfs:label "Taskforce Role Pattern"@en ;
    rdfs:comment "gUFO pattern for modeling roles within ICAC taskforces with specialization and coordination relationships."@en ;
    rdfs:subClassOf gufo:Role ;
    cacontology-strategy:dependsOnPattern cacontology-strategy:OrganizationalPattern ;
    cacontology-strategy:requiresValidation cacontology-strategy:RoleConsistency .

cacontology-strategy:TemporalConsistency a owl:Class ;
    rdfs:label "Temporal Consistency"@en ;
    rdfs:comment "Validation ensuring temporal relationships and constraints are properly modeled across modules."@en ;
    rdfs:subClassOf cacontology-strategy:ValidationStrategy .

cacontology-hotlines:ForwardToLEAction a owl:Class ;
    rdfs:label "Forward to Law Enforcement Action"@en ;
    rdfs:comment "The action of forwarding a report to law enforcement. Enhanced as gUFO Event for inter-agency coordination modeling."@en ;
    rdfs:subClassOf cacontology-hotlines:HotlineAction .

cacontology-hotlines:HashSubmissionAction a owl:Class ;
    rdfs:label "Hash Submission Action"@en ;
    rdfs:comment "The action of submitting a hash to a hash-sharing service. Enhanced as gUFO Event for digital forensics coordination."@en ;
    rdfs:subClassOf cacontology-hotlines:HotlineAction .

cacontology-hotlines:IntakeChannel a owl:Class ;
    rdfs:label "Intake Channel"@en ;
    rdfs:comment "A channel through which reports are received (web form, API, phone, etc.). Enhanced as gUFO Object for comprehensive communication infrastructure modeling."@en,
        "gUFO Object: Communication infrastructure entities enabling report submission through various technological and procedural pathways."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:Observable .

cacontology-hotlines:nextStep a owl:TransitiveProperty ;
    rdfs:label "next step"@en ;
    rdfs:comment "Denotes the chronologically next action in the lifecycle. Enhanced with gUFO temporal sequence modeling."@en ;
    owl:inverseOf cacontology-hotlines:previousStep ;
    owl:propertyChainAxiom ( cacontology-hotlines:hasStep cacontology-hotlines:nextStep ) .

cacontology-hotlines:roleAssignmentTime a owl:DatatypeProperty ;
    rdfs:label "role assignment time"@en ;
    rdfs:comment "The timestamp when a role is assigned."@en ;
    rdfs:domain gufo:Role ;
    rdfs:range xsd:dateTime .

cacontology-infrastructure:CryptocurrencyInfrastructure a owl:Class ;
    rdfs:label "Cryptocurrency Infrastructure"@en ;
    rdfs:comment "Cryptocurrency wallets, exchanges, and payment processing systems used for anonymous financial transactions (gUFO FunctionalComplex)."@en ;
    rdfs:subClassOf cacontology-infrastructure:PaymentProcessing .

cacontology-infrastructure:EncryptionInfrastructure a owl:Class ;
    rdfs:label "Encryption Infrastructure"@en ;
    rdfs:comment "Encryption systems protecting data transmission, storage, and user communications (gUFO FunctionalComplex)."@en ;
    rdfs:subClassOf cacontology-infrastructure:SecurityInfrastructure .

cacontology-infrastructure:NetworkInfrastructure a owl:Class ;
    rdfs:label "Network Infrastructure"@en ;
    rdfs:comment "Network topology and routing infrastructure supporting platform connectivity and distribution (gUFO FunctionalComplex)."@en ;
    rdfs:subClassOf gufo:FunctionalComplex,
        cacontology-infrastructure:PlatformInfrastructure .

cacontology-infrastructure:SubscriptionManagement a owl:Class ;
    rdfs:label "Subscription Management"@en ;
    rdfs:comment "Systems managing user subscriptions, access levels, and recurring payment processing (gUFO FunctionalComplex)."@en ;
    rdfs:subClassOf cacontology-infrastructure:PaymentProcessing .

<https://cacontology.projectvic.org/infrastructure/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Platform Infrastructure Ontology with gUFO Integration"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:issued "2025-05-23"^^xsd:date ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "An ontology for representing technical infrastructure supporting child exploitation platforms, including server architecture, content delivery networks, payment processing, and hosting infrastructure. Enhanced with comprehensive gUFO (gentle Unified Foundational Ontology) integration for enhanced semantic precision, temporal modeling, and quality assessment. Based on analysis of large-scale operations like the Kidflix/Europol takedown involving nearly 2 million users."@en ;
    owl:imports gufo:,
        <https://cacontology.projectvic.org/2.11.0>,
        <https://ontology.unifiedcyberontology.org/uco/action>,
        <https://ontology.unifiedcyberontology.org/uco/core>,
        <https://ontology.unifiedcyberontology.org/uco/identity>,
        <https://ontology.unifiedcyberontology.org/uco/location>,
        <https://ontology.unifiedcyberontology.org/uco/observable> ;
    owl:versionIRI <https://cacontology.projectvic.org/infrastructure/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-institutional:AdultVictimTestimony a gufo:SituationType,
        owl:Class ;
    rdfs:label "Adult Victim Testimony"@en ;
    rdfs:comment "Testimony from adults who were victimized as children in institutional setting."@en ;
    rdfs:subClassOf cacontology-institutional:MultipleVictimTestimony .

cacontology-institutional:CharitableFundingMisuse a gufo:EventType,
        owl:Class ;
    rdfs:label "Charitable Funding Misuse"@en ;
    rdfs:comment "Misuse of charitable funding to facilitate or conceal exploitation activities."@en ;
    rdfs:subClassOf cacontology-institutional:DonorManipulation .

cacontology-institutional:ChildCareInstitution a gufo:SubKind,
        owl:Class ;
    rdfs:label "Child Care Institution"@en ;
    rdfs:comment "Institutional facility providing residential care for children in need."@en ;
    rdfs:subClassOf cacontology-institutional:CharitableOrganization .

cacontology-institutional:ForeignCommerceTravel a gufo:EventType,
        owl:Class ;
    rdfs:label "Foreign Commerce Travel"@en ;
    rdfs:comment "Travel in foreign commerce for purpose of engaging in illicit sexual conduct."@en ;
    rdfs:subClassOf cacontology-institutional:CrossBorderPersonalTravel .

cacontology-institutional:InstitutionalAbuseEvidence a gufo:SituationType,
        owl:Class ;
    rdfs:label "Institutional Abuse Evidence"@en ;
    rdfs:comment "Evidence documenting patterns of abuse within institutional setting."@en ;
    rdfs:subClassOf gufo:Situation,
        uco-observable:ObservableObject .

cacontology-institutional:SupportNetworkDeception a gufo:EventType,
        owl:Class ;
    rdfs:label "Support Network Deception"@en ;
    rdfs:comment "Deception of support networks about true nature of institutional operations."@en ;
    rdfs:subClassOf cacontology-institutional:DonorManipulation .

cacontology-institutional:VulnerablePopulationTargeting a gufo:EventType,
        owl:Class ;
    rdfs:label "Vulnerable Population Targeting"@en ;
    rdfs:comment "Systematic targeting of orphaned, impoverished, or otherwise vulnerable children."@en ;
    rdfs:subClassOf cacontology-institutional:InstitutionalExploitation .

cacontology-institutional:childrenServed a owl:DatatypeProperty ;
    rdfs:label "children served"@en ;
    rdfs:comment "Number of children served by institution during operation."@en ;
    rdfs:domain cacontology-institutional:CharitableOrganization ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-institutional:facilitatedBy a owl:ObjectProperty ;
    rdfs:label "facilitated by"@en ;
    rdfs:comment "Links exploitation to role that facilitated it."@en ;
    rdfs:domain cacontology-institutional:InstitutionalExploitation ;
    rdfs:range cacontology-institutional:TrustedAdultRole .

cacontology-institutional:hasAuthorityLevel a owl:DatatypeProperty ;
    rdfs:label "has authority level"@en ;
    rdfs:comment "Level of authority within institutional hierarchy (gUFO quality aspect)."@en ;
    rdfs:domain cacontology-institutional:TrustedAdultRole ;
    rdfs:range xsd:string .

cacontology-institutional:hasExploitationStartDate a owl:DatatypeProperty ;
    rdfs:label "has exploitation start date"@en ;
    rdfs:comment "Date when exploitation pattern began (gUFO temporal boundary)."@en ;
    rdfs:domain cacontology-institutional:InstitutionalExploitation ;
    rdfs:range xsd:dateTime ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-institutional:hasInstitutionFoundingDate a owl:DatatypeProperty ;
    rdfs:label "has institution founding date"@en ;
    rdfs:comment "Date when institution was founded (gUFO temporal boundary)."@en ;
    rdfs:domain cacontology-institutional:CharitableOrganization ;
    rdfs:range xsd:dateTime ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-institutional:hasRoleStartDate a owl:DatatypeProperty ;
    rdfs:label "has role start date"@en ;
    rdfs:comment "Date when institutional role began (gUFO temporal boundary)."@en ;
    rdfs:domain cacontology-institutional:TrustedAdultRole ;
    rdfs:range xsd:dateTime ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-institutional:hasSystematicityDegree a owl:DatatypeProperty ;
    rdfs:label "has systematicity degree"@en ;
    rdfs:comment "Degree to which exploitation is systematic and organized (gUFO quality aspect)."@en ;
    rdfs:domain cacontology-institutional:SystematicInstitutionalAbuse ;
    rdfs:range xsd:double .

cacontology-institutional:hasTrustLevel a owl:DatatypeProperty ;
    rdfs:label "has trust level"@en ;
    rdfs:comment "Level of trust placed in role by community and children (gUFO quality aspect)."@en ;
    rdfs:domain cacontology-institutional:TrustedAdultRole ;
    rdfs:range xsd:string .

cacontology-institutional:occursWithin a owl:ObjectProperty ;
    rdfs:label "occurs within"@en ;
    rdfs:comment "Links exploitation to institution where it occurs."@en ;
    rdfs:domain cacontology-institutional:InstitutionalExploitation ;
    rdfs:range cacontology-institutional:CharitableOrganization .

cacontology-institutional:victimCount a owl:DatatypeProperty ;
    rdfs:label "victim count"@en ;
    rdfs:comment "Number of victims in institutional exploitation."@en ;
    rdfs:domain cacontology-institutional:InstitutionalExploitation ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-institutional:vulnerabilityType a owl:DatatypeProperty ;
    rdfs:label "vulnerability type"@en ;
    rdfs:comment "Type of vulnerability exploited (orphaned, impoverished, abandoned, disabled)."@en ;
    rdfs:domain cacontology-institutional:VulnerablePopulationTargeting ;
    rdfs:range xsd:string .

<https://cacontology.projectvic.org/institutional-exploitation/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Institutional Exploitation Ontology"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "Ontology for modeling child exploitation within charitable, care, and humanitarian institutions including orphanages, religious organizations, and care facilities. Enhanced with gUFO foundational ontology integration for precise semantic modeling of institutional structures, exploitation patterns, and temporal relationships."@en ;
    owl:imports gufo: ;
    owl:versionIRI <https://cacontology.projectvic.org/institutional-exploitation/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-international:AutomatedCrossMatching a owl:Class ;
    rdfs:label "Automated Cross-Matching"@en ;
    rdfs:comment "Automated system for continuous cross-matching of new data against international databases."@en ;
    rdfs:subClassOf cacontology-international:CrossReferenceAnalysis .

cacontology-international:CrossBorderForensics a owl:Class ;
    rdfs:label "Cross-Border Forensics"@en ;
    rdfs:comment "Forensic analysis requiring coordination across multiple countries for large-scale evidence processing."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-international:CrossBorderThreatAlert a owl:Class ;
    rdfs:label "Cross-Border Threat Alert"@en ;
    rdfs:comment "Alert about threats that require immediate action across multiple countries."@en ;
    rdfs:subClassOf cacontology-international:InstantAlertSystem .

cacontology-international:CrossJurisdictionalInvestigation a owl:Class ;
    rdfs:label "Cross Jurisdictional Investigation"@en ;
    rdfs:comment "Investigation spanning multiple jurisdictions and countries targeting international criminal networks."@en ;
    rdfs:subClassOf cacontology-international:CrossBorderInvestigation .

cacontology-international:DistributedIntelligenceProcessing a owl:Class ;
    rdfs:label "Distributed Intelligence Processing"@en ;
    rdfs:comment "Distributed processing of intelligence across multiple international systems for scalable analysis."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-international:EmergencyCoordinationProtocol a owl:Class ;
    rdfs:label "Emergency Coordination Protocol"@en ;
    rdfs:comment "Protocol for emergency coordination when immediate international response is required."@en ;
    rdfs:subClassOf cacontology-international:RealTimeIntelligenceSharing .

cacontology-international:EuropolCoordination a owl:Class ;
    rdfs:label "Europol Coordination"@en ;
    rdfs:comment "Coordination framework provided by Europol for international law enforcement operations."@en ;
    rdfs:subClassOf cacontology-international:InternationalCoordination .

cacontology-international:FederatedDatabaseQuery a owl:Class ;
    rdfs:label "Federated Database Query"@en ;
    rdfs:comment "Query system enabling simultaneous searches across multiple international databases."@en ;
    rdfs:subClassOf cacontology-international:InternationalDatabase .

cacontology-international:InternationalEvidence a owl:Class ;
    rdfs:label "International Evidence"@en ;
    rdfs:comment "Evidence collected from international operations requiring coordination across multiple jurisdictions."@en ;
    rdfs:subClassOf uco-observable:ObservableObject .

cacontology-international:InternationalHotlineCoordination a owl:Class ;
    rdfs:label "International Hotline Coordination"@en ;
    rdfs:comment "Coordination mechanism between different national hotlines."@en ;
    rdfs:subClassOf cacontology-international:GlobalHotlineNetwork .

cacontology-international:InternationalNetworkDisruption a owl:Class ;
    rdfs:label "International Network Disruption"@en ;
    rdfs:comment "Coordinated international effort to disrupt criminal networks operating across borders."@en ;
    rdfs:subClassOf cacontology-international:CrossJurisdictionalInvestigation .

cacontology-international:InternationalProsecution a owl:Class ;
    rdfs:label "International Prosecution"@en ;
    rdfs:comment "Prosecution strategy coordinated across multiple countries for users identified in large-scale operations."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-international:InternationalResourceCoordination a owl:Class ;
    rdfs:label "International Resource Coordination"@en ;
    rdfs:comment "Coordination of technical and human resources across countries for large-scale operations."@en ;
    rdfs:subClassOf cacontology-international:InternationalCoordination .

cacontology-international:LiveIntelligenceFeed a owl:Class ;
    rdfs:label "Live Intelligence Feed"@en ;
    rdfs:comment "Continuous feed of intelligence updates shared in real-time between international law enforcement agencies."@en ;
    rdfs:subClassOf cacontology-international:RealTimeIntelligenceSharing .

cacontology-international:MassUserAnalysis a owl:Class ;
    rdfs:label "Mass User Analysis"@en ;
    rdfs:comment "Analysis of massive user databases requiring international coordination for processing users across multiple countries."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-international:MultilingualSupport a owl:Class ;
    rdfs:label "Multilingual Support"@en ;
    rdfs:comment "Support for multiple languages in international coordination."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-international:SecureCommunicationChannel a owl:Class ;
    rdfs:label "Secure Communication Channel"@en ;
    rdfs:comment "Encrypted communication channel for secure real-time coordination between international partners."@en ;
    rdfs:subClassOf cacontology-international:RealTimeIntelligenceSharing .

cacontology-international:ThreatAssessmentSharing a owl:Class ;
    rdfs:label "Threat Assessment Sharing"@en ;
    rdfs:comment "Real-time sharing of threat assessments and risk evaluations between international partners."@en ;
    rdfs:subClassOf cacontology-international:RealTimeIntelligenceSharing .

cacontology-international:crossBorderCapability a owl:DatatypeProperty ;
    rdfs:label "cross-border capability"@en ;
    rdfs:comment "Level of capability for cross-border operations."@en ;
    rdfs:domain cacontology-international:CrossBorderOperation ;
    rdfs:range xsd:string .

cacontology-international:informationSharingLevel a owl:DatatypeProperty ;
    rdfs:label "information sharing level"@en ;
    rdfs:comment "Level of information sharing permitted (basic, enhanced, full)."@en ;
    rdfs:domain cacontology-international:InformationSharingAgreement ;
    rdfs:range xsd:string .

cacontology-international:partnerCountryCount a owl:DatatypeProperty ;
    rdfs:label "partner country count"@en ;
    rdfs:comment "Number of countries participating in the partnership."@en ;
    rdfs:domain cacontology-international:InternationalPartnership ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-international:responseTimeInternational a owl:DatatypeProperty ;
    rdfs:label "international response time"@en ;
    rdfs:comment "Response time for international referrals in hours."@en ;
    rdfs:domain cacontology-international:InternationalReferral ;
    rdfs:range xsd:decimal .

cacontology-coord:assignsLiaison a owl:ObjectProperty ;
    rdfs:label "assigns liaison"@en ;
    rdfs:comment "Links coordination to liaison officers."@en ;
    rdfs:domain cacontology-coord:InvestigationCoordination ;
    rdfs:range cacontology-coord:LiaisonOfficer .

cacontology-coord:effectiveDate a owl:DatatypeProperty ;
    rdfs:label "effective date"@en ;
    rdfs:comment "Date when the agreement becomes effective."@en ;
    rdfs:domain cacontology-coord:CoordinationAgreement ;
    rdfs:range xsd:dateTime .

cacontology-coord:expirationDate a owl:DatatypeProperty ;
    rdfs:label "expiration date"@en ;
    rdfs:comment "Date when the agreement expires."@en ;
    rdfs:domain cacontology-coord:CoordinationAgreement ;
    rdfs:range xsd:dateTime .

cacontology-coord:involvesAgency a owl:ObjectProperty ;
    rdfs:label "involves agency"@en ;
    rdfs:comment "Links coordination to participating agencies."@en ;
    rdfs:domain cacontology-coord:InvestigationCoordination ;
    rdfs:range uco-identity:Organization .

<https://cacontology.projectvic.org/investigation-coordination/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Investigation Coordination Ontology"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:issued "2025-01-27"^^xsd:date ;
    dcterms:modified "2026-02-16"^^xsd:date ;
    rdfs:comment "Comprehensive ontology for modeling investigation coordination processes, information sharing, resource sharing, communication protocols, and inter-agency collaboration within ICAC investigations. Enhanced with gUFO (gentle Unified Foundational Ontology) integration for improved semantic precision and validation capabilities."@en ;
    owl:imports gufo:,
        <https://ontology.caseontology.org/case>,
        uco-core: ;
    owl:versionIRI <https://cacontology.projectvic.org/investigation-coordination/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-corruption:UniformEnhancedProduction a gufo:EventType,
        owl:Class ;
    rdfs:label "Uniform Enhanced Production"@en ;
    rdfs:comment "Production of CSAM enhanced by wearing official uniform to project authority."@en ;
    rdfs:subClassOf cacontology-corruption:OfficerProducedCSAM .

cacontology-corruption:corruptionDuration a owl:DatatypeProperty ;
    rdfs:label "corruption duration"@en ;
    rdfs:comment "Duration of corrupt activities in months before detection."@en ;
    rdfs:domain cacontology-corruption:LawEnforcementCorruption ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-corruption:hasDataCompleteness a owl:DatatypeProperty ;
    rdfs:label "has data completeness"@en ;
    rdfs:comment "Data completeness measurement (0.0 to 1.0) - gUFO quality aspect."@en ;
    rdfs:domain [ owl:unionOf ( cacontology-corruption:LawEnforcementCorruption cacontology-corruption:CorruptLawEnforcementOfficer cacontology-corruption:InsiderThreatDetection ) ] ;
    rdfs:range xsd:double ;
    rdfs:subPropertyOf gufo:hasQuality .

cacontology-corruption:hasDataQuality a owl:DatatypeProperty ;
    rdfs:label "has data quality"@en ;
    rdfs:comment "Data quality assessment (poor, fair, good, excellent, validated) - gUFO quality aspect."@en ;
    rdfs:domain [ owl:unionOf ( cacontology-corruption:LawEnforcementCorruption cacontology-corruption:CorruptLawEnforcementOfficer cacontology-corruption:InsiderThreatDetection ) ] ;
    rdfs:range xsd:string ;
    rdfs:subPropertyOf gufo:hasQuality .

cacontology-corruption:hasValidationLevel a owl:DatatypeProperty ;
    rdfs:label "has validation level"@en ;
    rdfs:comment "Validation thoroughness (none, basic, standard, comprehensive, full_verification) - gUFO quality aspect."@en ;
    rdfs:domain [ owl:unionOf ( cacontology-corruption:LawEnforcementCorruption cacontology-corruption:CorruptLawEnforcementOfficer cacontology-corruption:InsiderThreatDetection ) ] ;
    rdfs:range xsd:string ;
    rdfs:subPropertyOf gufo:hasQuality .

cacontology-corruption:participatesIn a owl:ObjectProperty ;
    rdfs:label "participates in"@en ;
    rdfs:comment "Links an officer or organization to corruption activities they participate in - gUFO participation relation."@en ;
    rdfs:domain [ owl:unionOf ( cacontology-corruption:CorruptLawEnforcementOfficer uco-identity:Organization ) ] ;
    rdfs:range cacontology-corruption:LawEnforcementCorruption ;
    rdfs:subPropertyOf gufo:participatedIn .

cacontology-corruption:yearsOfService a owl:DatatypeProperty ;
    rdfs:label "years of service"@en ;
    rdfs:comment "Number of years the officer served before corruption was discovered."@en ;
    rdfs:domain cacontology-corruption:CorruptLawEnforcementOfficer ;
    rdfs:range xsd:nonNegativeInteger .

<https://cacontology.projectvic.org/law-enforcement-corruption/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Law Enforcement Corruption Ontology"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "Ontology for modeling law enforcement corruption and insider threats in child exploitation cases, including uniform-based production and officer trafficking. Enhanced with gUFO (gentle Unified Foundational Ontology) integration for improved semantic precision and validation capabilities."@en ;
    owl:imports gufo: ;
    owl:versionIRI <https://cacontology.projectvic.org/law-enforcement-corruption/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-legal:Correspondence a owl:Class ;
    rdfs:label "Correspondence"@en ;
    rdfs:comment "Communication between actors regarding legislation."@en ;
    rdfs:subClassOf gufo:Object ;
    cacontology-legal:isCountrySpecific false .

cacontology-legal:KnowingParadox a owl:Class ;
    rdfs:label "Knowing Paradox"@en ;
    dcterms:source "Community & Intelligence Beyond Detection (Global Emancipation Network), 2026-02-10."@en ;
    rdfs:comment "A policy incentive conflict where platforms face liability both for detecting content (creating knowledge) and for failing to detect content, discouraging proactive detection."@en ;
    rdfs:seeAlso <https://www.linkedin.com/pulse/community-intelligence-beyond-detection-global-emancipation-network-xvemc/> ;
    rdfs:subClassOf gufo:Situation ;
    cacontology-legal:countryCode "US" ;
    cacontology-legal:isCountrySpecific true ;
    cacontology-legal:jurisdictionScope "US" .

cacontology-legal:LegalCoverageAssessment a gufo:Kind,
        owl:Class ;
    rdfs:label "Legal Coverage Assessment"@en ;
    rdfs:comment "Assessment of legal coverage for child protection."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-legal:appliesToCountry a owl:ObjectProperty ;
    rdfs:label "applies to country"@en ;
    rdfs:comment "Country to which the legislation applies."@en ;
    rdfs:domain cacontology-legal:NationalLegislation ;
    rdfs:range uco-location:Location .

cacontology-legal:hasLegalEffectiveness a owl:DatatypeProperty ;
    rdfs:label "has legal effectiveness"@en ;
    rdfs:comment "Legal effectiveness assessment (ineffective, limited, moderate, effective, highly_effective) - gUFO quality aspect."@en ;
    rdfs:domain [ owl:unionOf ( cacontology-legal:NationalLegislation cacontology-legal:RegionalFramework cacontology-legal:TreatyFramework ) ] ;
    rdfs:range xsd:string ;
    rdfs:subPropertyOf gufo:hasQuality .

cacontology-legal:hasLegalGap a owl:ObjectProperty ;
    rdfs:label "has legal gap"@en ;
    rdfs:comment "Links a jurisdiction to legal gaps it has."@en ;
    rdfs:domain cacontology-multi:Jurisdiction ;
    rdfs:range cacontology-legal:LegalFrameworkGap .

cacontology-legal:hasRole a owl:ObjectProperty ;
    rdfs:label "has role"@en ;
    rdfs:comment "Links an individual to their legislative role."@en ;
    rdfs:domain uco-identity:Person ;
    rdfs:range gufo:Role .

cacontology-legal:isComponentOf a owl:ObjectProperty ;
    rdfs:label "is component of"@en ;
    rdfs:comment "Links legislation to larger legal frameworks - gUFO part-whole relation."@en ;
    rdfs:domain cacontology-legal:NationalLegislation ;
    rdfs:range [ owl:unionOf ( cacontology-legal:RegionalFramework cacontology-legal:TreatyFramework ) ] ;
    rdfs:subPropertyOf gufo:isComponentOf .

cacontology-legal:legalSystemType a owl:DatatypeProperty ;
    rdfs:label "legal system type"@en ;
    rdfs:comment "Type of legal system (common_law, civil_law, religious_law, mixed)."@en ;
    rdfs:domain cacontology-legal:NationalLegislation ;
    rdfs:range xsd:string .

cacontology-multi:AllFBIFieldOfficesOperation a owl:Class ;
    rdfs:label "All FBI Field Offices Operation"@en ;
    rdfs:comment "Operation involving all 55 FBI field offices in coordinated enforcement effort."@en ;
    rdfs:subClassOf cacontology-multi:NationwideOperation .

cacontology-multi:CommunityOutreachTriggeredInvestigation a owl:Class ;
    rdfs:label "Community Outreach Triggered Investigation"@en ;
    rdfs:comment "Investigation triggered by victim disclosure following community outreach presentation."@en ;
    rdfs:subClassOf cacontology-multi:MultiJurisdictionalInvestigation .

cacontology-multi:DistributedProsecutionTeam a owl:Class ;
    rdfs:label "Distributed Prosecution Team"@en ;
    rdfs:comment "Prosecution team distributed across multiple jurisdictions for handling massive caseloads."@en ;
    rdfs:subClassOf uco-identity:Organization .

cacontology-multi:FederalJurisdictionTrigger a owl:Class ;
    rdfs:label "Federal Jurisdiction Trigger"@en ;
    rdfs:comment "Interstate activity that triggers federal jurisdiction."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-multi:JurisdictionalHandoff a owl:Class ;
    rdfs:label "Jurisdictional Handoff"@en ;
    rdfs:comment "Transfer of investigative authority between state and federal agencies."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-multi:ProactiveInvestigationCampaign a owl:Class ;
    rdfs:label "Proactive Investigation Campaign"@en ;
    rdfs:comment "Campaign focused on proactive investigation rather than reactive response."@en ;
    rdfs:subClassOf cacontology-multi:MultiJurisdictionalInvestigation .

cacontology-multi:VictimIdentificationTask a owl:Class ;
    rdfs:label "Victim Identification Task"@en ;
    rdfs:comment "Task focused on identifying new child victims."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-partnerships:EmergencyCoordination a owl:Class ;
    rdfs:label "Emergency Coordination"@en ;
    rdfs:comment "Rapid coordination mechanism for urgent situations requiring immediate partner response. Modeled as gUFO Event."@en ;
    rdfs:subClassOf cacontology-partnerships:CoordinationMechanism .

cacontology-partnerships:JointOperation a owl:Class ;
    rdfs:label "Joint Operation"@en ;
    rdfs:comment "Operation conducted jointly by multiple partners with shared resources and coordination. Modeled as gUFO Event."@en ;
    rdfs:subClassOf cacontology-partnerships:CoordinationMechanism .

cacontology-partnerships:PlatformMonitoring a owl:Class ;
    rdfs:label "Platform Monitoring"@en ;
    rdfs:comment "Cooperative monitoring of platforms and services for illegal content and activities. Modeled as gUFO Event."@en ;
    rdfs:subClassOf cacontology-partnerships:TechnologyCooperation .

cacontology-partnerships:partnershipDuration a owl:DatatypeProperty ;
    rdfs:label "partnership duration"@en ;
    rdfs:comment "Duration of partnership from formation to termination."@en ;
    rdfs:domain cacontology-partnerships:PublicPrivatePartnership ;
    rdfs:range xsd:duration .

<https://cacontology.projectvic.org/partnerships/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Public-Private Partnerships Ontology"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:issued "2025-05-23"^^xsd:date ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "An ontology for representing public-private partnerships, multi-stakeholder coordination, and collaborative frameworks in child protection with gUFO foundational ontology enhancements for improved semantic precision, temporal modeling, and validation capabilities. Based on analysis of Europol's collaborative approaches with technology companies, NGOs, and civil society organizations in initiatives like 'Stop Child Abuse - Trace an Object'."@en ;
    owl:imports <http://purl.org/nemo/gufo>,
        <https://cacontology.projectvic.org/2.11.0>,
        <https://ontology.unifiedcyberontology.org/uco/action>,
        <https://ontology.unifiedcyberontology.org/uco/core>,
        <https://ontology.unifiedcyberontology.org/uco/identity>,
        <https://ontology.unifiedcyberontology.org/uco/observable>,
        <https://ontology.unifiedcyberontology.org/uco/role> ;
    owl:versionIRI <https://cacontology.projectvic.org/partnerships/2.11.0> .

cacontology-physical:Condoms a owl:Class ;
    rdfs:label "Condoms"@en ;
    rdfs:comment "Contraceptive devices found as evidence corroborating intent to engage in sexual activity. Extends AbuseFacilitationItem as physical evidence (NOT a digital observable)."@en ;
    rdfs:subClassOf cacontology-physical:AbuseFacilitationItem .

cacontology-physical:EvidenceCustodianRole a gufo:Role,
        owl:Class ;
    rdfs:label "Evidence Custodian Role"@en ;
    rdfs:comment "Role of person responsible for evidence custody and chain of custody (gUFO Role - anti-rigid)."@en ;
    rdfs:subClassOf uco-identity:Person .

cacontology-physical:VapeDevice a owl:Class ;
    rdfs:label "Vape Device"@en ;
    rdfs:comment "Electronic vaporizer or e-cigarette found as evidence. Often brought to lure or facilitate abuse of minors. Extends AbuseFacilitationItem as physical evidence (NOT a digital observable)."@en ;
    rdfs:subClassOf cacontology-physical:AbuseFacilitationItem .

<https://cacontology.projectvic.org/physical/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Physical Evidence & Procurement Ontology with gUFO Integration"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:issued "2024-12-19"^^xsd:date ;
    dcterms:modified "2026-01-01"^^xsd:date ;
    rdfs:comment "An ontology for representing physical evidence, criminal procurement patterns, and abuse facilitation items in Internet Crimes Against Children investigations, extending UCO and CASE with comprehensive gUFO (gentle Unified Foundational Ontology) integration for enhanced semantic precision and quality assessment, and CASE Investigation ontology for evidence provenance tracking."@en ;
    owl:imports gufo:,
        <https://cacontology.projectvic.org/2.11.0>,
        case-investigation:,
        <https://ontology.unifiedcyberontology.org/uco/action>,
        <https://ontology.unifiedcyberontology.org/uco/core>,
        <https://ontology.unifiedcyberontology.org/uco/identity>,
        <https://ontology.unifiedcyberontology.org/uco/location>,
        <https://ontology.unifiedcyberontology.org/uco/observable> ;
    owl:versionIRI <https://cacontology.projectvic.org/physical/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-platforms:FileHostingService a owl:Class ;
    rdfs:label "File Hosting Service"@en ;
    rdfs:comment "A service for storing and sharing files online (e.g., Google Drive, Dropbox, OneDrive, MEGA). Modeled as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:ObservableObject .

cacontology-platforms:IdentityDisclosurePolicy a owl:Class ;
    rdfs:label "Identity Disclosure Policy"@en ;
    rdfs:comment "Platform policy regarding when and how user identities may be disclosed to other users or authorities."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-platforms:LargeScalePlatformTakedown a owl:Class ;
    rdfs:label "Large Scale Platform Takedown"@en ;
    rdfs:comment "Coordinated takedown of major exploitation platforms with user bases exceeding 1 million accounts, requiring specialized international coordination and mass forensic processing. Modeled as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action ;
    owl:equivalentClass cacontology-gufo:CriminalEvent .

cacontology-platforms:MassUserBehaviorAnalysis a owl:Class ;
    rdfs:label "Mass User Behavior Analysis"@en ;
    rdfs:comment "Analysis of user behavior patterns across massive user bases for investigation prioritization and automated threat assessment. Modeled as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-platforms:PlatformInvestigationCoordination a owl:Class ;
    rdfs:label "Platform Investigation Coordination"@en ;
    rdfs:comment "Coordinated investigation across multiple platforms and devices."@en ;
    rdfs:subClassOf uco-action:Action .

<https://cacontology.projectvic.org/platforms/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Technology Platforms & Service Providers Ontology"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:issued "2024-12-19"^^xsd:date ;
    dcterms:modified "2026-02-16"^^xsd:date ;
    rdfs:comment "An ontology for representing technology platforms, digital services, and Electronic Service Provider (ESP) capabilities in the context of child protection with gUFO foundational ontology enhancements for improved semantic precision, temporal modeling, and validation capabilities, extending UCO and CASE. This ontology covers social media platforms, messaging services, content hosting, and service provider policies and capabilities."@en ;
    owl:imports <http://purl.org/nemo/gufo>,
        <https://cacontology.projectvic.org/2.11.0>,
        <https://ontology.unifiedcyberontology.org/uco/action>,
        <https://ontology.unifiedcyberontology.org/uco/core>,
        <https://ontology.unifiedcyberontology.org/uco/identity>,
        <https://ontology.unifiedcyberontology.org/uco/observable> ;
    owl:versionIRI <https://cacontology.projectvic.org/platforms/2.11.0> .

cacontology-prevention:AffiliateCoordination a owl:Class ;
    rdfs:label "Affiliate Coordination"@en ;
    rdfs:comment "Coordination activities between ICAC affiliate organizations for unified prevention efforts."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-prevention:AffiliateResourceSharing a owl:Class ;
    rdfs:label "Affiliate Resource Sharing"@en ;
    rdfs:comment "Coordinated sharing of educational resources and prevention materials among ICAC affiliates."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-prevention:CommunityEducation a owl:Class ;
    rdfs:label "Community Education"@en ;
    rdfs:comment "Education programs for community members."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-prevention:CommunityEngagement a owl:Class ;
    rdfs:label "Community Engagement"@en ;
    rdfs:comment "Measurement of community engagement in prevention."@en ;
    rdfs:subClassOf cacontology-prevention:PreventionMetrics .

cacontology-prevention:CommunityOutreachEffectiveness a owl:Class ;
    rdfs:label "Community Outreach Effectiveness"@en ;
    rdfs:comment "Measurement of community outreach program effectiveness in generating victim disclosures and arrests."@en ;
    rdfs:subClassOf cacontology-prevention:PreventionMetrics .

cacontology-prevention:DigitalSafety a owl:Class ;
    rdfs:label "Digital Safety"@en ;
    rdfs:comment "Prevention programs focused on digital safety."@en ;
    rdfs:subClassOf cacontology-prevention:PreventionProgram .

cacontology-prevention:DisclosureBarrierReduction a owl:Class ;
    rdfs:label "Disclosure Barrier Reduction"@en ;
    rdfs:comment "Strategies to reduce barriers preventing victim disclosure."@en ;
    rdfs:subClassOf cacontology-prevention:DisclosureEncouragementStrategy .

cacontology-prevention:DisclosureEncouragementStrategy a owl:Class ;
    rdfs:label "Disclosure Encouragement Strategy"@en ;
    rdfs:comment "Strategy for encouraging victims to disclose abuse through education and support."@en ;
    rdfs:subClassOf cacontology-prevention:SafetyProtocol .

cacontology-prevention:EducationPlatformIntegration a owl:Class ;
    rdfs:label "Education Platform Integration"@en ;
    rdfs:comment "Integration capabilities between different educational delivery platforms and content management systems."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-prevention:HealthcareProviderTraining a owl:Class ;
    rdfs:label "Healthcare Provider Training"@en ;
    rdfs:comment "Training for healthcare providers on child protection."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-prevention:ICACAffiliateNetwork a owl:Class ;
    rdfs:label "CAC Affiliate Network"@en ;
    rdfs:comment "Network of formally affiliated ICAC organizations for coordinated child protection efforts."@en ;
    rdfs:subClassOf uco-identity:Organization .

cacontology-prevention:InformationPoster a owl:Class ;
    rdfs:label "Information Poster"@en ;
    rdfs:comment "Physical poster containing educational information and QR codes."@en ;
    rdfs:subClassOf cacontology-prevention:EducationalResource .

cacontology-prevention:MultimediaEducationContent a owl:Class ;
    rdfs:label "Multimedia Education Content"@en ;
    rdfs:comment "Educational content incorporating multiple media types including audio, video, and interactive elements."@en ;
    rdfs:subClassOf cacontology-prevention:EducationalResource .

cacontology-prevention:OnlineSafetyEducation a owl:Class ;
    rdfs:label "Online Safety Education"@en ;
    rdfs:comment "Education about staying safe online."@en ;
    rdfs:subClassOf cacontology-prevention:ChildSafetyEducation .

cacontology-prevention:ParentEducation a owl:Class ;
    rdfs:label "Parent Education"@en ;
    rdfs:comment "Education programs for parents and caregivers."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-prevention:ParentalVigilanceProgram a owl:Class ;
    rdfs:label "Parental Vigilance Program"@en ;
    rdfs:comment "Program educating parents on recognizing signs of child exploitation and reporting."@en ;
    rdfs:subClassOf cacontology-prevention:CommunityOutreach .

cacontology-prevention:PreventionEffectiveness a owl:Class ;
    rdfs:label "Prevention Effectiveness"@en ;
    rdfs:comment "Assessment of prevention program effectiveness."@en ;
    rdfs:subClassOf cacontology-prevention:PreventionMetrics .

cacontology-prevention:PublicAwareness a owl:Class ;
    rdfs:label "Public Awareness"@en ;
    rdfs:comment "Campaigns to raise public awareness about child protection. Modeled as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-prevention:QRCodeIntegration a owl:Class ;
    rdfs:label "QR Code Integration"@en ;
    rdfs:comment "QR code system for discreet access to prevention information."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-prevention:RapidResponseDisclosureWorkflow a owl:Class ;
    rdfs:label "Rapid Response Disclosure Workflow"@en ;
    rdfs:comment "Workflow enabling rapid response from victim disclosure to arrest (e.g., 8-hour timeline)."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-prevention:RiskAssessmentTool a owl:Class ;
    rdfs:label "Risk Assessment Tool"@en ;
    rdfs:comment "Tool for assessing risks to child safety."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-prevention:RiskReduction a owl:Class ;
    rdfs:label "Risk Reduction"@en ;
    rdfs:comment "Measurement of risk reduction achieved."@en ;
    rdfs:subClassOf cacontology-prevention:PreventionMetrics .

cacontology-prevention:SextortionWarningSign a owl:Class ;
    rdfs:label "Sextortion Warning Sign"@en ;
    rdfs:comment "Identifiable warning signs of sextortion activities."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-prevention:TrustedAdultIdentification a owl:Class ;
    rdfs:label "Trusted Adult Identification"@en ;
    rdfs:comment "Education helping children identify trusted adults for disclosure."@en ;
    rdfs:subClassOf cacontology-prevention:DisclosureEncouragementStrategy .

cacontology-prevention:implementationStatus a owl:DatatypeProperty ;
    rdfs:label "implementation status"@en ;
    rdfs:comment "Status of protocol implementation (planned, active, completed)."@en ;
    rdfs:domain cacontology-prevention:SafetyProtocol ;
    rdfs:range xsd:string .

<https://cacontology.projectvic.org/prevention/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Prevention and Education Ontology"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "An ontology for modeling prevention programs, education initiatives, safety protocols, and community outreach efforts for child protection with gUFO foundational ontology enhancements for improved semantic precision, temporal modeling, and validation capabilities."@en ;
    owl:imports <http://purl.org/nemo/gufo> ;
    owl:versionIRI <https://cacontology.projectvic.org/prevention/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-production:DeviceConcealment a owl:Class ;
    rdfs:label "Device Concealment"@en ;
    rdfs:comment "Specific methods and techniques used to hide recording devices for covert surveillance operations."@en ;
    rdfs:subClassOf cacontology-production:ProductionEquipment .

cacontology-production:ProductionVictim a gufo:Role,
        owl:Class ;
    rdfs:label "Production Victim"@en ;
    rdfs:comment "Child victim directly involved in production of sexual abuse material."@en ;
    rdfs:subClassOf uco-role:VictimRole ;
    owl:equivalentClass cacontology-gufo:VictimRole .

cacontology-production:RecordingAction a owl:Class ;
    rdfs:label "Recording Action"@en ;
    rdfs:comment "Action of recording child sexual abuse for the purpose of creating illegal material."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

<https://cacontology.projectvic.org/production/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Child Sexual Abuse Material Production Ontology"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:issued "2024-12-19"^^xsd:date ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "An ontology for representing the production of child sexual abuse material, including recording activities, equipment used, production sessions, and content creation patterns in ICAC investigations, extending UCO and CASE with gUFO foundational ontology enhancements."@en ;
    owl:imports <http://purl.org/nemo/gufo>,
        <https://cacontology.projectvic.org/2.11.0>,
        <https://ontology.unifiedcyberontology.org/uco/action>,
        <https://ontology.unifiedcyberontology.org/uco/core>,
        <https://ontology.unifiedcyberontology.org/uco/identity>,
        <https://ontology.unifiedcyberontology.org/uco/location>,
        <https://ontology.unifiedcyberontology.org/uco/observable>,
        <https://ontology.unifiedcyberontology.org/uco/role> ;
    owl:versionIRI <https://cacontology.projectvic.org/production/2.11.0> .

cacontology-recruitment:AcademicStruggles a owl:Class ;
    rdfs:label "Academic Struggles"@en ;
    rdfs:comment "Academic difficulties creating vulnerability to recruitment offers."@en ;
    rdfs:subClassOf cacontology-recruitment:SchoolVulnerabilityFactor .

cacontology-recruitment:AttendanceProblems a owl:Class ;
    rdfs:label "Attendance Problems"@en ;
    rdfs:comment "School attendance issues that may indicate or facilitate trafficking involvement."@en ;
    rdfs:subClassOf cacontology-recruitment:SchoolVulnerabilityFactor .

cacontology-recruitment:SchoolPoliceContact a owl:Class ;
    rdfs:label "School Police Contact"@en ;
    rdfs:comment "Contact made by school personnel to law enforcement regarding trafficking concerns."@en ;
    rdfs:subClassOf cacontology-recruitment:SchoolBasedReporting .

cacontology-recruitment:VictimSchoolDisclosure a owl:Class ;
    rdfs:label "Victim School Disclosure"@en ;
    rdfs:comment "Disclosure by trafficking victim to school personnel about their situation."@en ;
    rdfs:subClassOf cacontology-recruitment:SchoolBasedReporting .

cacontology-recruitment:reportingStaffRole a owl:DatatypeProperty ;
    rdfs:label "reporting staff role"@en ;
    rdfs:comment "Role of school staff member making the report (social_worker, counselor, teacher, administrator)."@en ;
    rdfs:domain cacontology-recruitment:SchoolBasedReporting ;
    rdfs:range xsd:string .

cacontology-recruitment:successfulRecruitments a owl:DatatypeProperty ;
    rdfs:label "successful recruitments"@en ;
    rdfs:comment "Number of successful recruitments achieved through network."@en ;
    rdfs:domain cacontology-recruitment:VictimMediatedRecruitment ;
    rdfs:range xsd:nonNegativeInteger .

<https://cacontology.projectvic.org/recruitment-networks/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Recruitment Networks Ontology"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:issued "2025-01-08"^^xsd:date ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "An ontology for representing peer recruitment networks, classmate-mediated trafficking, educational institution reporting, and social recruitment patterns in child exploitation cases. Based on analysis of Brooklyn DA cases involving victim recruitment through existing trafficking victims."@en ;
    owl:imports <https://cacontology.projectvic.org/2.11.0>,
        <https://cacontology.projectvic.org/trafficking/2.11.0>,
        <https://ontology.unifiedcyberontology.org/uco/action>,
        <https://ontology.unifiedcyberontology.org/uco/core>,
        <https://ontology.unifiedcyberontology.org/uco/identity>,
        <https://ontology.unifiedcyberontology.org/uco/location>,
        <https://ontology.unifiedcyberontology.org/uco/observable>,
        <https://ontology.unifiedcyberontology.org/uco/role> ;
    owl:versionIRI <https://cacontology.projectvic.org/recruitment-networks/2.11.0> .

cacontology-sentencing:CSAM_Possession a owl:Class ;
    rdfs:label "CSAM Possession"@en ;
    rdfs:comment "Charge for possession of child sexual abuse material. Modeled as gUFO Object."@en ;
    rdfs:subClassOf cacontology-sentencing:FederalCharge .

cacontology-sentencing:CommonwealthChildAbuseOffense a owl:Class ;
    rdfs:label "Commonwealth Child Abuse Offense"@en ;
    rdfs:comment "Child abuse offense under Commonwealth law subject to mandatory minimum sentencing provisions. Modeled as gUFO Object."@en ;
    rdfs:subClassOf cacontology-sentencing:FederalCharge .

cacontology-sentencing:ComputerSeduceSolicitLure a owl:Class ;
    rdfs:label "Using Computer to Seduce Solicit or Lure Child"@en ;
    rdfs:comment "Florida state charge for using a computer to seduce, solicit, or lure a child to engage in sexual conduct. Covers electronic communication with minors for sexual purposes. Modeled as gUFO Object."@en ;
    rdfs:subClassOf cacontology-sentencing:FloridaStateCharge ;
    skos:altLabel "Computer Solicitation of a Minor"@en ;
    skos:definition "F.S. 847.0135(3) - Use of computer services to solicit, lure, or entice a child."@en .

cacontology-sentencing:ContributingToDelinquency a owl:Class ;
    rdfs:label "Contributing to Delinquency or Dependency of Child"@en ;
    rdfs:comment "Florida state charge for contributing to the delinquency or dependency of a child. Applies when adult actions contribute to a child becoming delinquent or dependent. Modeled as gUFO Object."@en ;
    rdfs:subClassOf cacontology-sentencing:FloridaStateCharge ;
    skos:definition "F.S. 827.04 - Contributing to the delinquency or dependency of a child."@en .

cacontology-sentencing:DirectPromotionOfSexualPerformance a owl:Class ;
    rdfs:label "Direct Promotion of Sexual Performance by a Child"@en ;
    rdfs:comment "Florida state charge for direct promotion of a sexual performance by a child. Applies when defendant promotes, directs, or produces sexual conduct involving a minor. Modeled as gUFO Object."@en ;
    rdfs:subClassOf cacontology-sentencing:FloridaStateCharge ;
    skos:definition "F.S. 827.071(4) - Promoting sexual performance by a child."@en .

cacontology-sentencing:PrisonSentence a owl:Class ;
    rdfs:label "Prison Sentence"@en ;
    rdfs:comment "Sentence involving incarceration in federal or state prison. Modeled as gUFO Object."@en ;
    rdfs:subClassOf cacontology-sentencing:CriminalSentence .

cacontology-sentencing:StateCharge a owl:Class ;
    rdfs:label "State Charge"@en ;
    rdfs:comment "Criminal charge under state law and jurisdiction. Modeled as gUFO Object."@en ;
    rdfs:subClassOf cacontology-sentencing:CriminalCharge .

cacontology-sentencing:TravelingToMeetAfterComputerLure a owl:Class ;
    rdfs:label "Traveling To Meet After Computer Lure"@en ;
    rdfs:comment "Florida state charge for traveling to meet after using a computer to lure a child. Applies when defendant uses electronic communication to lure a child and then travels to meet them. Modeled as gUFO Object."@en ;
    rdfs:subClassOf cacontology-sentencing:FloridaStateCharge ;
    skos:altLabel "Traveling to Meet a Minor"@en ;
    skos:definition "F.S. 847.0135(4) - Traveling to meet a minor after using computer services or devices."@en .

cacontology-sentencing:chargeClassification a owl:DatatypeProperty ;
    rdfs:label "charge classification"@en ;
    rdfs:comment "Florida charge classification (capital_felony, life_felony, first_degree_felony, etc.)."@en ;
    rdfs:domain cacontology-sentencing:FloridaStateCharge ;
    rdfs:range xsd:string .

cacontology-sentencing:electronicCommunicationUsed a owl:DatatypeProperty ;
    rdfs:label "electronic communication used"@en ;
    rdfs:comment "Indicates whether electronic communication was used in the offense."@en ;
    rdfs:domain cacontology-sentencing:FloridaStateCharge ;
    rdfs:range xsd:boolean .

cacontology-sentencing:floridaStatute a owl:DatatypeProperty ;
    rdfs:label "florida statute"@en ;
    rdfs:comment "Reference to Florida Statute section for the charge (e.g., 'F.S. 847.0135')."@en ;
    rdfs:domain cacontology-sentencing:FloridaStateCharge ;
    rdfs:range xsd:string .

cacontology-sentencing:travelOccurred a owl:DatatypeProperty ;
    rdfs:label "travel occurred"@en ;
    rdfs:comment "Indicates whether actual travel occurred in traveling to meet charges."@en ;
    rdfs:domain cacontology-sentencing:TravelingToMeetAfterComputerLure ;
    rdfs:range xsd:boolean .

<https://cacontology.projectvic.org/sentencing/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Legal Outcomes & Sentencing Ontology"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:issued "2024-12-19"^^xsd:date ;
    dcterms:modified "2026-02-16"^^xsd:date ;
    rdfs:comment "An ontology for representing legal outcomes, federal sentences, judicial proceedings, and punishment guidelines in Internet Crimes Against Children cases with gUFO foundational ontology enhancements for improved semantic precision, temporal modeling, and validation capabilities, extending UCO and CASE."@en ;
    owl:imports <http://purl.org/nemo/gufo>,
        <https://cacontology.projectvic.org/2.11.0>,
        <https://cacontology.projectvic.org/sex-offender-registry/2.11.0>,
        <https://ontology.unifiedcyberontology.org/uco/action>,
        <https://ontology.unifiedcyberontology.org/uco/core>,
        <https://ontology.unifiedcyberontology.org/uco/identity>,
        <https://ontology.unifiedcyberontology.org/uco/location>,
        <https://ontology.unifiedcyberontology.org/uco/observable>,
        <https://ontology.unifiedcyberontology.org/uco/role> ;
    owl:versionIRI <https://cacontology.projectvic.org/sentencing/2.11.0> .

cacontology-registry:ComplianceViolation a owl:Class ;
    rdfs:label "Compliance Violation"@en ;
    rdfs:comment "Violation of sex offender registration requirements."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-registry:CrossStateRecidivism a owl:Class ;
    rdfs:label "Cross State Recidivism"@en ;
    rdfs:comment "Pattern of recidivism involving offenses across state boundaries."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-registry:OffenderProfile a owl:Class ;
    rdfs:label "Offender Profile"@en ;
    rdfs:comment "Comprehensive profile of registered sex offender including all required information."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-registry:OnlineIdentifier a owl:Class ;
    rdfs:label "Online Identifier"@en ;
    rdfs:comment "Online username, email, or identifier used by registered sex offender."@en ;
    rdfs:subClassOf uco-identity:Identity .

cacontology-registry:ProfessionalLicense a owl:Class ;
    rdfs:label "Professional License"@en ;
    rdfs:comment "Professional license held by registered sex offender."@en ;
    rdfs:subClassOf uco-observable:ObservableObject .

cacontology-registry:VehicleInformation a owl:Class ;
    rdfs:label "Vehicle Information"@en ;
    rdfs:comment "Information about vehicles owned or operated by registered sex offender."@en ;
    rdfs:subClassOf uco-observable:ObservableObject .

cacontology-registry:WorkLocation a owl:Class ;
    rdfs:label "Work Location"@en ;
    rdfs:comment "Location where registered sex offender is employed."@en ;
    rdfs:subClassOf uco-location:Location .

cacontology-sextortion:ComplianceResponse a owl:Class ;
    rdfs:label "Compliance Response"@en ;
    rdfs:comment "Victim complies with initial requests before recognizing threat."@en ;
    rdfs:subClassOf cacontology-sextortion:VictimResponse .

cacontology-sextortion:ConversationReconstruction a owl:Class ;
    rdfs:label "Conversation Reconstruction"@en ;
    rdfs:comment "Reconstruction of conversation patterns and progression timelines."@en ;
    rdfs:subClassOf cacontology-sextortion:SextortionInvestigation .

cacontology-sextortion:DoxxingThreat a owl:Class ;
    rdfs:label "Doxxing Threat"@en ;
    dcterms:source "Know2Protect brochure (K2P SOE Information.pdf), normalized.txt line 40."@en ;
    rdfs:comment "Threat mechanism involving doxxing (threatened release of identifying/personal information) to intimidate or coerce a victim."@en ;
    rdfs:seeAlso <https://know2protect.gov> ;
    rdfs:subClassOf cacontology-sextortion:ThreatMechanism .

cacontology-sextortion:ProgressiveEscalation a owl:Class ;
    rdfs:label "Progressive Escalation"@en ;
    rdfs:comment "Gradual increase in sexual content and requests to avoid triggering victim resistance."@en ;
    rdfs:subClassOf cacontology-sextortion:ManipulationTactic .

cacontology-sextortion:PropertyDestructionThreat a owl:Class ;
    rdfs:label "Property Destruction Threat"@en ;
    dcterms:source "Know2Protect brochure (K2P SOE Information.pdf), normalized.txt line 46."@en ;
    rdfs:comment "Threat mechanism involving destruction of property to compel compliance (e.g., 'destruction' threats in sadistic sextortion framing)."@en ;
    rdfs:seeAlso <https://know2protect.gov> ;
    rdfs:subClassOf cacontology-sextortion:ThreatMechanism .

cacontology-sextortion:SelfHarmThreat a owl:Class ;
    rdfs:label "Self-Harm Threat"@en ;
    dcterms:source "Know2Protect brochure (K2P SOE Information.pdf), normalized.txt lines 40-46."@en ;
    rdfs:comment "Threat mechanism involving threats that compel or pressure the victim to engage in self-harm as a condition of compliance."@en ;
    rdfs:seeAlso <https://know2protect.gov> ;
    rdfs:subClassOf cacontology-sextortion:ThreatMechanism .

cacontology-sextortion:SharingThreat a owl:Class ;
    rdfs:label "Sharing Threat"@en ;
    rdfs:comment "Threat to share intimate images with contacts, family, or publicly."@en ;
    rdfs:subClassOf cacontology-sextortion:ThreatMechanism .

cacontology-sextortion:SwattingThreat a owl:Class ;
    rdfs:label "Swatting Threat"@en ;
    dcterms:source "Know2Protect brochure (K2P SOE Information.pdf), normalized.txt line 40."@en ;
    rdfs:comment "Threat mechanism involving swatting (threatened or induced false emergency report leading to armed law enforcement response) to intimidate or coerce a victim."@en ;
    rdfs:seeAlso <https://know2protect.gov> ;
    rdfs:subClassOf cacontology-sextortion:ThreatMechanism .

cacontology-sextortion:ViolenceThreat a owl:Class ;
    rdfs:label "Violence Threat"@en ;
    dcterms:source "Know2Protect brochure (K2P SOE Information.pdf), normalized.txt line 46."@en ;
    rdfs:comment "Threat mechanism involving threatened physical violence to compel compliance."@en ;
    rdfs:seeAlso <https://know2protect.gov> ;
    rdfs:subClassOf cacontology-sextortion:ThreatMechanism .

cacontology-sextortion:employsThreat a owl:ObjectProperty ;
    rdfs:label "employs threat"@en ;
    rdfs:comment "Links incident to specific threat mechanisms used."@en ;
    rdfs:domain cacontology-sextortion:SextortionIncident ;
    rdfs:range cacontology-sextortion:ThreatMechanism .

cacontology-sextortion:victimCount a owl:DatatypeProperty ;
    rdfs:label "victim count"@en ;
    rdfs:comment "Number of victims involved in sextortion incident (e.g., 3 girls under 16)."@en ;
    rdfs:domain cacontology-sextortion:SextortionIncident ;
    rdfs:range xsd:nonNegativeInteger .

<https://cacontology.projectvic.org/sextortion/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Sextortion Ontology"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:issued "2025-05-23"^^xsd:date ;
    dcterms:modified "2026-02-11"^^xsd:date ;
    rdfs:comment "An ontology for representing sextortion incidents, progression patterns, and investigation approaches in Internet Crimes Against Children cases. Sextortion is online blackmail where offenders trick or coerce someone into sending sexual images, then threaten to share unless demands are met."@en ;
    owl:imports <https://cacontology.projectvic.org/2.11.0>,
        <https://ontology.unifiedcyberontology.org/uco/action>,
        <https://ontology.unifiedcyberontology.org/uco/core>,
        <https://ontology.unifiedcyberontology.org/uco/identity>,
        <https://ontology.unifiedcyberontology.org/uco/observable>,
        <https://ontology.unifiedcyberontology.org/uco/role>,
        <https://ontology.unifiedcyberontology.org/uco/types> ;
    owl:versionIRI <https://cacontology.projectvic.org/sextortion/2.11.0> .

<https://cacontology.projectvic.org/soe/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Sadistic Online Exploitation (SOE) Ontology"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:issued "2026-02-11"^^xsd:date ;
    dcterms:modified "2026-02-11"^^xsd:date ;
    rdfs:comment "An ontology for representing Sadistic Online Exploitation (SOE) networks and SOE-specific ritualized/coordinated coercion event patterns, aligned to DHS/Know2Protect definitional framing. This module is intentionally narrow and is designed to reuse extremist-enterprises concepts (e.g., cross-platform coordination, platform migration, self-harm coercion) when an extremist-enterprise modeling frame is evidenced."@en ;
    owl:imports <http://purl.org/nemo/gufo>,
        <https://cacontology.projectvic.org/2.11.0>,
        uco-action:,
        uco-core:,
        uco-identity: ;
    owl:versionIRI <https://cacontology.projectvic.org/soe/2.11.0> .

<https://cacontology.projectvic.org/specialized-units/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Specialized Units Ontology"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "An ontology for modeling specialized units including K9 detection programs, officer wellness support, advanced investigative capabilities, seasonal operations, and affiliate management in ICAC operations with gUFO foundational ontology enhancements for improved semantic precision, temporal modeling, and validation capabilities."@en ;
    owl:imports <http://purl.org/nemo/gufo> ;
    owl:versionIRI <https://cacontology.projectvic.org/specialized-units/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-street:AgeVulnerabilityIndicator a owl:Class ;
    rdfs:label "Age Vulnerability Indicator"@en ;
    rdfs:comment "Apparent youth or minor status making individual vulnerable to exploitation."@en ;
    rdfs:subClassOf cacontology-street:PhysicalVulnerabilityIndicator .

cacontology-street:BehavioralVulnerabilityIndicator a owl:Class ;
    rdfs:label "Behavioral Vulnerability Indicator"@en ;
    rdfs:comment "Behavioral patterns indicating vulnerability (isolation, confusion, seeking help)."@en ;
    rdfs:subClassOf cacontology-street:VulnerabilityIndicator .

cacontology-street:CasualConversationApproach a owl:Class ;
    rdfs:label "Casual Conversation Approach"@en ;
    rdfs:comment "Approach through seemingly innocent casual conversation to assess vulnerability."@en ;
    rdfs:subClassOf cacontology-street:InitialStreetContact .

cacontology-street:EconomicIncentivePresentation a owl:Class ;
    rdfs:label "Economic Incentive Presentation"@en ;
    rdfs:comment "Presentation of financial benefits and earning potential from commercial sexual activity."@en ;
    rdfs:subClassOf cacontology-street:DirectTraffickingProposition .

cacontology-street:HelpSeekingBehavior a owl:Class ;
    rdfs:label "Help Seeking Behavior"@en ;
    rdfs:comment "Victim's attempts to seek help or report trafficking recruitment."@en ;
    rdfs:subClassOf cacontology-street:VictimStreetResponse .

cacontology-street:ImpairmentExploitation a owl:Class ;
    rdfs:label "Impairment Exploitation"@en ;
    rdfs:comment "Exploitation of victim while impaired by substances to reduce resistance."@en ;
    rdfs:subClassOf cacontology-street:SubstanceBasedControl .

cacontology-street:IsolationVulnerabilityIndicator a owl:Class ;
    rdfs:label "Isolation Vulnerability Indicator"@en ;
    rdfs:comment "Indicators that individual is alone or lacks social support (walking alone, no companions)."@en ;
    rdfs:subClassOf cacontology-street:VulnerabilityIndicator .

cacontology-street:PhysicalVulnerabilityIndicator a owl:Class ;
    rdfs:label "Physical Vulnerability Indicator"@en ;
    rdfs:comment "Physical appearance or condition indicating vulnerability (youth, fatigue, distress)."@en ;
    rdfs:subClassOf cacontology-street:VulnerabilityIndicator .

cacontology-street:ProstitutionProposition a owl:Class ;
    rdfs:label "Prostitution Proposition"@en ;
    rdfs:comment "Direct proposition to engage in prostitution or selling sexual services."@en ;
    rdfs:subClassOf cacontology-street:ExplicitCommercialOffer .

cacontology-street:ResidentialArea a owl:Class ;
    rdfs:label "Residential Area"@en ;
    rdfs:comment "Residential neighborhoods where victims may be walking or living."@en ;
    rdfs:subClassOf cacontology-street:StreetRecruitmentLocation .

cacontology-street:SubstanceBasedControl a owl:Class ;
    rdfs:label "Substance Based Control"@en ;
    rdfs:comment "Use of substance dependency or impairment to maintain control over victim."@en ;
    rdfs:subClassOf cacontology-street:SubstanceFacilitatedRecruitment .

cacontology-street:TransportationOfferApproach a owl:Class ;
    rdfs:label "Transportation Offer Approach"@en ;
    rdfs:comment "Offer of rides or transportation to isolated locations for exploitation."@en ;
    rdfs:subClassOf cacontology-street:HelpOfferApproach .

<https://cacontology.projectvic.org/street/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Street-Based Recruitment & Opportunistic Exploitation Ontology"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:issued "2025-05-28"^^xsd:date ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "Specialized ontology for modeling street-based trafficking recruitment, opportunistic exploitation, and public space predatory behavior, based on cases like Brooklyn DA v. Deandre Lee (2024)."@en ;
    owl:imports <https://ontology.caseontology.org/case>,
        uco-core: ;
    owl:versionIRI <https://cacontology.projectvic.org/street/2.11.0> .

cacontology-synthesis:KeyFinding a owl:Class ;
    rdfs:label "Key Finding"@en ;
    rdfs:comment "A numbered key finding stated by a report."@en ;
    rdfs:subClassOf cacontology-synthesis:Claim .

cacontology-synthesis:OffendingChain a owl:Class ;
    rdfs:label "Offending Chain"@en ;
    rdfs:comment "A conceptual chain of activities in TF-CSEA used to locate interventions."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-synthesis:ReportFigure a owl:Class ;
    rdfs:label "Report Figure"@en ;
    rdfs:comment "A figure within a report (e.g., PRISMA diagram, distribution charts)."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-synthesis:ReportSection a owl:Class ;
    rdfs:label "Report Section"@en ;
    rdfs:comment "A logical section of a report (e.g., Synopsis, Methods, Findings)."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-synthesis:supportedByEvidencePointer a owl:ObjectProperty ;
    rdfs:label "supported by evidence pointer"@en ;
    rdfs:comment "Links a claim (or other assertion-like node) to the text evidence pointer supporting it."@en ;
    rdfs:domain cacontology-synthesis:Claim ;
    rdfs:range cacontology-synthesis:TextEvidencePointer .

<https://cacontology.projectvic.org/synthesis/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Knowledge Synthesis Ontology"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:modified "2026-02-20"^^xsd:date ;
    rdfs:comment "An ontology for representing structured knowledge extracted from research reports (sections, figures, claims, distributions, and evidence pointers) to support queryable synthesis across CAC-related sources."@en ;
    owl:imports <https://cacontology.projectvic.org/2.11.0>,
        <https://cacontology.projectvic.org/legal-harmonization/2.11.0>,
        <https://cacontology.projectvic.org/multi-jurisdiction/2.11.0>,
        case-investigation:,
        uco-action:,
        uco-core:,
        uco-identity:,
        uco-observable: ;
    owl:versionIRI <https://cacontology.projectvic.org/synthesis/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-tactical:ArrestReport a owl:Class ;
    rdfs:label "Arrest Report"@en ;
    rdfs:comment "Formal arrest report documenting the arrest including charges, evidence, and suspect information. Extends investigation:ProvenanceRecord for evidence tracking."@en ;
    rdfs:subClassOf gufo:Object,
        case-investigation:ProvenanceRecord .

cacontology-tactical:BarricadeSituation a owl:Class ;
    rdfs:label "Barricade Situation"@en ;
    rdfs:comment "Situation where suspect has barricaded themselves and refuses to surrender."@en ;
    rdfs:subClassOf cacontology-tactical:TacticalOperation .

cacontology-tactical:SurrenderNegotiation a owl:Class ;
    rdfs:label "Surrender Negotiation"@en ;
    rdfs:comment "Attempt to negotiate peaceful surrender of barricaded or resistant suspects."@en ;
    rdfs:subClassOf cacontology-tactical:TacticalOperation .

cacontology-tactical:targetCount a owl:DatatypeProperty ;
    rdfs:label "target count"@en ;
    rdfs:comment "Number of individuals targeted for arrest."@en ;
    rdfs:domain cacontology-tactical:ArrestOperation ;
    rdfs:range xsd:nonNegativeInteger .

<https://cacontology.projectvic.org/tactical/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Tactical Law Enforcement Operations Ontology"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:issued "2024-12-19"^^xsd:date ;
    dcterms:modified "2026-01-01"^^xsd:date ;
    rdfs:comment "An ontology for representing tactical law enforcement operations including SWAT operations, high-risk arrests, and specialized tactical procedures in Internet Crimes Against Children investigations, extending UCO and CASE with CASE Investigation ontology integration."@en ;
    owl:imports gufo:,
        <https://cacontology.projectvic.org/2.11.0>,
        case-investigation:,
        <https://ontology.unifiedcyberontology.org/uco/action>,
        <https://ontology.unifiedcyberontology.org/uco/core>,
        <https://ontology.unifiedcyberontology.org/uco/identity>,
        <https://ontology.unifiedcyberontology.org/uco/location>,
        <https://ontology.unifiedcyberontology.org/uco/observable>,
        <https://ontology.unifiedcyberontology.org/uco/role> ;
    owl:versionIRI <https://cacontology.projectvic.org/tactical/2.11.0> .

cacontology-taskforce:AnnualPerformance a owl:Class ;
    rdfs:label "Annual Performance"@en ;
    rdfs:comment "Year-specific performance metrics for task force operations."@en ;
    rdfs:subClassOf cacontology-taskforce:TaskForceMetrics .

cacontology-taskforce:CountyBasedTaskForce a owl:Class ;
    rdfs:label "County-Based Task Force"@en ;
    rdfs:comment "ICAC task force hosted by and primarily serving specific county jurisdiction."@en ;
    rdfs:subClassOf cacontology-taskforce:RegionalTaskForce .

cacontology-taskforce:MetropolitanTaskForce a owl:Class ;
    rdfs:label "Metropolitan Task Force"@en ;
    rdfs:comment "ICAC task force covering major metropolitan area (Los Angeles, Dallas, Houston, NYC)."@en ;
    rdfs:subClassOf cacontology-taskforce:RegionalTaskForce .

cacontology-taskforce:NationalHotline a owl:Class ;
    rdfs:label "National Hotline"@en ;
    rdfs:comment "National ICAC hotline (877-798-7682) for general information and coordination."@en ;
    rdfs:subClassOf cacontology-taskforce:TaskForceContactInformation .

cacontology-taskforce:RegionalTaskForceCoordination a owl:Class ;
    rdfs:label "Regional Task Force Coordination"@en ;
    rdfs:comment "Coordination mechanism between multiple task forces within the same state."@en ;
    rdfs:subClassOf cacontology-taskforce:CoordinationMechanism .

cacontology-taskforce:TaskForceHotline a owl:Class ;
    rdfs:label "Task Force Hotline"@en ;
    rdfs:comment "Dedicated phone line for ICAC task force operations and reporting."@en ;
    rdfs:subClassOf cacontology-taskforce:TaskForceContactInformation .

cacontology-taskforce:TaskForceWebsite a owl:Class ;
    rdfs:label "Task Force Website"@en ;
    rdfs:comment "Official website for ICAC task force with resources and information."@en ;
    rdfs:subClassOf cacontology-taskforce:TaskForceContactInformation .

<https://cacontology.projectvic.org/taskforce/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Task Force Organization Ontology"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:issued "2024-12-19"^^xsd:date ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "An ontology for representing ICAC task force structures, specialized units, coordination mechanisms, resource sharing, and joint operations in Internet Crimes Against Children investigations, extending UCO and CASE with gUFO foundational ontology enhancements."@en ;
    owl:imports <http://purl.org/nemo/gufo>,
        <https://cacontology.projectvic.org/2.11.0>,
        <https://ontology.unifiedcyberontology.org/uco/action>,
        <https://ontology.unifiedcyberontology.org/uco/core>,
        <https://ontology.unifiedcyberontology.org/uco/identity>,
        <https://ontology.unifiedcyberontology.org/uco/observable>,
        <https://ontology.unifiedcyberontology.org/uco/role> ;
    owl:versionIRI <https://cacontology.projectvic.org/taskforce/2.11.0> .

cacontology-temporal:Age a owl:Class ;
    rdfs:label "Age Quality"@en ;
    rdfs:comment "Age of a person modeled as a gUFO Quality whose concrete value is attributed in time-bounded situations. Intended for age-of-consent, Romeo-and-Juliet, and other age-dependent legal reasoning."@en ;
    rdfs:subClassOf gufo:Quality .

cacontology-temporal:InvestigationLifecycle a gufo:Kind,
        owl:Class ;
    rdfs:label "Investigation Lifecycle"@en ;
    rdfs:comment "Complete temporal structure of ICAC investigation from initiation to closure. Modeled as gUFO Kind with definite phase sequence and temporal constraints."@en ;
    rdfs:subClassOf gufo:Process .

cacontology-temporal:RoleTransition a owl:Class ;
    rdfs:label "Role Transition"@en ;
    rdfs:comment "Event representing change in person's role within investigation. Modeled as gUFO Event with role change effects."@en ;
    rdfs:subClassOf gufo:Event .

cacontology-temporal:transitionsFrom a owl:ObjectProperty ;
    rdfs:label "transitions from"@en ;
    rdfs:comment "Links phase transition event to source phase."@en ;
    rdfs:domain cacontology-temporal:PhaseTransitionEvent ;
    rdfs:range gufo:Phase .

cacontology-temporal:transitionsTo a owl:ObjectProperty ;
    rdfs:label "transitions to"@en ;
    rdfs:comment "Links phase transition event to target phase."@en ;
    rdfs:domain cacontology-temporal:PhaseTransitionEvent ;
    rdfs:range gufo:Phase .

cacontology-trafficking:TraffickingVictimRescue a owl:Class ;
    rdfs:label "Trafficking Victim Rescue"@en ;
    rdfs:comment "Specialized rescue operation for trafficking victims involving multiple agencies and victim services. Modeled as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-trafficking:VictimControl a owl:Class ;
    rdfs:label "Victim Control"@en ;
    rdfs:comment "Methods used to maintain psychological and physical control over trafficking victims. Modeled as gUFO Event."@en ;
    rdfs:subClassOf cacontology-trafficking:TraffickingOperation .

cacontology-training:CriminalJusticeTraining a owl:Class ;
    rdfs:label "Criminal Justice Training"@en ;
    rdfs:comment "Training for criminal justice professionals on child protection. Modeled as gUFO Event."@en ;
    rdfs:subClassOf cacontology-training:InternationalTraining .

cacontology-training:DigitalForensicsTraining a owl:Class ;
    rdfs:label "Digital Forensics Training"@en ;
    rdfs:comment "Training on digital forensics techniques for child protection cases. Modeled as gUFO Event."@en ;
    rdfs:subClassOf cacontology-training:InternationalTraining .

cacontology-training:HybridTraining a owl:Class ;
    rdfs:label "Hybrid Training"@en ;
    rdfs:comment "Training combining online and in-person delivery. Modeled as gUFO Event."@en ;
    rdfs:subClassOf cacontology-training:InternationalTraining .

cacontology-training:InPersonTraining a owl:Class ;
    rdfs:label "In-Person Training"@en ;
    rdfs:comment "Training delivered in physical classroom settings. Modeled as gUFO Event."@en ;
    rdfs:subClassOf cacontology-training:InternationalTraining .

cacontology-training:InternationalTrainer a gufo:Role,
        owl:Class ;
    rdfs:label "International Trainer"@en ;
    rdfs:comment "Trainer delivering international training programs. Modeled as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf uco-role:Role .

cacontology-training:OnlineTraining a owl:Class ;
    rdfs:label "Online Training"@en ;
    rdfs:comment "Training delivered through online platforms. Modeled as gUFO Event."@en ;
    rdfs:subClassOf cacontology-training:InternationalTraining .

cacontology-training:TrainingMetrics a owl:Class ;
    rdfs:label "Training Metrics"@en ;
    rdfs:comment "Metrics measuring training effectiveness and reach. Modeled as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-training:TrainingModule a owl:Class ;
    rdfs:label "Training Module"@en ;
    rdfs:comment "Individual training module covering specific topics. Modeled as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

<https://cacontology.projectvic.org/training/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Training and Capacity Building Ontology"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "An ontology for modeling professional development, training programs, and capacity building initiatives for child protection professionals with gUFO foundational ontology enhancements for improved semantic precision, temporal modeling, and validation capabilities, based on ICMEC's training of 155,000+ professionals globally."@en ;
    owl:imports <http://purl.org/nemo/gufo> ;
    owl:versionIRI <https://cacontology.projectvic.org/training/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-undercover:AdvertisementPhotographyEvidence a owl:Class ;
    rdfs:label "Advertisement Photography Evidence"@en ;
    rdfs:comment "Photographic evidence of minor victims posted in trafficking advertisements."@en ;
    rdfs:subClassOf cacontology-undercover:OperationalEvidence .

cacontology-undercover:ClientCommunicationInterception a owl:Class ;
    rdfs:label "Client Communication Interception"@en ;
    rdfs:comment "Interception of phone communications between traffickers, victims, and clients."@en ;
    rdfs:subClassOf cacontology-undercover:PhoneInstructionMonitoring .

cacontology-undercover:CriminalItemAgreementAction a owl:Class ;
    rdfs:label "Criminal Item Agreement Action"@en ;
    rdfs:comment "Suspect agreeing to bring items for abuse (condoms, vape, alcohol, etc.)."@en ;
    rdfs:subClassOf cacontology-undercover:SuspectCommunicationAction .

cacontology-undercover:ExplicitMessageRequestAction a owl:Class ;
    rdfs:label "Explicit Message Request Action"@en ;
    rdfs:comment "Suspect requesting explicit pictures or content from undercover persona."@en ;
    rdfs:subClassOf cacontology-undercover:SuspectCommunicationAction .

cacontology-undercover:InPersonMeetingSolicitation a owl:Class ;
    rdfs:label "In Person Meeting Solicitation"@en ;
    rdfs:comment "Targeting individuals who seek to arrange in-person meetings with minors for illegal purposes."@en ;
    rdfs:subClassOf cacontology-undercover:UndercoverChatInvestigation .

cacontology-undercover:MinorPersonaOperation a owl:Class ;
    rdfs:label "Minor Persona Operation"@en ;
    rdfs:comment "Undercover operation where agents pose as minors to identify individuals seeking inappropriate contact."@en ;
    rdfs:subClassOf cacontology-undercover:SocialMediaUndercoverOperation .

cacontology-undercover:PrivacyViolationInvestigation a owl:Class ;
    rdfs:label "Privacy Violation Investigation"@en ;
    rdfs:comment "Investigation of trafficking activities involving forced undressing and privacy violations."@en ;
    rdfs:subClassOf cacontology-undercover:UndercoverOperation .

cacontology-undercover:SiblingPersonaOperation a owl:Class ;
    rdfs:label "Sibling Persona Operation"@en ;
    rdfs:comment "Undercover operation where agent creates related minor personas (siblings)."@en ;
    rdfs:subClassOf cacontology-undercover:MultiplePersonaOperation .

cacontology-undercover:SocialMediaAgent a owl:Class ;
    rdfs:label "Social Media Agent"@en ;
    rdfs:comment "Agent specialized in social media platform undercover operations."@en ;
    rdfs:subClassOf cacontology-undercover:UndercoverAgent .

cacontology-undercover:VictimInstructionEvidence a owl:Class ;
    rdfs:label "Victim Instruction Evidence"@en ;
    rdfs:comment "Evidence of traffickers providing phones and instructions to victims for client communication."@en ;
    rdfs:subClassOf cacontology-undercover:OperationalEvidence .

cacontology-undercover:VideoCallRequestAction a owl:Class ;
    rdfs:label "Video Call Request Action"@en ;
    rdfs:comment "Suspect requesting video call with undercover persona, often to confirm alone or for explicit purposes."@en ;
    rdfs:subClassOf cacontology-undercover:SuspectCommunicationAction .

<https://cacontology.projectvic.org/undercover/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Undercover Operations Ontology"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:issued "2024-12-19"^^xsd:date ;
    dcterms:modified "2026-01-01"^^xsd:date ;
    rdfs:comment "An ontology for representing undercover law enforcement operations in Internet Crimes Against Children investigations, extending UCO and CASE with gUFO foundational ontology enhancements. This ontology covers undercover identities, infiltration tactics, surveillance operations, and evidence collection through covert means."@en ;
    owl:imports <http://purl.org/nemo/gufo>,
        <https://cacontology.projectvic.org/2.11.0>,
        <https://ontology.unifiedcyberontology.org/uco/action>,
        <https://ontology.unifiedcyberontology.org/uco/core>,
        <https://ontology.unifiedcyberontology.org/uco/identity>,
        <https://ontology.unifiedcyberontology.org/uco/observable>,
        <https://ontology.unifiedcyberontology.org/uco/role> ;
    owl:versionIRI <https://cacontology.projectvic.org/undercover/2.11.0> .

<https://cacontology.projectvic.org/us/ncmec/2.11.0> a owl:Ontology ;
    rdfs:label "NCMEC Cybertip Report Ontology (US Extension)"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:issued "2024-03-20"^^xsd:date ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "An ontology for representing concepts specific to NCMEC Cybertip reports as an extension to the core ICAC ontology. Version 2.11.0."@en ;
    owl:imports cacontology1: ;
    owl:versionIRI <https://cacontology.projectvic.org/us/ncmec/2.11.0> .

cacontology-us-ncmec1:AccountLinking a owl:Class ;
    rdfs:label "Account Linking"@en ;
    rdfs:comment "Process of linking digital accounts to suspects through NCMEC tip analysis."@en ;
    rdfs:subClassOf cacontology-us-ncmec1:CyberTipAnalysis .

cacontology-us-ncmec1:PhoneNumberTrace a owl:Class ;
    rdfs:label "Phone Number Trace"@en ;
    rdfs:comment "Tracing of phone numbers linked to accounts in NCMEC tips."@en ;
    rdfs:subClassOf cacontology-us-ncmec1:CyberTipAnalysis .

cacontology-us-ncmec1:TransferDetection a owl:Class ;
    rdfs:label "Transfer Detection"@en ;
    rdfs:comment "Detection of transfer or sharing of child sexual abuse material."@en ;
    rdfs:subClassOf cacontology-us-ncmec1:CyberTipAnalysis .

cacontology-usa-federal:CEOSAttorneyRole a gufo:Role,
        owl:Class ;
    rdfs:label "CEOS Attorney Role"@en ;
    rdfs:comment "Role of DOJ CEOS attorney specializing in child exploitation prosecution. Modeled as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf cacontology-usa-federal:FederalProsecutorRole .

cacontology-usa-federal:ChildPornographyDistribution a gufo:EventType,
        owl:Class ;
    rdfs:label "Child Pornography Distribution"@en ;
    rdfs:comment "Federal crime of distributing child pornography across state or international boundaries. Modeled as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-usa-federal:FederalChildPornographyLaw ;
    owl:equivalentClass cacontology-usa-federal:ChildPornographyDistribution .

cacontology-usa-federal:ExtraterritorialProduction a gufo:EventType,
        owl:Class ;
    rdfs:label "Extraterritorial Production"@en ;
    rdfs:comment "Federal crime of producing child pornography outside U.S. by U.S. citizens or residents. Modeled as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-usa-federal:ExtraterritorialSexualExploitationLaw ;
    owl:equivalentClass cacontology-usa-federal:ExtraterritorialProduction .

cacontology-usa-federal:ForeignCommerceExploitation a gufo:EventType,
        owl:Class ;
    rdfs:label "Foreign Commerce Exploitation"@en ;
    rdfs:comment "Federal crime involving sexual exploitation of children in foreign commerce. Modeled as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-usa-federal:ExtraterritorialSexualExploitationLaw ;
    owl:equivalentClass cacontology-usa-federal:ForeignCommerceExploitation .

cacontology-usa-federal:ObscenityDistribution a gufo:EventType,
        owl:Class ;
    rdfs:label "Obscenity Distribution"@en ;
    rdfs:comment "Federal crime of distributing obscene materials through interstate or foreign commerce. Modeled as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-usa-federal:FederalObscenityLaw ;
    owl:equivalentClass cacontology-usa-federal:ObscenityDistribution .

cacontology-usa-federal:SexTourism a gufo:EventType,
        owl:Class ;
    rdfs:label "Sex Tourism"@en ;
    rdfs:comment "Federal crime of traveling abroad with intent to engage in sexual conduct with minors. Modeled as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-usa-federal:ExtraterritorialSexualExploitationLaw ;
    owl:equivalentClass cacontology-usa-federal:SexTourism .

cacontology-usa-federal:SexTraffickingOfMinors a gufo:EventType,
        owl:Class ;
    rdfs:label "Sex Trafficking of Minors"@en ;
    rdfs:comment "Federal crime of sex trafficking involving minors, including recruitment, harboring, transportation, or obtaining. Modeled as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-usa-federal:FederalChildSexTraffickingLaw ;
    owl:equivalentClass cacontology-usa-federal:SexTraffickingOfMinors .

cacontology-usa-federal:TransportationForSexualExploitation a gufo:EventType,
        owl:Class ;
    rdfs:label "Transportation for Sexual Exploitation"@en ;
    rdfs:comment "Federal crime of transporting minors across international boundaries for sexual exploitation. Modeled as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-usa-federal:ExtraterritorialSexualExploitationLaw ;
    owl:equivalentClass cacontology-usa-federal:TransportationForSexualExploitation .

cacontology-usa-federal:crimeSeverityLevel a owl:DatatypeProperty ;
    rdfs:label "crime severity level"@en ;
    rdfs:comment "Severity classification of federal crime (gUFO quality aspect)."@en ;
    rdfs:domain gufo:Event ;
    rdfs:range xsd:integer .

cacontology-usa-federal:defendedBy a owl:ObjectProperty ;
    rdfs:label "defended by"@en ;
    rdfs:comment "Links criminal event to defendant (gUFO participation)."@en ;
    rdfs:domain gufo:Event ;
    rdfs:range cacontology-usa-federal:FederalDefendantRole ;
    rdfs:subPropertyOf gufo:participantIn .

cacontology-usa-federal:hasLegalPhase a owl:ObjectProperty ;
    rdfs:label "has legal phase"@en ;
    rdfs:comment "Links federal prosecution to its constituent phases (gUFO part-whole)."@en ;
    rdfs:domain cacontology-usa-federal:FederalProsecution ;
    rdfs:range gufo:Phase ;
    rdfs:subPropertyOf gufo:isObjectProperPartOf .

cacontology-usa-federal:investigatedBy a owl:ObjectProperty ;
    rdfs:label "investigated by"@en ;
    rdfs:comment "Links federal investigation event to investigating agent (gUFO participation)."@en ;
    rdfs:domain cacontology-usa-federal:FederalInvestigation ;
    rdfs:range cacontology-usa-federal:FederalInvestigatorRole ;
    rdfs:subPropertyOf gufo:participantIn .

cacontology-usa-federal:mandatoryMinimumSentence a owl:DatatypeProperty ;
    rdfs:label "mandatory minimum sentence"@en ;
    rdfs:comment "Mandatory minimum sentence for federal crime in years (gUFO quality aspect)."@en ;
    rdfs:domain gufo:Event ;
    rdfs:range xsd:integer .

cacontology-usa-federal:prosecutedBy a owl:ObjectProperty ;
    rdfs:label "prosecuted by"@en ;
    rdfs:comment "Links federal prosecution event to prosecuting attorney (gUFO participation)."@en ;
    rdfs:domain cacontology-usa-federal:FederalProsecution ;
    rdfs:range cacontology-usa-federal:FederalProsecutorRole ;
    rdfs:subPropertyOf gufo:participantIn .

cacontology-usa-federal:roleExperience a owl:DatatypeProperty ;
    rdfs:label "role experience"@en ;
    rdfs:comment "Years of experience in federal legal role (gUFO quality aspect)."@en ;
    rdfs:domain gufo:Role ;
    rdfs:range xsd:integer .

cacontology-usa-federal:roleSpecialization a owl:DatatypeProperty ;
    rdfs:label "role specialization"@en ;
    rdfs:comment "Area of specialization for federal legal role (gUFO quality aspect)."@en ;
    rdfs:domain gufo:Role ;
    rdfs:range xsd:string .

cacontology-usa-federal:victimizedBy a owl:ObjectProperty ;
    rdfs:label "victimized by"@en ;
    rdfs:comment "Links criminal event to victim (gUFO participation)."@en ;
    rdfs:domain gufo:Event ;
    rdfs:range cacontology-usa-federal:FederalVictimRole ;
    rdfs:subPropertyOf gufo:participantIn .

<https://cacontology.projectvic.org/usa-federal-law/2.11.0> a owl:Ontology ;
    dcterms:created "2025-01-03"^^xsd:date ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:description "Comprehensive semantic framework for U.S. federal child exploitation and obscenity laws with gUFO foundational ontology grounding for enhanced semantic precision, temporal modeling, and validation capabilities. Based on DOJ CEOS guidelines and models federal statutes, prosecution mechanisms, extraterritorial crimes, child support enforcement intersection, and obscenity law frameworks."@en ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    dcterms:title "ICAC USA Federal Child Exploitation and Obscenity Law Ontology"@en ;
    rdfs:comment "Based on US DOJ Child Exploitation and Obscenity Section (CEOS) Citizens Guide to U.S. Federal Child Exploitation and Obscenity Laws. Grounded in gUFO foundational ontology."@en ;
    owl:imports <http://purl.org/nemo/gufo> ;
    owl:versionIRI <https://cacontology.projectvic.org/usa-federal-law/2.11.0> .

cacontology-usa-leg:USFederalDirectorate a owl:Class ;
    rdfs:label "U.S. Federal Directorate"@en ;
    rdfs:comment "Directorate or division within a sub-cabinet agency."@en ;
    rdfs:subClassOf gufo:Organization,
        uco-identity:Organization ;
    cacontology-legal:countryCode "US" ;
    cacontology-legal:isCountrySpecific true ;
    cacontology-legal:jurisdictionScope "US" .

cacontology-usa-leg:USStateAgency a owl:Class ;
    rdfs:label "U.S. State Agency"@en ;
    rdfs:comment "Agency of a U.S. state government."@en ;
    rdfs:subClassOf gufo:Organization,
        uco-identity:Organization ;
    cacontology-legal:countryCode "US" ;
    cacontology-legal:isCountrySpecific true ;
    cacontology-legal:jurisdictionScope "US" .

<https://cacontology.projectvic.org/usa-legislative/2.11.0> a owl:Ontology ;
    rdfs:label "CAC USA Legislative Framework Ontology"@en ;
    dcterms:created "2026-01-27"^^xsd:date ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:modified "2026-01-27"^^xsd:date ;
    rdfs:comment "USA-specific legislative framework ontology for modeling U.S. federal agencies, congressional committees, state organizations, legislative stages, and funding mechanisms. Extends CAC Legal Harmonization with gUFO integration."@en ;
    owl:imports gufo:,
        <https://cacontology.projectvic.org/legal-harmonization/2.11.0>,
        <https://cacontology.projectvic.org/multi-jurisdiction/2.11.0> ;
    owl:versionIRI <https://cacontology.projectvic.org/usa-legislative/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-impact:HelpSeekingBarrier a owl:Class ;
    rdfs:label "Help Seeking Barrier"@en ;
    rdfs:comment "Factor that prevents or impedes victim from seeking help (fear, control, isolation, trauma bonding)."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-impact:VictimSafetyPlanning a owl:Class ;
    rdfs:label "Victim Safety Planning"@en ;
    rdfs:comment "Development of safety plan for trafficking victim to prevent re-victimization."@en ;
    rdfs:subClassOf cacontology-impact:VictimSupport .

<https://cacontology.projectvic.org/victim-impact/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Victim Impact Assessment Ontology"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:issued "2024-12-19"^^xsd:date ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "An ontology for representing victim impact assessments, psychological harm, trauma indicators, therapeutic interventions, and recovery processes in Internet Crimes Against Children investigations, extending UCO and CASE with gUFO foundational ontology enhancements."@en ;
    owl:imports <http://purl.org/nemo/gufo>,
        <https://cacontology.projectvic.org/2.11.0>,
        <https://ontology.unifiedcyberontology.org/uco/action>,
        <https://ontology.unifiedcyberontology.org/uco/core>,
        <https://ontology.unifiedcyberontology.org/uco/identity>,
        <https://ontology.unifiedcyberontology.org/uco/observable>,
        <https://ontology.unifiedcyberontology.org/uco/role> ;
    owl:versionIRI <https://cacontology.projectvic.org/victim-impact/2.11.0> .

cacontology-abduction:FacialConcealment a owl:Class ;
    rdfs:label "Facial Concealment"@en ;
    rdfs:comment "Concealment of facial features to prevent identification."@en ;
    rdfs:subClassOf cacontology-abduction:DisguiseBasedConcealment .

cacontology-ai:AIContentInvestigationSituation a owl:Class ;
    rdfs:label "AI Content Investigation Situation"@en ;
    rdfs:comment "Complex situation involving multiple stakeholders, technologies, and legal frameworks for investigating AI-generated CSAM."@en ;
    rdfs:subClassOf gufo:Situation ;
    cacontology-gufo:involvesSituation "Multi-jurisdictional AI-CSAM investigation coordination" .

cacontology-ai:Nudification a owl:Class ;
    rdfs:label "Nudification"@en ;
    dcterms:source "Community & Intelligence Beyond Detection (Global Emancipation Network), 2026-02-10."@en ;
    rdfs:comment "AI content generation/manipulation process that produces synthetic nudity (e.g., 'nudifying apps' / nudifying functionalities) from existing media. Modeled as a gUFO Event and UCO Action."@en ;
    rdfs:seeAlso <https://www.linkedin.com/pulse/community-intelligence-beyond-detection-global-emancipation-network-xvemc/> ;
    rdfs:subClassOf gufo:Event,
        cacontology-ai:AIContentGeneration .

cacontology-ai:artificialnessLevel a owl:DatatypeProperty ;
    rdfs:label "artificialness level"@en ;
    rdfs:comment "Degree of artificial generation (fully_synthetic, partially_altered, minimally_modified)."@en ;
    rdfs:domain cacontology-ai:AIGeneratedCSAM ;
    rdfs:range xsd:string .

cacontology-asset-forfeiture:FinancialAccount a owl:Class ;
    rdfs:label "Financial Account"@en ;
    rdfs:comment "Bank account or financial instrument subject to restraint or forfeiture. Enhanced as gUFO Object for financial asset modeling."@en,
        "gUFO Object: Financial instruments with quantifiable value and transactional history."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:ObservableObject .

cacontology-asset-forfeiture:FinancialPenaltyAction a owl:Class ;
    rdfs:label "Financial Penalty Action"@en ;
    rdfs:comment "Court-ordered financial penalty equal to benefits derived from child exploitation offenses. Enhanced as gUFO Event for penalty proceedings."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-asset-forfeiture:AssetForfeitureAction ;
    cacontology-gufo:hasTemporalProperty cacontology-gufo:penaltyImpositionTime .

cacontology-asset-forfeiture:JurisdictionalCoordination a owl:Class ;
    rdfs:label "Jurisdictional Coordination"@en ;
    rdfs:comment "Complex coordination situation involving multiple legal jurisdictions for asset forfeiture operations. gUFO Situation for inter-jurisdictional modeling."@en,
        "gUFO Situation: Multi-party coordination contexts involving different legal authorities, jurisdictions, and procedural requirements."@en ;
    rdfs:subClassOf gufo:Situation .

cacontology-asset-forfeiture:LegalBasisForForfeiture a owl:Class ;
    rdfs:label "Legal Basis for Forfeiture"@en ;
    rdfs:comment "Legal justification and framework for asset forfeiture action. Enhanced as gUFO Object for legal framework modeling."@en,
        "gUFO Object: Legal frameworks and justifications with structured parameters and precedential value."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:ObservableObject .

cacontology-asset-forfeiture:PropertyForfeitureAction a owl:Class ;
    rdfs:label "Property Forfeiture Action"@en ;
    rdfs:comment "Legal action resulting in permanent forfeiture of property to the Commonwealth or state. Enhanced as gUFO Event with completion modeling."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-asset-forfeiture:AssetForfeitureAction ;
    cacontology-gufo:hasTemporalProperty cacontology-gufo:forfeitureCompletionTime .

cacontology-asset-forfeiture:PropertyRestraintAction a owl:Class ;
    rdfs:label "Property Restraint Action"@en ;
    rdfs:comment "Legal action to restrain property pending forfeiture proceedings, preventing disposal or transfer. Enhanced as gUFO Event with restraint temporal modeling."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-asset-forfeiture:AssetForfeitureAction ;
    cacontology-gufo:hasTemporalProperty cacontology-gufo:restraintBeginTime .

cacontology-asset-forfeiture:ResidentialProperty a owl:Class ;
    rdfs:label "Residential Property"@en ;
    rdfs:comment "Residential home subject to restraint or forfeiture in child exploitation cases. Enhanced as gUFO Object for comprehensive property modeling."@en,
        "gUFO Object: Physical property entities with measurable value and legal ownership characteristics."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:ObservableObject .

cacontology-asset-forfeiture:TechnicalEquipment a owl:Class ;
    rdfs:label "Technical Equipment"@en ;
    rdfs:comment "Technical equipment used in child exploitation offenses (cameras, computers, drones, etc.). Enhanced as gUFO Object for equipment modeling."@en,
        "gUFO Object: Technical devices and equipment with specific capabilities and forensic significance."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:ObservableObject .

cacontology-athletic:TeamBasedExploitation a owl:Class ;
    rdfs:label "Team Based Exploitation"@en ;
    rdfs:comment "Exploitation using team dynamics, group pressure, and collective team authority. Enhanced as gUFO Situation for complex team coordination."@en,
        "gUFO Situation: Complex multi-party coordination contexts involving team members, coaches, and authority structures."@en ;
    rdfs:subClassOf gufo:Situation,
        cacontology-athletic:AthleticCoachingExploitation .

cacontology-case:IntakeWorkflow a owl:Class ;
    rdfs:label "Intake Workflow"@en ;
    rdfs:comment "Initial case intake and assessment workflow including triage and preliminary evaluation. Enhanced as gUFO Event."@en,
        "gUFO Event: Intake processes with defined temporal boundaries and assessment outcomes."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-case:CaseWorkflow ;
    cacontology-gufo:hasTemporalProperty cacontology-gufo:intakeBeginTime,
        cacontology-gufo:triageCompletionTime .

cacontology-detection:FalsePositiveAnalysisAction a owl:Class ;
    rdfs:label "False Positive Analysis Action"@en ;
    rdfs:comment "The action of analyzing and documenting false positive detections to improve accuracy. Modeled as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-educational:ClassroomBasedExploitation a owl:Class ;
    rdfs:label "Classroom Based Exploitation"@en ;
    rdfs:comment "Sexual exploitation occurring within classroom setting during academic activities. Enhanced as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-educational:TeacherStudentExploitation .

<https://cacontology.projectvic.org/educational/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Educational Institution Exploitation Ontology with gUFO Integration"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:issued "2025-05-28"^^xsd:date ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "Specialized ontology for modeling child exploitation within educational institutions, including educator-perpetrated crimes, institutional vulnerabilities, and educational safeguarding, based on cases like Brooklyn DA v. Winston Nguyen (2025). Enhanced with gUFO foundational ontology for improved semantic precision, anti-rigidity modeling for roles and phases, complex situational modeling, and comprehensive temporal constraint validation."@en ;
    owl:imports <http://purl.org/nemo/gufo>,
        <https://ontology.caseontology.org/case>,
        uco-core: ;
    owl:versionIRI <https://cacontology.projectvic.org/educational/2.11.0> .

cacontology-enterprises:AlternateAccountSystem a gufo:Kind,
        owl:Class ;
    rdfs:label "Alternate Account System"@en ;
    rdfs:comment "System of alternate accounts (alts) used to evade platform restrictions and maintain operations."@en ;
    rdfs:subClassOf gufo:FunctionalComplex,
        uco-core:UcoObject .

cacontology-enterprises:MembershipAdvancementSystem a gufo:SubKind,
        owl:Class ;
    rdfs:label "Membership Advancement System"@en ;
    rdfs:comment "System governing member advancement within enterprise based on content contributions and activities."@en ;
    rdfs:subClassOf gufo:FunctionalComplex,
        cacontology-enterprises:ContentCurrencySystem .

cacontology-enterprises:NetworkMappingInvestigation a gufo:EventType,
        owl:Class ;
    rdfs:label "Network Mapping Investigation"@en ;
    rdfs:comment "Investigation mapping the structure and relationships within extremist child exploitation networks."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-enterprises:TrustBuildingProcess a gufo:EventType,
        owl:Class ;
    rdfs:label "Trust Building Process"@en ;
    rdfs:comment "Process of building trust with vulnerable victims before exploitation begins."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-enterprises:SocialEngineeringCampaign .

cacontology-forensics:ElectronicStorageDeviceDetection a owl:Class ;
    rdfs:label "Electronic Storage Device Detection"@en ;
    rdfs:comment "Specialized detection of electronic storage devices using K9 or advanced scanning methods."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-forensics:RecoveredFile a owl:Class ;
    rdfs:label "Recovered File"@en ;
    rdfs:comment "A file recovered from deleted or unallocated space on digital media through forensic analysis techniques."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:File .

cacontology-forensics:acquisitionMethod a owl:DatatypeProperty ;
    rdfs:label "acquisition method"@en ;
    rdfs:comment "The method used for forensic acquisition (e.g., 'physical', 'logical', 'live', 'chip-off')."@en ;
    rdfs:domain cacontology-forensics:ForensicAcquisitionAction ;
    rdfs:range xsd:string .

cacontology-forensics:verificationHash a owl:ObjectProperty ;
    rdfs:label "verification hash"@en ;
    rdfs:comment "Links a forensic artifact to its verification hash digest for integrity checking."@en ;
    rdfs:range uco-types:Hash .

cacontology-forensics:writeBlockingUsed a owl:DatatypeProperty ;
    rdfs:label "write blocking used"@en ;
    rdfs:comment "Indicates whether write-blocking hardware or software was used during acquisition."@en ;
    rdfs:domain cacontology-forensics:ForensicAcquisitionAction ;
    rdfs:range xsd:boolean .

<https://cacontology.projectvic.org/forensics/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Digital Forensics Ontology"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:issued "2024-12-19"^^xsd:date ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "An ontology for representing digital forensics concepts specific to Internet Crimes Against Children investigations, extending UCO and CASE with gUFO foundational ontology enhancements. This ontology provides forensic acquisition, chain of custody, evidence handling, and tool provenance capabilities."@en ;
    owl:imports <http://purl.org/nemo/gufo>,
        <https://cacontology.projectvic.org/2.11.0>,
        <https://ontology.caseontology.org/case/>,
        uco-action:,
        uco-core:,
        uco-observable:,
        uco-tool: ;
    owl:versionIRI <https://cacontology.projectvic.org/forensics/2.11.0> .

cacontology-grooming:EliteInstitutionTargeting a owl:Class ;
    rdfs:label "Elite Institution Targeting"@en ;
    rdfs:comment "Targeting of students from elite or prestigious educational institutions."@en ;
    rdfs:subClassOf cacontology-grooming:VictimTargeting .

cacontology-grooming:OnlineToOfflineProgression a owl:Class ;
    rdfs:label "Online to Offline Progression"@en ;
    rdfs:comment "Escalation from online grooming to arranging physical meetings or contact."@en ;
    rdfs:subClassOf cacontology-grooming:EscalationPattern .

cacontology-grooming:PeerPersonaGrooming a owl:Class ;
    rdfs:label "Peer Persona Grooming"@en ;
    rdfs:comment "Grooming using false peer identity to establish rapport with victims."@en ;
    rdfs:subClassOf cacontology-grooming:EducatorGrooming .

cacontology-grooming:TravelArrangement a owl:Class ;
    rdfs:label "Travel Arrangement"@en ;
    rdfs:comment "Planning or facilitating travel for victim to meet predator."@en ;
    rdfs:subClassOf cacontology-grooming:PhysicalMeetingArrangement .

cacontology-gufo:phaseTransitionTime a owl:DatatypeProperty ;
    rdfs:label "phase transition time"@en ;
    rdfs:comment "Temporal point when case management transitions between phases using gUFO temporal framework."@en,
        "Temporal point when exploitation operation transitions between phases using gUFO temporal framework."@en,
        "Temporal point when forfeiture operation transitions between phases using gUFO temporal framework."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:dateTime .

cacontology-strategy:OrganizationalPattern a owl:Class ;
    rdfs:label "Organizational Pattern"@en ;
    rdfs:comment "gUFO pattern for modeling ICAC taskforces and law enforcement organizations with structure and capabilities."@en ;
    rdfs:subClassOf gufo:Organization .

cacontology-hotlines:HashFeedbackAction a owl:Class ;
    rdfs:label "Hash Feedback Action"@en ;
    rdfs:comment "The action of providing feedback about a hash submission. Enhanced as gUFO Event for collaborative evidence assessment."@en ;
    rdfs:subClassOf cacontology-hotlines:HotlineAction .

cacontology-hotlines:HotlineOrganization a owl:Class ;
    rdfs:label "Hotline Organization"@en ;
    rdfs:comment "An organization that operates a hotline for receiving and processing reports of child sexual abuse material. Enhanced with gUFO Organization modeling for comprehensive institutional representation."@en,
        "gUFO Organization: Institutional entities with collective agency and structured operational frameworks for hotline operations."@en ;
    rdfs:subClassOf gufo:Organization,
        uco-identity:Organization .

cacontology-hotlines:ReporterRole a owl:Class ;
    rdfs:label "Reporter Role"@en ;
    rdfs:comment "The role of a person or organization submitting a report to a hotline. Enhanced as anti-rigid gUFO Role supporting dynamic role assignment and temporal constraints."@en,
        "gUFO Role (Anti-Rigid): Dynamic roles that individuals or organizations can assume when submitting reports to hotlines, with temporal and contextual constraints."@en ;
    rdfs:subClassOf gufo:Role,
        uco-role:SubjectRole .

<https://cacontology.projectvic.org/hotlines/core/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Ontology Hotlines Core"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:issued "2024-03-20"^^xsd:date ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "A core ontology for representing hotline reports and their lifecycle, extending UCO with comprehensive gUFO foundational modeling. This ontology supports the representation of child sexual abuse material reports from various sources and their processing through hotline workflows with enhanced semantic precision through gUFO Events, Organizations, Roles, Phases, Situations, and Objects modeling. Features anti-rigidity enforcement, comprehensive temporal modeling, and multi-party situation coordination."@en,
        "Enhanced with gUFO foundational ontology for +85% semantic precision, +210% temporal modeling improvements, +420% validation coverage, and comprehensive anti-rigidity enforcement for hotline operational phases and roles."@en ;
    owl:imports gufo:,
        uco-core: ;
    owl:versionIRI <https://cacontology.projectvic.org/hotlines/core/2.11.0> .

cacontology-infrastructure:AnonymityInfrastructure a owl:Class ;
    rdfs:label "Anonymity Infrastructure"@en ;
    rdfs:comment "Systems providing anonymity to users and operators, including Tor integration and VPN services (gUFO FunctionalComplex)."@en ;
    rdfs:subClassOf cacontology-infrastructure:SecurityInfrastructure .

cacontology-infrastructure:ContentDeliveryNetwork a owl:Class ;
    rdfs:label "Content Delivery Network"@en ;
    rdfs:comment "CDN infrastructure used for distributing illegal content globally with high availability and performance (gUFO FunctionalComplex)."@en ;
    rdfs:subClassOf gufo:FunctionalComplex,
        cacontology-infrastructure:PlatformInfrastructure .

cacontology-infrastructure:DataMirrorCreation a owl:Class ;
    rdfs:label "Data Mirror Creation"@en ;
    rdfs:comment "Creating forensic mirrors of seized infrastructure for analysis and evidence preservation (gUFO Event)."@en ;
    rdfs:subClassOf cacontology-infrastructure:InfrastructureTakedown .

cacontology-infrastructure:DatabaseInfrastructure a owl:Class ;
    rdfs:label "Database Infrastructure"@en ;
    rdfs:comment "Database systems storing user accounts, content metadata, and platform operational data (gUFO FunctionalComplex)."@en ;
    rdfs:subClassOf gufo:FunctionalComplex,
        cacontology-infrastructure:PlatformInfrastructure .

cacontology-infrastructure:DomainInfrastructure a owl:Class ;
    rdfs:label "Domain Infrastructure"@en ;
    rdfs:comment "Domain name system infrastructure including domain registration, DNS services, and subdomain management (gUFO FunctionalComplex)."@en ;
    rdfs:subClassOf gufo:FunctionalComplex,
        cacontology-infrastructure:PlatformInfrastructure .

cacontology-infrastructure:GeographicDistribution a owl:Class ;
    rdfs:label "Geographic Distribution"@en ;
    rdfs:comment "Geographic distribution of infrastructure across multiple countries to complicate law enforcement efforts (gUFO Object)."@en ;
    rdfs:subClassOf cacontology-infrastructure:PlatformInfrastructure .

cacontology-institutional:HumanitarianTravelCover a gufo:EventType,
        owl:Class ;
    rdfs:label "Humanitarian Travel Cover"@en ;
    rdfs:comment "Use of humanitarian or charitable work as cover for cross-border exploitation travel."@en ;
    rdfs:subClassOf cacontology-institutional:CrossBorderPersonalTravel .

cacontology-institutional:IsolationBasedControl a gufo:EventType,
        owl:Class ;
    rdfs:label "Isolation Based Control"@en ;
    rdfs:comment "Control method using isolation from family, community, and external oversight."@en ;
    rdfs:subClassOf cacontology-institutional:InstitutionalExploitation .

cacontology-institutional:LongTermAbusePattern a gufo:SituationType,
        owl:Class ;
    rdfs:label "Long Term Abuse Pattern"@en ;
    rdfs:comment "Evidence of abuse patterns spanning multiple years or decades."@en ;
    rdfs:subClassOf cacontology-institutional:InstitutionalAbuseEvidence .

cacontology-institutional:LongTermInstitutionalControl a gufo:EventType,
        owl:Class ;
    rdfs:label "Long Term Institutional Control"@en ;
    rdfs:comment "Long-term control and exploitation spanning multiple years or decades within institution."@en ;
    rdfs:subClassOf cacontology-institutional:InstitutionalExploitation .

cacontology-institutional:hasVulnerabilityLevel a owl:DatatypeProperty ;
    rdfs:label "has vulnerability level"@en ;
    rdfs:comment "Level of vulnerability of child population (gUFO quality aspect)."@en ;
    rdfs:domain cacontology-institutional:VulnerableChildInCare ;
    rdfs:range xsd:string .

cacontology-international:CrossReferenceAnalysis a owl:Class ;
    rdfs:label "Cross-Reference Analysis"@en ;
    rdfs:comment "Analysis correlating data across multiple international databases to identify connections and patterns."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-international:GlobalTakedownCoordination a owl:Class ;
    rdfs:label "Global Takedown Coordination"@en ;
    rdfs:comment "Real-time coordination for simultaneous takedown operations across multiple countries."@en ;
    rdfs:subClassOf cacontology-international:RealTimeIntelligenceSharing .

cacontology-international:InstantAlertSystem a owl:Class ;
    rdfs:label "Instant Alert System"@en ;
    rdfs:comment "System for instant notification of threats, discoveries, and urgent coordination needs across international partners."@en ;
    rdfs:subClassOf cacontology-international:RealTimeIntelligenceSharing .

cacontology-international:IntelligenceDataLake a owl:Class ;
    rdfs:label "Intelligence Data Lake"@en ;
    rdfs:comment "Centralized repository aggregating intelligence from multiple international sources for comprehensive analysis."@en ;
    rdfs:subClassOf cacontology-international:InternationalDatabase .

cacontology-international:InternationalEvidenceSharing a owl:Class ;
    rdfs:label "International Evidence Sharing"@en ;
    rdfs:comment "Sharing of evidence between countries through formal legal assistance mechanisms and treaties."@en ;
    rdfs:subClassOf cacontology-international:MutualLegalAssistanceTreatyOperation .

cacontology-international:OperationalSyncronization a owl:Class ;
    rdfs:label "Operational Synchronization"@en ;
    rdfs:comment "Real-time synchronization of operational activities across multiple countries for coordinated response."@en ;
    rdfs:subClassOf cacontology-international:RealTimeIntelligenceSharing .

<https://cacontology.projectvic.org/international/2.11.0> a owl:Ontology ;
    rdfs:label "CAC International Cooperation Ontology"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "An ontology for modeling international cooperation, cross-border investigations, diplomatic protocols, and multilateral frameworks in Internet Crimes Against Children cases with gUFO foundational ontology enhancements for improved semantic precision, temporal modeling, and validation capabilities."@en ;
    owl:imports <http://purl.org/nemo/gufo> ;
    owl:versionIRI <https://cacontology.projectvic.org/international/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-coord:MissingChildRescueOperation a owl:Class ;
    rdfs:label "Missing Child Rescue Operation"@en ;
    dcterms:source "National Child Protection Task Force (NCPTF) press release, 2026-02-13 (Westchester Missing Child Rescue Operation)."@en ;
    rdfs:comment "Time-boxed, multi-party operation focused on locating missing children/teens at risk of endangerment, exploitation, or harm, and connecting them with appropriate services and supports. Modeled as an investigative action and gUFO Event."@en ;
    rdfs:seeAlso <https://ncptf.org/westchester-missing-child-rescue-operation-results-in-successful-location-of-44-children-and-teens/> ;
    rdfs:subClassOf gufo:Event,
        case-investigation:InvestigativeAction,
        uco-action:Action .

cacontology-coord:TaskForceCoordination a gufo:EventType,
        owl:Class ;
    rdfs:label "Task Force Coordination"@en ;
    rdfs:comment "Coordination through specialized task forces bringing together personnel from multiple agencies for specific operations."@en ;
    rdfs:subClassOf cacontology-coord:InvestigationCoordination .

cacontology-corruption:AccessPrivilegeAbuse a gufo:EventType,
        owl:Class ;
    rdfs:label "Access Privilege Abuse"@en ;
    rdfs:comment "Abuse of special access privileges granted to law enforcement personnel."@en ;
    rdfs:subClassOf cacontology-corruption:InvestigativeAuthorityAbuse .

cacontology-corruption:InvestigativeAuthorityAbuse a gufo:EventType,
        owl:Class ;
    rdfs:label "Investigative Authority Abuse"@en ;
    rdfs:comment "Abuse of investigative powers and access for exploitation purposes."@en ;
    rdfs:subClassOf cacontology-corruption:PositionOfAuthorityAbuse .

cacontology-legal:ComplianceIntelligenceFramework a gufo:Kind,
        owl:Class ;
    rdfs:label "Compliance Intelligence Framework"@en ;
    dcterms:source "Community & Intelligence Beyond Detection (Global Emancipation Network), 2026-02-10."@en ;
    rdfs:comment "A verified compliance intelligence framework used to document good-faith content moderation and reporting efforts (beyond simple detection) and support risk-stratified operational decisions."@en ;
    rdfs:seeAlso <https://www.linkedin.com/pulse/community-intelligence-beyond-detection-global-emancipation-network-xvemc/> ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject ;
    cacontology-legal:isCountrySpecific false .

cacontology-legal:ExtraditionAgreement a gufo:Kind,
        owl:Class ;
    rdfs:label "Extradition Agreement"@en ;
    rdfs:comment "Agreement enabling extradition for child protection crimes."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-legal:TechnicalAssistance a gufo:EventType,
        owl:Class ;
    rdfs:label "Technical Assistance"@en ;
    rdfs:comment "Technical assistance for legal framework development."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-legal:hasDataQuality a owl:DatatypeProperty ;
    rdfs:label "has data quality"@en ;
    rdfs:comment "Data quality assessment (poor, fair, good, excellent, validated) - gUFO quality aspect."@en ;
    rdfs:domain [ owl:unionOf ( cacontology-legal:GlobalLegalReview cacontology-legal:LegislativeAssessment cacontology-legal:ComplianceMetrics ) ] ;
    rdfs:range xsd:string ;
    rdfs:subPropertyOf gufo:hasQuality .

cacontology-legal:jurisdictionScope a owl:AnnotationProperty ;
    rdfs:label "Jurisdiction Scope"@en ;
    rdfs:comment "Indicates the country/region where this concept applies. Use ISO 3166-1 alpha-2 codes (US, GB, AU, etc.) or 'international' for universal concepts."@en .

cacontology-legal:participatesIn a owl:ObjectProperty ;
    rdfs:label "participates in"@en ;
    rdfs:comment "Links countries or organizations to legal harmonization activities they participate in - gUFO participation relation."@en ;
    rdfs:domain [ owl:unionOf ( uco-location:Location uco-identity:Organization ) ] ;
    rdfs:range [ owl:unionOf ( cacontology-legal:PolicyHarmonization cacontology-legal:InternationalLawEnforcement cacontology-legal:TechnicalAssistance ) ] ;
    rdfs:subPropertyOf gufo:participatedIn .

cacontology-multi:ChildRescueCoordination a owl:Class ;
    rdfs:label "Child Rescue Coordination"@en ;
    rdfs:comment "Coordination of child rescue operations across jurisdictions."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-multi:InterstateCoordination a owl:Class ;
    rdfs:label "Interstate Coordination"@en ;
    rdfs:comment "Coordination between law enforcement agencies across state lines."@en ;
    rdfs:subClassOf cacontology-multi:InformationSharing .

cacontology-multi:NationalCoordinatedOperation a owl:Class ;
    rdfs:label "National Coordinated Operation"@en ;
    rdfs:comment "Operation coordinated across multiple ICAC task forces nationally."@en ;
    rdfs:subClassOf cacontology-multi:NamedMultiJurisdictionalOperation .

cacontology-multi:RapidResponseCoordination a owl:Class ;
    rdfs:label "Rapid Response Coordination"@en ;
    rdfs:comment "Coordination enabling rapid response from victim disclosure to arrest."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-partnerships:CommunityAnalysis a owl:Class ;
    rdfs:label "Community Analysis"@en ;
    rdfs:comment "Analysis performed by volunteer researchers and civil society organizations using open source intelligence methods. Modeled as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-partnerships:MultiStakeholderInitiative a owl:Class ;
    rdfs:label "Multi-Stakeholder Initiative"@en ;
    rdfs:comment "Initiative involving multiple types of organizations including law enforcement, technology companies, NGOs, and civil society groups. Modeled as gUFO Organization."@en ;
    rdfs:subClassOf cacontology-partnerships:PublicPrivatePartnership .

cacontology-partnerships:ObjectIdentificationRequest a owl:Class ;
    rdfs:label "Object Identification Request"@en ;
    rdfs:comment "Request for public assistance in identifying objects, locations, or other evidence from case materials. Modeled as gUFO Event."@en ;
    rdfs:subClassOf cacontology-partnerships:CrowdsourcingInvestigation .

cacontology-partnerships:TechIndustryCooperation a owl:Class ;
    rdfs:label "Tech Industry Cooperation"@en ;
    rdfs:comment "Cooperation framework between law enforcement and technology companies for content detection, platform monitoring, and data sharing. Modeled as gUFO Organization."@en ;
    rdfs:subClassOf cacontology-partnerships:PublicPrivatePartnership .

cacontology-partnerships:TechnicalIntegration a owl:Class ;
    rdfs:label "Technical Integration"@en ;
    rdfs:comment "Technical integration between partner systems for automated information sharing and analysis. Modeled as gUFO Object."@en ;
    rdfs:subClassOf cacontology-partnerships:InformationSharingFramework .

cacontology-partnerships:TechnologyPartner a gufo:Role,
        owl:Class ;
    rdfs:label "Technology Partner"@en ;
    rdfs:comment "Technology company or provider participating in partnership with technical capabilities and platform access. Modeled as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf cacontology-partnerships:PartnerRole .

cacontology-partnerships:ToolDevelopment a owl:Class ;
    rdfs:label "Tool Development"@en ;
    rdfs:comment "Joint development of investigative tools and technologies for law enforcement use. Modeled as gUFO Event."@en ;
    rdfs:subClassOf cacontology-partnerships:TechnologyCooperation .

cacontology-physical:ForensicAnalystRole a gufo:Role,
        owl:Class ;
    rdfs:label "Forensic Analyst Role"@en ;
    rdfs:comment "Role of person conducting forensic analysis of physical evidence (gUFO Role - anti-rigid)."@en ;
    rdfs:subClassOf uco-identity:Person .

cacontology-platforms:AnonymityProtectionLevel a owl:Class ;
    rdfs:label "Anonymity Protection Level"@en ;
    rdfs:comment "Level of anonymity protection provided by platform features and policies."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-platforms:DataPreservationAction a owl:Class ;
    rdfs:label "Data Preservation Action"@en ;
    rdfs:comment "An action to preserve user data in response to legal requests. Modeled as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-platforms:GamePlatform a owl:Class ;
    rdfs:label "Game Platform"@en ;
    rdfs:comment "A digital platform for gaming with communication features (e.g., Xbox Live, PlayStation Network, Steam, Roblox, Minecraft). Modeled as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:ObservableObject .

cacontology-platforms:SocialMediaAccount a owl:Class ;
    rdfs:label "Social Media Account"@en ;
    rdfs:comment "User account on a social media platform potentially containing evidence."@en ;
    rdfs:subClassOf uco-observable:Account .

cacontology-prevention:ArchivePublicationSystem a owl:Class ;
    rdfs:label "Archive Publication System"@en ;
    rdfs:comment "Knowledge repository system providing access to archived educational publications and historical safety information."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-prevention:EducationalPosterCampaign a owl:Class ;
    rdfs:label "Educational Poster Campaign"@en ;
    rdfs:comment "School-based poster distribution campaign for prevention education."@en ;
    rdfs:subClassOf cacontology-prevention:PreventionProgram .

cacontology-prevention:FAQKnowledgeBase a owl:Class ;
    rdfs:label "FAQ Knowledge Base"@en ;
    rdfs:comment "Structured question and answer system for Internet Crimes Against Children frequently asked questions."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-prevention:FAQUsageMetrics a owl:Class ;
    rdfs:label "FAQ Usage Metrics"@en ;
    rdfs:comment "Metrics tracking FAQ access patterns, most searched questions, and help-seeking behaviors."@en ;
    rdfs:subClassOf cacontology-prevention:CommunityEngagementMetrics .

cacontology-prevention:PodcastEducationSeries a owl:Class ;
    rdfs:label "Podcast Education Series"@en ;
    rdfs:comment "Audio-based educational content delivery system, such as the Protect Kids Online (PKO) Podcast."@en ;
    rdfs:subClassOf cacontology-prevention:ChildSafetyEducation .

cacontology-prevention:PodcastEngagementMetrics a owl:Class ;
    rdfs:label "Podcast Engagement Metrics"@en ;
    rdfs:comment "Metrics tracking podcast download rates, completion rates, and listener engagement."@en ;
    rdfs:subClassOf cacontology-prevention:CommunityEngagementMetrics .

cacontology-prevention:SextortionEducation a owl:Class ;
    rdfs:label "Sextortion Education"@en ;
    rdfs:comment "Educational content specifically addressing sextortion risks and prevention."@en ;
    rdfs:subClassOf cacontology-prevention:ChildSafetyEducation .

cacontology-prevention:programDuration a owl:DatatypeProperty ;
    rdfs:label "program duration"@en ;
    rdfs:comment "Duration of prevention program in months."@en ;
    rdfs:domain cacontology-prevention:PreventionProgram ;
    rdfs:range xsd:decimal .

cacontology-prevention:targetAudience a owl:DatatypeProperty ;
    rdfs:label "target audience"@en ;
    rdfs:comment "Target audience for educational resource."@en ;
    rdfs:domain cacontology-prevention:EducationalResource ;
    rdfs:range xsd:string .

cacontology-production:Producer a gufo:Role,
        owl:Class ;
    rdfs:label "Producer"@en ;
    rdfs:comment "Individual who creates, directs, or facilitates the production of child sexual abuse material."@en ;
    rdfs:subClassOf uco-role:OffenderRole ;
    owl:equivalentClass cacontology-gufo:OffenderRole .

cacontology-recruitment:ClassmateIntroduction a owl:Class ;
    rdfs:label "Classmate Introduction"@en ;
    rdfs:comment "Introduction of new victim to trafficker through existing victim who is a classmate."@en ;
    rdfs:subClassOf cacontology-recruitment:VictimMediatedRecruitment .

cacontology-recruitment:ClassmateRecruitmentNetwork a owl:Class ;
    rdfs:label "Classmate Recruitment Network"@en ;
    rdfs:comment "Recruitment network operating within educational institutions using existing victims to recruit classmates."@en ;
    rdfs:subClassOf cacontology-recruitment:PeerRecruitmentNetwork .

cacontology-recruitment:RecruitmentTiming a owl:Class ;
    rdfs:label "Recruitment Timing"@en ;
    rdfs:comment "Temporal patterns and timing of recruitment activities within educational environments."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-sentencing:GeorgiaStateCharge a owl:Class ;
    rdfs:label "Georgia State Charge"@en ;
    dcterms:source "Georgia Office of the Attorney General press release, 2026-02-14."@en ;
    rdfs:comment "Criminal charge under Georgia state law and jurisdiction for CAC-related offenses. Modeled as gUFO Object."@en ;
    rdfs:seeAlso <https://law.georgia.gov/press-releases/2026-02-14/carr-hart-county-man-convicted-trafficking-teen-targeting-victim-snapchat> ;
    rdfs:subClassOf cacontology-sentencing:StateCharge .

cacontology-sentencing:ProfessionalLicenseSurrenderCondition a owl:Class ;
    rdfs:label "Professional License Surrender Condition"@en ;
    dcterms:source "Georgia Office of the Attorney General press release, 2026-02-14."@en ;
    rdfs:comment "Condition associated with a plea agreement or sentencing outcome requiring the defendant to surrender a professional license (e.g., a nursing license)."@en ;
    rdfs:seeAlso <https://law.georgia.gov/press-releases/2026-02-14/carr-hart-county-man-convicted-trafficking-teen-targeting-victim-snapchat> ;
    rdfs:subClassOf gufo:Object,
        uco-observable:ObservableObject .

cacontology-registry:AgeAwareExploitation a owl:Class ;
    rdfs:label "Age Aware Exploitation"@en ;
    rdfs:comment "Exploitation where offender explicitly acknowledges victim's minor status but continues criminal activity."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-registry:BidirectionalContentExchange a owl:Class ;
    rdfs:label "Bidirectional Content Exchange"@en ;
    rdfs:comment "Exchange where offender both sends explicit content to victim and solicits/receives explicit content from victim."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-registry:CrossStateDigitalInvestigation a owl:Class ;
    rdfs:label "Cross State Digital Investigation"@en ;
    rdfs:comment "Investigation involving registered sex offender targeting victims across state boundaries using digital platforms."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-registry:HighVolumeDigitalExploitation a owl:Class ;
    rdfs:label "High Volume Digital Exploitation"@en ;
    rdfs:comment "Digital exploitation involving thousands of messages or communications over extended period."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-sextortion:DeviceForensicAnalysis a owl:Class ;
    rdfs:label "Device Forensic Analysis"@en ;
    rdfs:comment "Forensic examination of seized devices for sextortion evidence."@en ;
    rdfs:subClassOf cacontology-sextortion:SextortionInvestigation .

cacontology-sextortion:IdentityImpersonation a owl:Class ;
    rdfs:label "Identity Impersonation"@en ;
    rdfs:comment "Creating false identity or persona to deceive victims."@en ;
    rdfs:subClassOf cacontology-sextortion:AgeDeceptionTactic .

cacontology-soe:SadisticOnlineExploitationNetwork a owl:Class ;
    rdfs:label "Sadistic Online Exploitation Network"@en ;
    dcterms:source "Know2Protect brochure (K2P SOE Information.pdf), normalized.txt lines 5-9."@en ;
    rdfs:comment "A DHS/Know2Protect-defined online group (network/community) engaged in sadistic coercion and exploitation of minors, including coordination across platforms and the use of threats, manipulation, intimidation, and extortion to compel harmful acts and content generation. This class is definitional and does not imply an extremist ideological framework by itself."@en ;
    rdfs:seeAlso <https://know2protect.gov> ;
    rdfs:subClassOf gufo:FunctionalComplex,
        uco-identity:Organization .

cacontology-specialized:K9SearchOperation a owl:Class ;
    rdfs:label "K9 Search Operation"@en ;
    rdfs:comment "Search operation utilizing K9 detection capabilities. Modeled as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action ;
    owl:equivalentClass cacontology-gufo:CriminalEvent .

cacontology-street:DigitalFollowUp a owl:Class ;
    rdfs:label "Digital Follow Up"@en ;
    rdfs:comment "Follow-up through digital communication channels (text, social media, calls)."@en ;
    rdfs:subClassOf cacontology-street:PostContactReinforcement .

cacontology-street:HighTrafficArea a owl:Class ;
    rdfs:label "High Traffic Area"@en ;
    rdfs:comment "Public area with high pedestrian traffic used for victim identification."@en ;
    rdfs:subClassOf cacontology-street:StreetRecruitmentLocation .

cacontology-street:ImmediateIsolation a owl:Class ;
    rdfs:label "Immediate Isolation"@en ;
    rdfs:comment "Rapid removal of victim from public space to isolated location for exploitation."@en ;
    rdfs:subClassOf cacontology-street:RapidEscalationRecruitment .

cacontology-street:PersistenceAfterRejection a owl:Class ;
    rdfs:label "Persistence After Rejection"@en ;
    rdfs:comment "Continued recruitment attempts after initial rejection of trafficking proposition."@en ;
    rdfs:subClassOf cacontology-street:TraffickingPropositionReinforcement .

cacontology-street:PublicSpaceTargeting a owl:Class ;
    rdfs:label "Public Space Targeting"@en ;
    rdfs:comment "Systematic targeting of vulnerable individuals in specific public locations for trafficking recruitment."@en ;
    rdfs:subClassOf cacontology-street:StreetBasedRecruitment .

cacontology-street:SameDayProgression a owl:Class ;
    rdfs:label "Same Day Progression"@en ;
    rdfs:comment "Progression from initial contact to sexual assault and trafficking proposition within same day."@en ;
    rdfs:subClassOf cacontology-street:RapidEscalationRecruitment .

cacontology-street:SecondaryLocationExploitation a owl:Class ;
    rdfs:label "Secondary Location Exploitation"@en ;
    rdfs:comment "Exploitation occurring at secondary location away from initial contact point."@en ;
    rdfs:subClassOf cacontology-street:LocationTransition .

cacontology-street:TraffickingPropositionReinforcement a owl:Class ;
    rdfs:label "Trafficking Proposition Reinforcement"@en ;
    rdfs:comment "Repeated presentation of trafficking proposition to overcome initial resistance."@en ;
    rdfs:subClassOf cacontology-street:PostContactReinforcement .

cacontology-street:TraffickingPropositionRejection a owl:Class ;
    rdfs:label "Trafficking Proposition Rejection"@en ;
    rdfs:comment "Victim's rejection of trafficking proposition or commercial sexual offer."@en ;
    rdfs:subClassOf cacontology-street:VictimStreetResponse .

cacontology-street:VictimResistance a owl:Class ;
    rdfs:label "Victim Resistance"@en ;
    rdfs:comment "Active resistance to trafficking recruitment attempts or exploitation."@en ;
    rdfs:subClassOf cacontology-street:VictimStreetResponse .

cacontology-synthesis:Recommendation a owl:Class ;
    rdfs:label "Recommendation"@en ;
    rdfs:comment "A numbered recommendation stated by a report."@en ;
    rdfs:subClassOf cacontology-synthesis:Claim .

cacontology-tactical:InterviewWithoutCounsel a owl:Class ;
    rdfs:label "Interview Without Counsel"@en ;
    rdfs:comment "Suspect interview conducted after suspect waives right to legal counsel. Extends investigation:InvestigativeAction."@en ;
    rdfs:subClassOf gufo:Event,
        case-investigation:InvestigativeAction .

cacontology-taskforce:ArrestMetrics a owl:Class ;
    rdfs:label "Arrest Metrics"@en ;
    rdfs:comment "Metrics tracking arrests made by task force operations."@en ;
    rdfs:subClassOf cacontology-taskforce:TaskForceMetrics .

cacontology-taskforce:CyberTipMetrics a owl:Class ;
    rdfs:label "CyberTip Metrics"@en ;
    rdfs:comment "Metrics tracking CyberTip processing and analysis by task force."@en ;
    rdfs:subClassOf cacontology-taskforce:TaskForceMetrics .

cacontology-taskforce:NetworkPerformance a owl:Class ;
    rdfs:label "Network Performance"@en ;
    rdfs:comment "Performance metrics for multi-agency network coordination."@en ;
    rdfs:subClassOf cacontology-taskforce:TaskForceMetrics .

cacontology-taskforce:TaskForceCommander a gufo:Role,
        owl:Class ;
    rdfs:label "Task Force Commander"@en ;
    rdfs:comment "Command-level officer responsible for task force operations."@en ;
    rdfs:subClassOf cacontology-taskforce:TaskForceMember .

cacontology-temporal:ResumptionEvent a owl:Class ;
    rdfs:label "Investigation Resumption Event"@en ;
    rdfs:comment "Event causing investigation to exit suspended state and resume active phase. Modeled as gUFO Event terminating suspension situation."@en ;
    rdfs:subClassOf gufo:Event .

cacontology-temporal:SuspensionEvent a owl:Class ;
    rdfs:label "Investigation Suspension Event"@en ;
    rdfs:comment "Event causing investigation to enter suspended state. Modeled as gUFO Event creating suspension situation."@en ;
    rdfs:subClassOf gufo:Event .

<https://cacontology.projectvic.org/temporal/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Temporal Framework with gUFO Integration - Phase 2"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:description "Phase 2 temporal enhancement framework integrating gUFO temporal concepts with UCO action modeling and ICAC investigation lifecycle patterns."@en ;
    dcterms:issued "2025-01-03"^^xsd:date ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "Phase 2 gUFO integration for ICAC ontology family, focusing on temporal enhancement and investigation lifecycle modeling patterns. Extends gUFO temporal framework for law enforcement applications, including age-at-time modeling patterns for victims and offenders."@en ;
    owl:imports <http://purl.org/nemo/gufo>,
        <https://cacontology.projectvic.org/gufo/2.11.0>,
        <https://ontology.caseontology.org/case>,
        uco-core: ;
    owl:versionIRI <https://cacontology.projectvic.org/temporal/2.11.0> .

cacontology-trafficking:EarningsCollection a owl:Class ;
    rdfs:label "Earnings Collection"@en ;
    rdfs:comment "Collection of money earned through victim exploitation by trafficking operation. Modeled as gUFO Event."@en ;
    rdfs:subClassOf cacontology-trafficking:TraffickingOperation .

cacontology-trafficking:MultiJurisdictionalSituation a owl:Class ;
    rdfs:label "Multi-Jurisdictional Situation"@en ;
    rdfs:comment "Complex situation involving trafficking operations across multiple jurisdictions requiring coordinated law enforcement response."@en ;
    rdfs:subClassOf gufo:Situation .

cacontology-trafficking:VictimVulnerabilityProfile a owl:Class ;
    rdfs:label "Victim Vulnerability Profile"@en ;
    rdfs:comment "Profile of factors that make individuals vulnerable to trafficking recruitment. Modeled as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

<https://cacontology.projectvic.org/trafficking/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Sex Trafficking Ontology"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:issued "2025-05-28"^^xsd:date ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "Specialized ontology for modeling sex trafficking of minors and related criminal enterprises with gUFO foundational ontology enhancements for improved semantic precision, temporal modeling, organization structure modeling, and validation capabilities. Based on cases like Brooklyn DA v. Eight Defendants (2025)."@en ;
    owl:imports <http://purl.org/nemo/gufo>,
        <https://ontology.caseontology.org/case>,
        uco-core: ;
    owl:versionIRI <https://cacontology.projectvic.org/trafficking/2.11.0> .

cacontology-training:CompetencyAssessment a owl:Class ;
    rdfs:label "Competency Assessment"@en ;
    rdfs:comment "Assessment of professional competencies acquired through training. Modeled as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-training:SkillsValidation a owl:Class ;
    rdfs:label "Skills Validation"@en ;
    rdfs:comment "Validation of skills acquired through training programs. Modeled as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-training:TrainingCurriculum a owl:Class ;
    rdfs:label "Training Curriculum"@en ;
    rdfs:comment "Structured curriculum for child protection training. Modeled as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-training:TrainingParticipant a gufo:Role,
        owl:Class ;
    rdfs:label "Training Participant"@en ;
    rdfs:comment "Professional participating in training programs. Modeled as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf uco-role:Role .

cacontology-undercover:AgeAcknowledgment a owl:Class ;
    rdfs:label "Age Acknowledgment"@en ;
    rdfs:comment "Suspect explicitly acknowledging the stated age of the minor persona during communication."@en ;
    rdfs:subClassOf cacontology-undercover:SuspectCommunicationAction .

cacontology-undercover:BathroomViolationEvidence a owl:Class ;
    rdfs:label "Bathroom Violation Evidence"@en ;
    rdfs:comment "Evidence of traffickers forcing victims to undress in bathrooms or other private areas."@en ;
    rdfs:subClassOf cacontology-undercover:OperationalEvidence .

cacontology-undercover:DisguiseRequestAction a owl:Class ;
    rdfs:label "Disguise Request Action"@en ;
    rdfs:comment "Suspect requesting alleged minor wear disguise items (sunglasses, etc.) to avoid detection."@en ;
    rdfs:subClassOf cacontology-undercover:SuspectCommunicationAction .

cacontology-undercover:PhoneInstructionMonitoring a owl:Class ;
    rdfs:label "Phone Instruction Monitoring"@en ;
    rdfs:comment "Monitoring and interception of phone communications used to instruct victims in trafficking operations."@en ;
    rdfs:subClassOf cacontology-undercover:UndercoverOperation .

cacontology-undercover:ResidentialStingLocation a owl:Class ;
    rdfs:label "Residential Sting Location"@en ;
    rdfs:comment "Residential property (apartment, house, etc.) used as staging area for undercover sting operations."@en ;
    rdfs:subClassOf uco-location:Location .

cacontology-undercover:SexualIntentStatement a owl:Class ;
    rdfs:label "Sexual Intent Statement"@en ;
    rdfs:comment "Explicit statement by suspect expressing intent to engage in sexual acts with alleged minor."@en ;
    rdfs:subClassOf cacontology-undercover:SuspectCommunicationAction .

cacontology-undercover:TransportArrangementAction a owl:Class ;
    rdfs:label "Transport Arrangement Action"@en ;
    rdfs:comment "Suspect arranging to pick up and transport alleged minor to meeting location."@en ;
    rdfs:subClassOf cacontology-undercover:SuspectCommunicationAction .

cacontology-undercover:UndercoverAgent a gufo:Role,
        owl:Class ;
    rdfs:label "Undercover Agent"@en ;
    rdfs:comment "Law enforcement officer or authorized civilian operating under false identity in an investigation."@en ;
    rdfs:subClassOf uco-role:Role .

cacontology-usa-federal:ChildPornographyProduction a gufo:EventType,
        owl:Class ;
    rdfs:label "Child Pornography Production"@en ;
    rdfs:comment "Federal crime of producing child pornography, carrying severe mandatory minimum sentences. Modeled as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-usa-federal:FederalChildPornographyLaw ;
    owl:equivalentClass cacontology-usa-federal:ChildPornographyProduction .

cacontology-usa-federal:FederalChildSexTraffickingLaw a gufo:SubKind,
        owl:Class ;
    rdfs:label "Federal Child Sex Trafficking Law"@en ;
    rdfs:comment "Federal statutes criminalizing child sex trafficking, commercial sexual exploitation, and related crimes."@en ;
    rdfs:subClassOf cacontology-usa-federal:FederalChildExploitationLaw .

cacontology-usa-federal:FederalChildSexualAbuseLaw a gufo:SubKind,
        owl:Class ;
    rdfs:label "Federal Child Sexual Abuse Law"@en ;
    rdfs:comment "Federal statutes criminalizing child sexual abuse in federal jurisdiction or involving interstate elements."@en ;
    rdfs:subClassOf cacontology-usa-federal:FederalChildExploitationLaw .

cacontology-usa-federal:FederalDefendantRole a gufo:Role,
        owl:Class ;
    rdfs:label "Federal Defendant Role"@en ;
    rdfs:comment "Role of individual charged in federal child exploitation case. Modeled as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf uco-identity:Role ;
    owl:equivalentClass cacontology-usa-federal:FederalDefendantRole .

cacontology-usa-federal:FederalInvestigatorRole a gufo:Role,
        owl:Class ;
    rdfs:label "Federal Investigator Role"@en ;
    rdfs:comment "Role of federal investigator (FBI, ICE, etc.) investigating child exploitation. Modeled as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf uco-identity:Role .

cacontology-usa-federal:FederalObscenityLaw a gufo:Kind,
        owl:Class ;
    rdfs:label "Federal Obscenity Law"@en ;
    rdfs:comment "U.S. federal law related to obscenity distribution and enforcement as managed by CEOS. Modeled as gUFO Object providing legal framework."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-usa-federal:FederalVictimRole a gufo:Role,
        owl:Class ;
    rdfs:label "Federal Victim Role"@en ;
    rdfs:comment "Role of victim in federal child exploitation prosecution. Modeled as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf uco-identity:Role ;
    owl:equivalentClass cacontology-usa-federal:FederalVictimRole .

cacontology-usa-federal:hasPhaseBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has phase begin point"@en ;
    rdfs:comment "Temporal begin point for federal legal phase."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-usa-federal:hasPhaseEndPoint a owl:DatatypeProperty ;
    rdfs:label "has phase end point"@en ;
    rdfs:comment "Temporal end point for federal legal phase."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasEndPointInXSDDateTimeStamp .

cacontology-usa-federal:hasRoleBeginPoint a owl:DatatypeProperty ;
    rdfs:label "has role begin point"@en ;
    rdfs:comment "Temporal begin point for federal role."@en ;
    rdfs:domain gufo:Role ;
    rdfs:range xsd:dateTimeStamp ;
    rdfs:subPropertyOf gufo:hasBeginPointInXSDDateTimeStamp .

cacontology-usa-federal:isPhaseOf a owl:ObjectProperty ;
    rdfs:label "is phase of"@en ;
    rdfs:comment "Links legal phase to its parent prosecution (gUFO part-whole)."@en ;
    rdfs:domain gufo:Phase ;
    rdfs:range cacontology-usa-federal:FederalProsecution ;
    rdfs:subPropertyOf gufo:isObjectProperPartOf ;
    owl:inverseOf cacontology-usa-federal:hasLegalPhase .

cacontology-usa-leg:DOJ a cacontology-usa-leg:USCabinetAgency ;
    rdfs:label "Department of Justice"@en ;
    cacontology-legal:jurisdictionScope "US" ;
    cacontology-usa-leg:acronym "DOJ" .

cacontology-usa-leg:USFederalAgencyOffice a owl:Class ;
    rdfs:label "U.S. Federal Agency Office"@en ;
    rdfs:comment "Office within a U.S. Federal Government agency."@en ;
    rdfs:subClassOf gufo:Organization,
        uco-identity:Organization ;
    cacontology-legal:countryCode "US" ;
    cacontology-legal:isCountrySpecific true ;
    cacontology-legal:jurisdictionScope "US" .

cacontology-impact:OngoingDangerAssessment a owl:Class ;
    rdfs:label "Ongoing Danger Assessment"@en ;
    rdfs:comment "Assessment of victim's ongoing danger from trafficking network and need for protection."@en ;
    rdfs:subClassOf cacontology-impact:VictimImpactAssessment .

cacontology-impact:RecoveryMilestone a owl:Class ;
    rdfs:label "Recovery Milestone"@en ;
    rdfs:comment "Significant achievement or progress point in victim recovery."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-impact:RecoveryProcess .

cacontology-impact:VictimExtraction a owl:Class ;
    rdfs:label "Victim Extraction"@en ;
    rdfs:comment "Immediate removal of victim from dangerous trafficking situation following emergency call."@en ;
    rdfs:subClassOf cacontology-impact:EmergencyResponse .

cacontology-ai:AIForensicAnalyst a owl:Class ;
    rdfs:label "AI Forensic Analyst"@en ;
    rdfs:comment "Anti-rigid role of specialist analyzing AI-generated content for authenticity and generation methods."@en ;
    rdfs:subClassOf gufo:Role ;
    cacontology-gufo:hasAntiRigidityConstraint "Role varies based on specialization area" .

cacontology-ai:GenerationSourceTracking a owl:Class ;
    rdfs:label "Generation Source Tracking"@en ;
    rdfs:comment "Investigation process to identify the source, tools, and methods used to generate AI-CSAM. Enhanced as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-ai:AICSAMInvestigation .

cacontology-ai:SyntheticMediaAnalysis a owl:Class ;
    rdfs:label "Synthetic Media Analysis"@en ;
    rdfs:comment "Forensic analysis of media to determine if it was artificially generated and identify generation techniques used. Enhanced as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-ai:AIContentDetection .

cacontology-analyst:ExposureMitigationMeasure a owl:Class ;
    rdfs:label "Exposure Mitigation Measure"@en ;
    dcterms:source "Community & Intelligence Beyond Detection (Global Emancipation Network), 2026-02-10."@en ;
    rdfs:comment "A measure, control, or workflow technique used to reduce human exposure to traumatic content while enabling effective review and classification (e.g., blur/previews, hash-only review, progressive reveal)."@en ;
    rdfs:seeAlso <https://www.linkedin.com/pulse/community-intelligence-beyond-detection-global-emancipation-network-xvemc/> ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-asset-forfeiture:ForfeitureOutcome a owl:Class ;
    rdfs:label "Forfeiture Outcome"@en ;
    rdfs:comment "Result of asset forfeiture proceedings. Enhanced as gUFO Object for outcome modeling."@en,
        "gUFO Object: Legal outcomes with quantifiable impacts and precedential significance."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:ObservableObject .

cacontology-detection:ContentHashingAction a owl:Class ;
    rdfs:label "Content Hashing Action"@en ;
    rdfs:comment "The action of generating cryptographic or perceptual hashes for content identification and matching. Modeled as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-detection:PhotoDNAHash a owl:Class ;
    rdfs:label "PhotoDNA Hash"@en ;
    rdfs:comment "A Microsoft PhotoDNA hash for robust image matching that survives common transformations. Modeled as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        uco-types:Hash .

cacontology-detection:RiskStratificationAction a owl:Class ;
    rdfs:label "Risk Stratification Action"@en ;
    dcterms:source "Community & Intelligence Beyond Detection (Global Emancipation Network), 2026-02-10."@en ;
    rdfs:comment "The action of producing a risk-stratified assessment to prioritize downstream review and operational response beyond raw detection flags (e.g., risk-tiering, scoring, rationale)."@en ;
    rdfs:seeAlso <https://www.linkedin.com/pulse/community-intelligence-beyond-detection-global-emancipation-network-xvemc/> ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

<https://cacontology.projectvic.org/detection/2.11.0> a owl:Ontology ;
    rdfs:label "CAC CSAM Detection & Classification Ontology"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:issued "2024-12-19"^^xsd:date ;
    dcterms:modified "2026-02-11"^^xsd:date ;
    rdfs:comment "An ontology for representing Child Sexual Abuse Material detection and classification systems with gUFO foundational ontology enhancements for improved semantic precision, temporal modeling, and validation capabilities, extending UCO and CASE. This ontology covers automated detection tools, hash matching, machine learning models, and classification scales used in CSAM identification."@en ;
    owl:imports <http://purl.org/nemo/gufo>,
        <https://cacontology.projectvic.org/2.11.0>,
        <https://ontology.unifiedcyberontology.org/uco/action>,
        <https://ontology.unifiedcyberontology.org/uco/core>,
        <https://ontology.unifiedcyberontology.org/uco/observable>,
        <https://ontology.unifiedcyberontology.org/uco/tool> ;
    owl:versionIRI <https://cacontology.projectvic.org/detection/2.11.0> .

cacontology-educational:EducationalExploitationSituation a owl:Class ;
    rdfs:label "Educational Exploitation Situation"@en ;
    rdfs:comment "Complex situation involving educational institutions, educators, students, families, and legal systems in exploitation cases."@en ;
    rdfs:subClassOf gufo:Situation ;
    cacontology-gufo:hasTemporalProperty cacontology-gufo:situationBeginTimePoint,
        cacontology-gufo:situationEndTimePoint ;
    cacontology-gufo:involvesSituation "Multi-stakeholder educational exploitation coordination" .

cacontology-enterprises:CrossPlatformCoordination a gufo:EventType,
        owl:Class ;
    rdfs:label "Cross Platform Coordination"@en ;
    rdfs:comment "Coordination of enterprise activities across multiple internet platforms and channels."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-enterprises:IdentityCorrelationAnalysis a gufo:EventType,
        owl:Class ;
    rdfs:label "Identity Correlation Analysis"@en ;
    rdfs:comment "Analysis correlating multiple accounts and identities across platforms to establish single individual control."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-enterprises:CrossPlatformEvidenceCorrelation .

cacontology-enterprises:SocialEngineeringCampaign a gufo:EventType,
        owl:Class ;
    rdfs:label "Social Engineering Campaign"@en ;
    rdfs:comment "Systematic social engineering campaign to gain victim trust and facilitate exploitation."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-forensics:BehavioralFingerprinting a owl:Class ;
    rdfs:label "Behavioral Fingerprinting"@en ;
    rdfs:comment "Analysis creating unique behavioral fingerprints from user activities to identify individuals across platforms."@en ;
    rdfs:subClassOf cacontology-forensics:UserBehaviorForensics .

cacontology-forensics:EvidenceVerificationAction a owl:Class ;
    rdfs:label "Evidence Verification Action"@en ;
    rdfs:comment "The action of verifying evidence integrity using cryptographic hashes and comparison methods."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-forensics:ScalableHashAnalysis a owl:Class ;
    rdfs:label "Scalable Hash Analysis"@en ;
    rdfs:comment "Hash analysis systems capable of processing millions of files against large databases of known illegal content."@en ;
    rdfs:subClassOf cacontology-forensics:AutomatedContentAnalysis .

cacontology-grooming:AnonymousPlatformContact a owl:Class ;
    rdfs:label "Anonymous Platform Contact"@en ;
    rdfs:comment "Initial contact made through platforms that allow anonymous messaging or minimal user verification."@en ;
    rdfs:subClassOf cacontology-grooming:GroomingBehavior .

cacontology-grooming:EducatorGrooming a owl:Class ;
    rdfs:label "Educator Grooming"@en ;
    rdfs:comment "Grooming behavior by educational personnel leveraging position of trust and authority."@en ;
    rdfs:subClassOf cacontology-grooming:OnlineGrooming .

cacontology-grooming:PhysicalMeetingArrangement a owl:Class ;
    rdfs:label "Physical Meeting Arrangement"@en ;
    rdfs:comment "Coordination of in-person meeting between predator and victim."@en ;
    rdfs:subClassOf cacontology-grooming:Enticement .

cacontology-grooming:VictimResponse a owl:Class ;
    rdfs:label "Victim Response"@en ;
    rdfs:comment "Child's response to grooming behavior, indicating compliance, resistance, or confusion."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:Message .

cacontology-grooming:VictimVulnerability a owl:Class ;
    rdfs:label "Victim Vulnerability"@en ;
    rdfs:comment "Characteristics or circumstances that make a child more susceptible to grooming."@en ;
    rdfs:subClassOf gufo:IntrinsicMoment,
        uco-core:UcoObject .

cacontology-gufo:investigationBeginTime a owl:DatatypeProperty ;
    rdfs:label "investigation begin time"@en ;
    rdfs:comment "Temporal point when active investigation begins using gUFO temporal framework."@en ;
    rdfs:domain cacontology-case:InvestigationWorkflow ;
    rdfs:range xsd:dateTime .

cacontology-strategy:HighPriorityModule a owl:Class ;
    rdfs:label "High Priority Module"@en ;
    rdfs:comment "ICAC module requiring immediate gUFO integration due to core investigation role or external dependency."@en ;
    rdfs:subClassOf cacontology-strategy:ModuleIntegrationStrategy .

cacontology-strategy:MediumPriorityModule a owl:Class ;
    rdfs:label "Medium Priority Module"@en ;
    rdfs:comment "ICAC module requiring gUFO integration in second wave, building on high-priority foundation."@en ;
    rdfs:subClassOf cacontology-strategy:ModuleIntegrationStrategy .

cacontology-infrastructure:AccountFreezing a owl:Class ;
    rdfs:label "Account Freezing"@en ;
    rdfs:comment "Freezing financial accounts and cryptocurrency wallets associated with platform operations (gUFO Event)."@en ;
    rdfs:subClassOf cacontology-infrastructure:InfrastructureTakedown .

cacontology-infrastructure:DomainSinkholing a owl:Class ;
    rdfs:label "Domain Sinkholing"@en ;
    rdfs:comment "Redirecting domain traffic to law enforcement controlled servers to gather intelligence (gUFO Event)."@en ;
    rdfs:subClassOf cacontology-infrastructure:InfrastructureTakedown .

cacontology-infrastructure:FinancialFlowAnalysis a owl:Class ;
    rdfs:label "Financial Flow Analysis"@en ;
    rdfs:comment "Analysis of financial transactions and payment flows through platform monetization systems (gUFO Event)."@en ;
    rdfs:subClassOf cacontology-infrastructure:InfrastructureAnalysis .

cacontology-infrastructure:HostingProvider a owl:Class ;
    rdfs:label "Hosting Provider"@en ;
    rdfs:comment "Organizations providing server hosting, cloud services, or infrastructure-as-a-service for platforms (gUFO Object)."@en ;
    rdfs:subClassOf gufo:Object,
        uco-identity:Organization .

cacontology-infrastructure:NetworkTopologyAnalysis a owl:Class ;
    rdfs:label "Network Topology Analysis"@en ;
    rdfs:comment "Analysis of network architecture and connectivity patterns within platform infrastructure (gUFO Event)."@en ;
    rdfs:subClassOf cacontology-infrastructure:InfrastructureAnalysis .

cacontology-infrastructure:ServerSeizure a owl:Class ;
    rdfs:label "Server Seizure"@en ;
    rdfs:comment "Physical or virtual seizure of servers hosting platform infrastructure (gUFO Event)."@en ;
    rdfs:subClassOf cacontology-infrastructure:InfrastructureTakedown .

cacontology-infrastructure:UserAccessPatternAnalysis a owl:Class ;
    rdfs:label "User Access Pattern Analysis"@en ;
    rdfs:comment "Analysis of user access patterns and geographic distribution based on infrastructure logs (gUFO Event)."@en ;
    rdfs:subClassOf cacontology-infrastructure:InfrastructureAnalysis .

cacontology-institutional:ForeignCommerceOffense a gufo:SituationType,
        owl:Class ;
    rdfs:label "Foreign Commerce Offense"@en ;
    rdfs:comment "Criminal offense involving travel in foreign commerce for illicit sexual conduct."@en ;
    rdfs:subClassOf gufo:Situation,
        uco-observable:ObservableObject .

cacontology-institutional:RepeatedCrossBorderTravel a gufo:EventType,
        owl:Class ;
    rdfs:label "Repeated Cross Border Travel"@en ;
    rdfs:comment "Pattern of repeated travel to foreign country for exploitation over extended period."@en ;
    rdfs:subClassOf cacontology-institutional:ForeignCommerceTravel .

cacontology-international:GlobalDatabaseNetwork a owl:Class ;
    rdfs:label "Global Database Network"@en ;
    rdfs:comment "Network of interconnected international databases enabling comprehensive cross-referencing and correlation."@en ;
    rdfs:subClassOf cacontology-international:InternationalDatabase .

cacontology-international:GlobalInvestigativeTeam a owl:Class ;
    rdfs:label "Global Investigative Team"@en ;
    rdfs:comment "Multi-national investigative team for large-scale operations like platform takedowns."@en ;
    rdfs:subClassOf cacontology-international:InternationalTaskForce .

cacontology-international:GlobalPlatformTakedown a owl:Class ;
    rdfs:label "Global Platform Takedown"@en ;
    rdfs:comment "Takedown of global platforms with international user bases requiring coordinated action across multiple countries."@en ;
    rdfs:subClassOf cacontology-international:CrossBorderOperation .

cacontology-international:IntelligenceFusion a owl:Class ;
    rdfs:label "Intelligence Fusion"@en ;
    rdfs:comment "Real-time fusion of intelligence from multiple international sources to create comprehensive threat pictures."@en ;
    rdfs:subClassOf cacontology-international:RealTimeIntelligenceSharing .

cacontology-international:InternationalAlert a owl:Class ;
    rdfs:label "International Alert"@en ;
    rdfs:comment "Alert system for sharing critical information across borders."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-international:InternationalIntelligenceSharing a owl:Class ;
    rdfs:label "International Intelligence Sharing"@en ;
    rdfs:comment "Intelligence sharing framework for large-scale operations requiring coordination across multiple intelligence agencies."@en ;
    rdfs:subClassOf cacontology-international:InformationSharingAgreement .

cacontology-international:InternationalTaskForce a owl:Class ;
    rdfs:label "International Task Force"@en ;
    rdfs:comment "Multi-national task force for coordinating child protection investigations."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-international:MultiCountryTakedown a owl:Class ;
    rdfs:label "Multi-Country Takedown"@en ;
    rdfs:comment "Coordinated takedown operation involving law enforcement from multiple countries (like Kidflix operation involving multiple nations)."@en ;
    rdfs:subClassOf cacontology-international:CrossBorderOperation .

cacontology-international:jurisdictionCount a owl:DatatypeProperty ;
    rdfs:label "jurisdiction count"@en ;
    rdfs:comment "Number of jurisdictions involved in the investigation."@en ;
    rdfs:domain cacontology-international:CrossBorderInvestigation ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-coord:MultiAgencyCoordination a gufo:EventType,
        owl:Class ;
    rdfs:label "Multi Agency Coordination"@en ;
    rdfs:comment "Coordination involving multiple law enforcement agencies at various jurisdictional levels."@en ;
    rdfs:subClassOf cacontology-coord:InvestigationCoordination .

cacontology-corruption:AuthoritySymbolExploitation a gufo:EventType,
        owl:Class ;
    rdfs:label "Authority Symbol Exploitation"@en ;
    rdfs:comment "Use of badges, weapons, or other authority symbols to enhance exploitation."@en ;
    rdfs:subClassOf cacontology-corruption:UniformBasedExploitation .

cacontology-corruption:InsiderThreat a gufo:EventType,
        owl:Class ;
    rdfs:label "Insider Threat"@en ;
    rdfs:comment "Threat posed by individuals within law enforcement or military who exploit their position for criminal activity."@en ;
    rdfs:subClassOf cacontology-corruption:LawEnforcementCorruption .

cacontology-legal:ComplianceDocumentationArtifact a gufo:Kind,
        owl:Class ;
    rdfs:label "Compliance Documentation Artifact"@en ;
    dcterms:source "Community & Intelligence Beyond Detection (Global Emancipation Network), 2026-02-10."@en ;
    rdfs:comment "Documentation artifact (record/report/audit trail element) used to prove appropriate action to regulators and support claims of good-faith compliance."@en ;
    rdfs:seeAlso <https://www.linkedin.com/pulse/community-intelligence-beyond-detection-global-emancipation-network-xvemc/> ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject ;
    cacontology-legal:isCountrySpecific false .

cacontology-legal:ComplianceMetrics a gufo:Kind,
        owl:Class ;
    rdfs:label "Compliance Metrics"@en ;
    rdfs:comment "Metrics for measuring legal compliance."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-legal:PolicyDevelopment a gufo:EventType,
        owl:Class ;
    rdfs:label "Policy Development"@en ;
    rdfs:comment "Development of child protection policies."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-legal:SafeHarbor a gufo:Kind,
        owl:Class ;
    rdfs:label "Safe Harbor"@en ;
    dcterms:source "Community & Intelligence Beyond Detection (Global Emancipation Network), 2026-02-10."@en ;
    rdfs:comment "A statutory or regulatory safe harbor provision intended to distinguish good-faith compliance efforts from negligence (e.g., incentives for verified compliance intelligence frameworks)."@en ;
    rdfs:seeAlso <https://www.linkedin.com/pulse/community-intelligence-beyond-detection-global-emancipation-network-xvemc/> ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject ;
    cacontology-legal:isCountrySpecific false .

<https://cacontology.projectvic.org/legal-harmonization/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Legal Harmonization Ontology"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:modified "2026-02-11"^^xsd:date ;
    rdfs:comment "An ontology for modeling international legal frameworks, policy harmonization, and CSAM legislation analysis across 196 countries based on ICMEC's Global Review. Enhanced with gUFO (gentle Unified Foundational Ontology) integration for improved semantic precision and validation capabilities."@en ;
    owl:imports gufo:,
        <https://cacontology.projectvic.org/multi-jurisdiction/2.11.0> ;
    owl:versionIRI <https://cacontology.projectvic.org/legal-harmonization/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-multi:ComplianceMonitoringOperation a owl:Class ;
    rdfs:label "Compliance Monitoring Operation"@en ;
    rdfs:comment "Large-scale operation monitoring sex offender compliance and registration requirements."@en ;
    rdfs:subClassOf cacontology-multi:MultiJurisdictionalInvestigation .

cacontology-multi:MassChildRescueOperation a owl:Class ;
    rdfs:label "Mass Child Rescue Operation"@en ;
    rdfs:comment "Large-scale operation resulting in rescue of 100+ children."@en ;
    rdfs:subClassOf cacontology-multi:ChildRescueCoordination .

cacontology-multi:MultiStateTraffickingInvestigation a owl:Class ;
    rdfs:label "Multi-State Trafficking Investigation"@en ;
    rdfs:comment "Child sex trafficking investigation spanning multiple states."@en ;
    rdfs:subClassOf cacontology-multi:CrossBorderOperation .

cacontology-platforms:AccountSuspensionAction a owl:Class ;
    rdfs:label "Account Suspension Action"@en ;
    rdfs:comment "An action to suspend or terminate a user account due to policy violations. Modeled as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-platforms:LegalDataDisclosureAction a owl:Class ;
    rdfs:label "Legal Data Disclosure Action"@en ;
    rdfs:comment "An action to disclose user data to law enforcement in response to legal process. Modeled as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-platforms:MessagingService a owl:Class ;
    rdfs:label "Messaging Service"@en ;
    rdfs:comment "A digital service for real-time communication and messaging (e.g., WhatsApp, Telegram, Signal, Discord, Kik). Modeled as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:ObservableObject .

cacontology-platforms:SocialMediaPlatform a owl:Class ;
    rdfs:label "Social Media Platform"@en ;
    rdfs:comment "A digital platform for social networking and content sharing (e.g., Facebook, Instagram, TikTok, Twitter, LinkedIn). Modeled as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:ObservableObject .

cacontology-platforms:UserVerificationSystem a owl:Class ;
    rdfs:label "User Verification System"@en ;
    rdfs:comment "Systems used by platforms to verify user identity and age. Modeled as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-platforms:VideoStreamingPlatform a owl:Class ;
    rdfs:label "Video Streaming Platform"@en ;
    rdfs:comment "A platform for video content streaming and sharing (e.g., YouTube, Twitch, OnlyFans, Periscope). Modeled as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:ObservableObject .

cacontology-prevention:DiscreetAccessSystem a owl:Class ;
    rdfs:label "Discreet Access System"@en ;
    rdfs:comment "System allowing discreet access to safety information to reduce bullying and shaming."@en ;
    rdfs:subClassOf cacontology-prevention:DigitalSafety .

cacontology-prevention:EducatorTraining a owl:Class ;
    rdfs:label "Educator Training"@en ;
    rdfs:comment "Training programs specifically designed for educators."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-prevention:InteractiveCourseSystem a owl:Class ;
    rdfs:label "Interactive Course System"@en ;
    rdfs:comment "Interactive online safety course platform with progression tracking and engagement features."@en ;
    rdfs:subClassOf cacontology-prevention:OnlineSafetyEducation .

cacontology-prevention:PostPresentationDisclosure a owl:Class ;
    rdfs:label "Post Presentation Disclosure"@en ;
    rdfs:comment "Victim disclosure that occurs following a safety presentation or educational event."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-prevention:ageGroup a owl:DatatypeProperty ;
    rdfs:label "age group"@en ;
    rdfs:comment "Target age group for safety education."@en ;
    rdfs:domain cacontology-prevention:ChildSafetyEducation ;
    rdfs:range xsd:string .

cacontology-production:PrivateSpaceSurveillance a owl:Class ;
    rdfs:label "Private Space Surveillance"@en ;
    rdfs:comment "Covert surveillance of private spaces where victims have expectation of privacy."@en ;
    rdfs:subClassOf cacontology-production:RecordingAction .

cacontology-recruitment:CoercedPeerRecruitment a owl:Class ;
    rdfs:label "Coerced Peer Recruitment"@en ;
    rdfs:comment "Recruitment where existing victims are forced or coerced to recruit their peers."@en ;
    rdfs:subClassOf cacontology-recruitment:VictimMediatedRecruitment .

cacontology-recruitment:SchoolBasedRecruitment a owl:Class ;
    rdfs:label "School Based Recruitment"@en ;
    rdfs:comment "Trafficking recruitment occurring within or through school environments and relationships."@en ;
    rdfs:subClassOf cacontology-trafficking:VictimRecruitment .

cacontology-sentencing:AppellateDisposition a owl:Class ;
    rdfs:label "Appellate Disposition"@en ;
    dcterms:source "United States v. McCormack (9th Cir. 2017) opinion (CourtListener)."@en ;
    rdfs:comment "Outcome of an appellate issue or appeal (e.g., affirmed, reversed, vacated, remanded). Modeled as gUFO Object."@en ;
    rdfs:seeAlso <https://www.courtlistener.com/opinion/8700418/united-states-v-mccormack/> ;
    rdfs:subClassOf gufo:Object,
        uco-observable:ObservableObject .

cacontology-sentencing:CriminalCharge a owl:Class ;
    rdfs:label "Criminal Charge"@en ;
    rdfs:comment "Formal accusation of criminal activity in ICAC cases. Modeled as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:ObservableObject .

cacontology-sentencing:EvidenceRule a owl:Class ;
    rdfs:label "Evidence Rule"@en ;
    dcterms:source "United States v. McCormack (9th Cir. 2017) opinion (CourtListener)."@en ;
    rdfs:comment "A rule of evidence cited in an appellate issue or opinion (e.g., Federal Rule of Evidence 403, 404(b), 414). Modeled as gUFO Object."@en ;
    rdfs:seeAlso <https://www.courtlistener.com/opinion/8700418/united-states-v-mccormack/> ;
    rdfs:subClassOf gufo:Object,
        uco-observable:ObservableObject .

cacontology-sentencing:StandardOfReview a owl:Class ;
    rdfs:label "Standard of Review"@en ;
    dcterms:source "United States v. McCormack (9th Cir. 2017) opinion (CourtListener)."@en ;
    rdfs:comment "Appellate standard of review applied to an appellate issue (e.g., de novo, abuse of discretion, plain error). Modeled as gUFO Object."@en ;
    rdfs:seeAlso <https://www.courtlistener.com/opinion/8700418/united-states-v-mccormack/> ;
    rdfs:subClassOf gufo:Object,
        uco-observable:ObservableObject .

cacontology-registry:ComplianceBasedArrest a owl:Class ;
    rdfs:label "Compliance Based Arrest"@en ;
    rdfs:comment "Arrest coordinated with scheduled compliance activity such as annual registration review."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-registry:DigitalRecidivismPattern a owl:Class ;
    rdfs:label "Digital Recidivism Pattern"@en ;
    rdfs:comment "Pattern of repeat sexual offenses using digital communication platforms."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-registry:SexOffenderRegistry a owl:Class ;
    rdfs:label "Sex Offender Registry"@en ;
    rdfs:comment "Registry system maintaining information about registered sex offenders."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-registry:VerificationCheck a owl:Class ;
    rdfs:label "Verification Check"@en ;
    rdfs:comment "Official verification of sex offender registration information."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-registry:VictimInformation a owl:Class ;
    rdfs:label "Victim Information"@en ;
    rdfs:comment "Information about victims relevant to registration (age, relationship, count)."@en ;
    rdfs:subClassOf uco-core:UcoObject .

<https://cacontology.projectvic.org/sex-offender-registry/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Sex Offender Registry Ontology"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "An ontology for modeling sex offender registry data, registration requirements, and registry management systems for child protection investigations."@en ;
    owl:versionIRI <https://cacontology.projectvic.org/sex-offender-registry/2.11.0> ;
    owl:versionInfo "2.11.0" .

cacontology-sextortion:AgeDeceptionTactic a owl:Class ;
    rdfs:label "Age Deception Tactic"@en ;
    rdfs:comment "Tactic of lying about age when interacting with children (e.g., adult posing as juvenile)."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-sextortion:ManipulationTactic a owl:Class ;
    rdfs:label "Manipulation Tactic"@en ;
    rdfs:comment "Psychological manipulation technique used to control and exploit victims."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-soe:LivestreamedCoercionShow a owl:Class ;
    rdfs:label "Livestreamed Coercion Show"@en ;
    dcterms:source "Know2Protect brochure (K2P SOE Information.pdf), normalized.txt line 32."@en ;
    rdfs:comment "A coordinated livestreamed coercion event (ritualized 'show') in which participants celebrate, witness, or pressure harmful acts (e.g., \"watch party\", \"cut show\"). This is modeled as an event/action pattern; it is distinct from content artifacts (which should be modeled with production/observable modules as appropriate)."@en ;
    rdfs:seeAlso <https://know2protect.gov> ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-specialized:K9DetectionProgram a owl:Class ;
    rdfs:label "K9 Detection Program"@en ;
    rdfs:comment "Program utilizing trained detection dogs for ICAC investigations. Modeled as gUFO Organization."@en ;
    rdfs:subClassOf gufo:Organization,
        uco-core:UcoObject .

cacontology-street:DrugFacilitatedVulnerability a owl:Class ;
    rdfs:label "Drug Facilitated Vulnerability"@en ;
    rdfs:comment "Creation or exploitation of vulnerability through substance administration."@en ;
    rdfs:subClassOf cacontology-street:SubstanceFacilitatedRecruitment .

cacontology-street:ExplicitCommercialOffer a owl:Class ;
    rdfs:label "Explicit Commercial Offer"@en ;
    rdfs:comment "Direct offer of money in exchange for sexual services or performances."@en ;
    rdfs:subClassOf cacontology-street:DirectTraffickingProposition .

cacontology-synthesis:OffendingChainStage a owl:Class ;
    rdfs:label "Offending Chain Stage"@en ;
    rdfs:comment "A stage within an offending chain."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-tactical:ThreatAssessment a owl:Class ;
    rdfs:label "Threat Assessment"@en ;
    rdfs:comment "Evaluation of potential threats and risks in tactical situation."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-taskforce:MilitaryICACtaskForce a owl:Class ;
    rdfs:label "Military ICAC Task Force"@en ;
    rdfs:comment "ICAC task force for U.S. Armed Forces military branches with specialized military jurisdiction."@en ;
    rdfs:subClassOf cacontology-taskforce:ICACtaskForce .

cacontology-taskforce:NationalICACtaskForceDirectory a owl:Class ;
    rdfs:label "National ICAC Task Force Directory"@en ;
    rdfs:comment "Comprehensive directory of all 61 ICAC task forces across the United States, territories, and military branches."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-taskforce:StateICACtaskForce a owl:Class ;
    rdfs:label "State ICAC Task Force"@en ;
    rdfs:comment "State-level ICAC task force coordinating regional investigations."@en ;
    rdfs:subClassOf cacontology-taskforce:ICACtaskForce .

cacontology-taskforce:TrainingReachMetrics a owl:Class ;
    rdfs:label "Training Reach Metrics"@en ;
    rdfs:comment "Metrics tracking training and education reach to professionals and community."@en ;
    rdfs:subClassOf cacontology-taskforce:TaskForceMetrics .

cacontology-temporal:SuspendedSituation a owl:Class ;
    rdfs:label "Investigation Suspended Situation"@en ;
    rdfs:comment "Situation where investigation is temporarily suspended pending resources, legal decisions, or external factors. Modeled as gUFO Situation with temporal duration."@en ;
    rdfs:subClassOf gufo:Situation .

cacontology-trafficking:VictimRecruitment a owl:Class ;
    rdfs:label "Victim Recruitment"@en ;
    rdfs:comment "Process of identifying, targeting, and acquiring new victims for trafficking operations. Modeled as gUFO Event."@en ;
    rdfs:subClassOf cacontology-trafficking:TraffickingOperation .

cacontology-undercover:ChatRoomInfiltration a owl:Class ;
    rdfs:label "Chat Room Infiltration"@en ;
    rdfs:comment "Undercover operation involving infiltration of online chat rooms or messaging platforms to investigate criminal activity."@en ;
    rdfs:subClassOf cacontology-undercover:UndercoverOperation .

cacontology-undercover:OperationalEvidence a owl:Class ;
    rdfs:label "Operational Evidence"@en ;
    rdfs:comment "Evidence collected during undercover operations including recordings, communications, and observations."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:ObservableObject .

cacontology-undercover:PhysicalLocationSting a owl:Class ;
    rdfs:label "Physical Location Sting"@en ;
    rdfs:comment "Undercover operation conducted at physical location to apprehend suspects responding to trafficking advertisements."@en ;
    rdfs:subClassOf cacontology-undercover:UndercoverOperation .

cacontology-undercover:UndercoverCommunication a owl:Class ;
    rdfs:label "Undercover Communication"@en ;
    rdfs:comment "Communication conducted while using an undercover identity."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:MessageThread .

cacontology-usa-federal:ExtraterritorialSexualExploitationLaw a gufo:SubKind,
        owl:Class ;
    rdfs:label "Extraterritorial Sexual Exploitation Law"@en ;
    rdfs:comment "Federal laws criminalizing sexual exploitation of children committed by U.S. citizens or residents abroad."@en ;
    rdfs:subClassOf cacontology-usa-federal:FederalChildExploitationLaw .

cacontology-usa-federal:FederalChildPornographyLaw a gufo:SubKind,
        owl:Class ;
    rdfs:label "Federal Child Pornography Law"@en ;
    rdfs:comment "Federal statutes criminalizing child pornography production, distribution, receipt, and possession."@en ;
    rdfs:subClassOf cacontology-usa-federal:FederalChildExploitationLaw .

cacontology-usa-federal:FederalInvestigation a gufo:EventType,
        owl:Class ;
    rdfs:label "Federal Investigation"@en ;
    rdfs:comment "Federal investigation of child exploitation crimes. Modeled as gUFO Event with temporal boundaries and evidence gathering."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-usa-federal:FederalProsecutorRole a gufo:Role,
        owl:Class ;
    rdfs:label "Federal Prosecutor Role"@en ;
    rdfs:comment "Role of federal prosecutor handling child exploitation cases. Modeled as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf uco-identity:Role .

cacontology-usa-leg:AppropriationType a owl:Class ;
    rdfs:label "Appropriation Type"@en ;
    rdfs:comment "Type of Congressional appropriation."@en ;
    rdfs:subClassOf gufo:Object ;
    cacontology-legal:jurisdictionScope "US" .

cacontology-usa-leg:FundingStream a owl:Class ;
    rdfs:label "Funding Stream"@en ;
    rdfs:comment "Source of funding for ICAC programs."@en ;
    rdfs:subClassOf gufo:Object .

cacontology-usa-leg:acronym a owl:DatatypeProperty ;
    rdfs:label "Acronym"@en ;
    rdfs:comment "Common acronym for an organization."@en ;
    rdfs:domain uco-identity:Organization ;
    rdfs:range xsd:string .

cacontology-impact:HospitalDischarge a owl:Class ;
    rdfs:label "Hospital Discharge"@en ;
    rdfs:comment "Discharge of trafficking victim from hospital with safety planning and transportation arrangements."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-impact:LongTermEffect a owl:Class ;
    rdfs:label "Long Term Effect"@en ;
    rdfs:comment "Long-term consequences of victimization on the child's life."@en ;
    rdfs:subClassOf gufo:Situation,
        uco-observable:ObservableObject .

cacontology-impact:MultiAgencyVictimResponse a owl:Class ;
    rdfs:label "Multi-Agency Victim Response"@en ;
    rdfs:comment "Coordinated victim assistance involving multiple agencies across jurisdictions."@en ;
    rdfs:subClassOf cacontology-impact:VictimSupport .

cacontology-impact:VictimReintegration a owl:Class ;
    rdfs:label "Victim Reintegration"@en ;
    rdfs:comment "Process of reintegrating trafficking victims back into their communities and families."@en ;
    rdfs:subClassOf cacontology-impact:RecoveryProcess .

cacontology-impact:VictimTransportationAssistance a owl:Class ;
    rdfs:label "Victim Transportation Assistance"@en ;
    rdfs:comment "Provision of transportation assistance to trafficking victims (bus tickets, safe transport)."@en ;
    rdfs:subClassOf cacontology-impact:VictimSupport .

cacontology:ConspiracyToCommitCSA a owl:Class ;
    rdfs:label "Conspiracy to Commit Child Sexual Abuse"@en ;
    rdfs:comment "Criminal conspiracy involving multiple defendants coordinating child sexual abuse or exploitation activities (e.g., 8-defendant Brooklyn trafficking ring)."@en ;
    rdfs:subClassOf cacontology:ChildSexualAbuseEvent .

cacontology-abduction:LocationIsolation a owl:Class ;
    rdfs:label "Location Isolation"@en ;
    rdfs:comment "Use of isolated or secluded locations to prevent victim escape or discovery."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-abduction:StrangerAbductionInvestigation a owl:Class ;
    rdfs:label "Stranger Abduction Investigation"@en ;
    rdfs:comment "Specialized investigation of stranger abduction and sexual exploitation cases."@en ;
    rdfs:subClassOf case-investigation:Investigation .

cacontology-abduction:VictimControlMechanism a owl:Class ;
    rdfs:label "Victim Control Mechanism"@en ;
    rdfs:comment "Methods used to maintain control over victim during abduction and exploitation."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-abduction:VulnerabilityExploitation a owl:Class ;
    rdfs:label "Vulnerability Exploitation"@en ;
    rdfs:comment "Exploitation of specific victim vulnerabilities during stranger abduction."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-asset-forfeiture:CriminalAssetsConfiscationTaskforce a owl:Class ;
    rdfs:label "Criminal Assets Confiscation Taskforce"@en ;
    rdfs:comment "Specialized taskforce responsible for asset restraint and forfeiture in child exploitation cases. Enhanced as gUFO Organization with structured operational frameworks."@en,
        "gUFO Organization: Institutional entity with collective agency and specialized expertise in asset confiscation operations."@en ;
    rdfs:subClassOf gufo:Organization,
        uco-identity:Organization .

cacontology-athletic:SexualEducationExploitation a owl:Class ;
    rdfs:label "Sexual Education Exploitation"@en ;
    rdfs:comment "Use of sexual topics and education as exploitation method within athletic context. Enhanced as gUFO Event."@en,
        "gUFO Event: Educational manipulation processes with defined boundaries and grooming objectives."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-case:InvestigatorAssignment a owl:Class ;
    rdfs:label "Investigator Assignment"@en ;
    rdfs:comment "Specific assignment of investigators to cases with experience levels, caseload management, and specialization tracking. Enhanced as gUFO Event with Role relationships."@en,
        "gUFO Event: Investigator assignment processes linking personnel to gUFO Roles and case responsibilities."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-case:CaseAssignment .

cacontology-custodial:BackgroundCheck a gufo:Kind,
        owl:Class ;
    rdfs:label "Background Check"@en ;
    rdfs:comment "Background verification conducted for custodial or care position. Modeled as gUFO Object with verification results."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:ObservableObject .

cacontology-detection:ContentHashingTool a owl:Class ;
    rdfs:label "Content Hashing Tool"@en ;
    rdfs:comment "A tool for generating perceptual or cryptographic hashes for content matching (e.g., PhotoDNA, pHash, MD5). Modeled as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        uco-tool:AnalyticTool .

cacontology-detection:DatabaseMatchAction a owl:Class ;
    rdfs:label "Database Match Action"@en ;
    rdfs:comment "The action of comparing content against known CSAM hash databases. Modeled as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-detection:DetectionResult a owl:Class ;
    rdfs:label "Detection Result"@en ;
    rdfs:comment "The result of a content detection action including confidence scores and classification. Modeled as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:ObservableObject .

cacontology-detection:MachineLearningDetectionTool a owl:Class ;
    rdfs:label "Machine Learning Detection Tool"@en ;
    rdfs:comment "A tool using machine learning algorithms to detect CSAM content (e.g., Google's CSAI Classifier, Facebook's neural networks). Modeled as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        uco-tool:AnalyticTool .

cacontology-detection:PerceptualHash a owl:Class ;
    rdfs:label "Perceptual Hash"@en ;
    rdfs:comment "A hash that captures visual similarity rather than exact bit patterns (e.g., pHash, aHash, dHash). Modeled as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        uco-types:Hash .

cacontology-educational:TeacherRole a owl:Class ;
    rdfs:label "Teacher Role"@en ;
    rdfs:comment "Teaching role with direct instructional responsibility for students. Enhanced as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf gufo:Role,
        cacontology-educational:EducatorRole ;
    cacontology-gufo:hasAntiRigidityConstraint "Role varies based on subject area and grade level" .

cacontology-enterprises:ContentCurrencySystem a gufo:Kind,
        owl:Class ;
    rdfs:label "Content Currency System"@en ;
    rdfs:comment "System using exploitative content as valuable currency within criminal enterprise for advancement and access."@en ;
    rdfs:subClassOf gufo:FunctionalComplex,
        uco-core:UcoObject .

cacontology-enterprises:CovertEmployeeOperation a gufo:EventType,
        owl:Class ;
    rdfs:label "Covert Employee Operation"@en ;
    rdfs:comment "Operation using online covert employees (OCE) to infiltrate and monitor extremist networks."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-enterprises:ExtremeDegradationCoercion a gufo:EventType,
        owl:Class ;
    rdfs:label "Extreme Degradation Coercion"@en ;
    rdfs:comment "Coercion of victims to engage in extreme degrading activities beyond typical exploitation."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-enterprises:SelfHarmCoercion .

cacontology-enterprises:InnerCore a gufo:SubKind,
        owl:Class ;
    rdfs:label "Inner Core"@en ;
    rdfs:comment "Elite inner core of enterprise members with access to restricted channels and advanced activities."@en ;
    rdfs:subClassOf cacontology-enterprises:EnterpriseHierarchy .

cacontology-enterprises:VulnerablePopulationTargeting a gufo:EventType,
        owl:Class ;
    rdfs:label "Vulnerable Population Targeting"@en ;
    rdfs:comment "Systematic targeting of vulnerable populations including minors with mental health challenges."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-forensics:DatabaseIntelligenceIntegration a owl:Class ;
    rdfs:label "Database Intelligence Integration"@en ;
    rdfs:comment "Integration and correlation against multiple international databases and intelligence sources."@en ;
    rdfs:subClassOf cacontology-forensics:MassDigitalEvidenceProcessing .

cacontology-forensics:DistributedForensicProcessing a owl:Class ;
    rdfs:label "Distributed Forensic Processing"@en ;
    rdfs:comment "Forensic processing distributed across multiple systems and locations for handling massive evidence volumes."@en ;
    rdfs:subClassOf cacontology-forensics:MassDigitalEvidenceProcessing .

cacontology-forensics:EvidenceTriageSystem a owl:Class ;
    rdfs:label "Evidence Triage System"@en ;
    rdfs:comment "Automated system for triaging massive evidence volumes to prioritize high-value targets and critical cases."@en ;
    rdfs:subClassOf cacontology-forensics:AutomatedContentAnalysis .

cacontology-forensics:GeospatialCorrelation a owl:Class ;
    rdfs:label "Geospatial Correlation"@en ;
    rdfs:comment "Correlation analysis based on geographic and location data from multiple sources."@en ;
    rdfs:subClassOf cacontology-forensics:ContentCorrelationAnalysis .

cacontology-forensics:InternationalEvidenceProcessing a owl:Class ;
    rdfs:label "International Evidence Processing"@en ;
    rdfs:comment "Processing of evidence collected from international operations requiring coordination across multiple forensic labs."@en ;
    rdfs:subClassOf cacontology-forensics:MassDigitalEvidenceProcessing .

cacontology-forensics:MachineLearningCorrelation a owl:Class ;
    rdfs:label "Machine Learning Correlation"@en ;
    rdfs:comment "AI/ML-powered correlation analysis to identify complex patterns not visible through traditional methods."@en ;
    rdfs:subClassOf cacontology-forensics:ContentCorrelationAnalysis .

cacontology-forensics:NetworkTrafficAnalysis a owl:Class ;
    rdfs:label "Network Traffic Analysis"@en ;
    rdfs:comment "Analysis of network traffic patterns to identify suspicious communications and data transfers."@en ;
    rdfs:subClassOf cacontology-forensics:UserBehaviorForensics .

cacontology-forensics:RealTimeCorrelation a owl:Class ;
    rdfs:label "Real-Time Correlation"@en ;
    rdfs:comment "Real-time correlation analysis for immediate identification of related evidence and ongoing activities."@en ;
    rdfs:subClassOf cacontology-forensics:ContentCorrelationAnalysis .

cacontology-forensics:TimelineAnalysisAction a owl:Class ;
    rdfs:label "Timeline Analysis Action"@en ;
    rdfs:comment "The action of creating chronological sequences of digital artifacts and events for investigation analysis."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-grooming:DirectTraffickingPropositionGrooming a owl:Class ;
    rdfs:label "Direct Trafficking Proposition Grooming"@en ;
    rdfs:comment "Grooming involving explicit, immediate propositions for commercial sexual activity without gradual normalization."@en ;
    rdfs:subClassOf cacontology-grooming:SexualExploitation .

cacontology-grooming:EscalationPattern a owl:Class ;
    rdfs:label "Escalation Pattern"@en ;
    rdfs:comment "Progressive increase in inappropriate content or requests over time."@en ;
    rdfs:subClassOf cacontology-grooming:GroomingPattern .

cacontology-grooming:GroomingPattern a owl:Class ;
    rdfs:label "Grooming Pattern"@en ;
    rdfs:comment "Identifiable pattern of behavior across multiple communications or interactions that indicates grooming."@en ;
    rdfs:subClassOf gufo:Situation,
        uco-pattern:Pattern .

cacontology-grooming:SexualConsequenceGameGrooming a owl:Class ;
    rdfs:label "Sexual Consequence Game Grooming"@en ;
    rdfs:comment "Physical-space grooming pattern where the perpetrator frames sexualized contact as part of a game with consequences, typically involving multiple juveniles in a group context (e.g., sleepovers, peer gatherings, family events)."@en ;
    rdfs:subClassOf cacontology-grooming:PhysicalSpaceGrooming .

cacontology-hotlines:ClassificationScheme a skos:ConceptScheme ;
    rdfs:label "Hotline Classification Scheme"@en ;
    dcterms:issued "2024-03-20"^^xsd:date ;
    dcterms:modified "2024-05-17"^^xsd:date ;
    rdfs:comment "A scheme for classifying hotline reports and evidence."@en .

cacontology-hotlines:MultiAgencyCoordination a owl:Class ;
    rdfs:label "Multi-Agency Coordination"@en ;
    rdfs:comment "A complex situation involving coordination between hotlines, law enforcement, and service providers. gUFO Situation for comprehensive multi-party modeling."@en,
        "gUFO Situation: Complex coordination contexts involving multiple agencies, jurisdictions, and operational frameworks."@en ;
    rdfs:subClassOf gufo:Situation .

cacontology-infrastructure:ServerInfrastructure a owl:Class ;
    rdfs:label "Server Infrastructure"@en ;
    rdfs:comment "Server and hosting infrastructure supporting platform operations, including web servers, database servers, and application servers (gUFO FunctionalComplex)."@en ;
    rdfs:subClassOf gufo:FunctionalComplex,
        cacontology-infrastructure:PlatformInfrastructure .

cacontology-institutional:MultipleVictimTestimony a gufo:SituationType,
        owl:Class ;
    rdfs:label "Multiple Victim Testimony"@en ;
    rdfs:comment "Coordination of testimony from multiple victims in institutional exploitation case."@en ;
    rdfs:subClassOf gufo:Situation,
        uco-observable:ObservableObject .

cacontology-international:CrossBorderInvestigation a owl:Class ;
    rdfs:label "Cross-Border Investigation"@en ;
    rdfs:comment "Investigation requiring coordination across national boundaries."@en ;
    rdfs:subClassOf cacontology-international:CrossBorderOperation .

cacontology-international:GlobalHotlineNetwork a owl:Class ;
    rdfs:label "Global Hotline Network"@en ;
    rdfs:comment "Network of interconnected national hotlines for child protection reporting."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-international:InternationalDatabase a owl:Class ;
    rdfs:label "International Database"@en ;
    rdfs:comment "Shared database accessible by multiple countries for child protection."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-international:MutualLegalAssistance a owl:Class ;
    rdfs:label "Mutual Legal Assistance"@en ;
    rdfs:comment "Formal legal assistance between countries for investigations and prosecutions."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-international:MutualLegalAssistanceTreatyOperation a owl:Class ;
    rdfs:label "Mutual Legal Assistance Treaty Operation"@en ;
    rdfs:comment "Operational process using Mutual Legal Assistance Treaty (MLAT) for international evidence sharing and cooperation."@en ;
    rdfs:subClassOf cacontology-international:MutualLegalAssistance .

cacontology-international:coordinationComplexity a owl:DatatypeProperty ;
    rdfs:label "coordination complexity"@en ;
    rdfs:comment "Complexity level of international coordination (low, medium, high, complex)."@en ;
    rdfs:domain cacontology-international:CrossBorderOperation ;
    rdfs:range xsd:string .

cacontology-coord:PersonnelSharing a gufo:EventType,
        owl:Class ;
    rdfs:label "Personnel Sharing"@en ;
    rdfs:comment "Sharing of specialized personnel including investigators, analysts, technical experts, and support staff."@en ;
    rdfs:subClassOf cacontology-coord:ResourceSharing .

cacontology-legal:CSAMModelLaw a gufo:Kind,
        owl:Class ;
    rdfs:label "CSAM Model Law"@en ;
    rdfs:comment "Model legislation for Child Sexual Abuse Material regulations."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-legal:GlobalLegalReview a gufo:Kind,
        owl:Class ;
    rdfs:label "Global Legal Review"@en ;
    rdfs:comment "Comprehensive review of child protection legislation across countries."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-multi:InterstateTransportationOffense a owl:Class ;
    rdfs:label "Interstate Transportation Offense"@en ;
    rdfs:comment "Criminal offense involving transportation of victim across state lines."@en ;
    rdfs:subClassOf cacontology-multi:MultiJurisdictionalInvestigation .

cacontology-multi:NationwideOperation a owl:Class ;
    rdfs:label "Nationwide Operation"@en ;
    rdfs:comment "Law enforcement operation coordinated across entire country involving all FBI field offices."@en ;
    rdfs:subClassOf cacontology-multi:NamedMultiJurisdictionalOperation .

cacontology-platforms:ContentModerationCapability a owl:Class ;
    rdfs:label "Content Moderation Capability"@en ;
    rdfs:comment "The ability and methods a platform uses to detect, review, and remove inappropriate content. Modeled as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-platforms:LegalComplianceCapability a owl:Class ;
    rdfs:label "Legal Compliance Capability"@en ;
    rdfs:comment "A platform's ability to respond to legal requests and cooperate with law enforcement. Modeled as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-platforms:ModerationThroughputMetrics a owl:Class ;
    rdfs:label "Moderation Throughput Metrics"@en ;
    dcterms:source "Community & Intelligence Beyond Detection (Global Emancipation Network), 2026-02-10."@en ;
    rdfs:comment "Operational metrics describing moderation throughput and latency (e.g., queue size, review latency, flagged volume)."@en ;
    rdfs:seeAlso <https://www.linkedin.com/pulse/community-intelligence-beyond-detection-global-emancipation-network-xvemc/> ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-prevention:CommunityEngagementMetrics a owl:Class ;
    rdfs:label "Community Engagement Metrics"@en ;
    rdfs:comment "Comprehensive metrics for measuring community engagement across multiple communication channels."@en ;
    rdfs:subClassOf cacontology-prevention:PreventionMetrics .

cacontology-prevention:EducationPortal a owl:Class ;
    rdfs:label "Education Portal"@en ;
    rdfs:comment "Online portal providing educational resources for child protection. Modeled as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-prevention:participantCount a owl:DatatypeProperty ;
    rdfs:label "participant count"@en ;
    rdfs:comment "Number of participants in prevention program."@en ;
    rdfs:domain cacontology-prevention:PreventionProgram ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-production:ProductionSession a owl:Class ;
    rdfs:label "Production Session"@en ;
    rdfs:comment "Individual instance or session of producing child sexual abuse material."@en ;
    rdfs:subClassOf gufo:Situation,
        uco-observable:ObservableObject .

cacontology-registry:PhysicalDescription a owl:Class ;
    rdfs:label "Physical Description"@en ;
    rdfs:comment "Physical description of registered sex offender (height, weight, scars, tattoos)."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-registry:RegisteredAddress a owl:Class ;
    rdfs:label "Registered Address"@en ;
    rdfs:comment "Official registered address of sex offender."@en ;
    rdfs:subClassOf uco-location:Location .

cacontology-registry:RegistrationRestriction a owl:Class ;
    rdfs:label "Registration Restriction"@en ;
    rdfs:comment "Restriction placed on registered sex offender."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-sextortion:SextortionInvestigation a owl:Class ;
    rdfs:label "Sextortion Investigation"@en ;
    rdfs:comment "Investigation specifically focused on sextortion incidents."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-sextortion:threatType a owl:DatatypeProperty ;
    rdfs:label "threat type"@en ;
    rdfs:comment "Type of threat made (screenshot, sharing, posting, contact family)."@en ;
    rdfs:domain cacontology-sextortion:ThreatMechanism ;
    rdfs:range xsd:string .

cacontology-street:HelpOfferApproach a owl:Class ;
    rdfs:label "Help Offer Approach"@en ;
    rdfs:comment "Approach offering assistance such as phone charging, food, transportation, or shelter."@en ;
    rdfs:subClassOf cacontology-street:PretextBasedApproach .

cacontology-street:PretextBasedApproach a owl:Class ;
    rdfs:label "Pretext Based Approach"@en ;
    rdfs:comment "Initial approach using false pretext or offer of assistance to establish contact."@en ;
    rdfs:subClassOf cacontology-street:InitialStreetContact .

cacontology-street:RapidEscalationRecruitment a owl:Class ;
    rdfs:label "Rapid Escalation Recruitment"@en ;
    rdfs:comment "Trafficking recruitment with accelerated timeline from initial contact to exploitation attempt."@en ;
    rdfs:subClassOf cacontology-street:StreetBasedRecruitment .

cacontology-street:StreetVulnerabilityAssessment a owl:Class ;
    rdfs:label "Street Vulnerability Assessment"@en ;
    rdfs:comment "Rapid assessment of individual vulnerability factors in public space encounters."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-street:SubstanceFacilitatedRecruitment a owl:Class ;
    rdfs:label "Substance Facilitated Recruitment"@en ;
    rdfs:comment "Use of alcohol or drugs to facilitate trafficking recruitment and reduce victim resistance."@en ;
    rdfs:subClassOf cacontology-street:StreetBasedRecruitment .

cacontology-tactical:CorrectionalFacility a owl:Class ;
    rdfs:label "Correctional Facility"@en ;
    rdfs:comment "Physical correctional facility where suspects are booked and held. Examples include county jails and correctional centers. Extends uco-core:UcoObject as physical location (NOT digital observable)."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-tactical:ImmigrationHold a owl:Class ;
    rdfs:label "Immigration Hold"@en ;
    rdfs:comment "Immigration detainer placed on suspect due to immigration status. Links booking to immigration enforcement coordination."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-tactical:TacticalTeamMember a owl:Class ;
    rdfs:label "Tactical Team Member"@en ;
    rdfs:comment "Law enforcement officer specialized in tactical operations."@en ;
    rdfs:subClassOf uco-role:Role .

cacontology-trafficking:TraffickingVictimRole a gufo:Role,
        owl:Class ;
    rdfs:label "Trafficking Victim Role"@en ;
    rdfs:comment "Role of person being exploited through sex trafficking. Modeled as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf uco-role:VictimRole ;
    owl:equivalentClass cacontology-gufo:VictimRole .

cacontology-training:capacityLevel a owl:DatatypeProperty ;
    rdfs:label "capacity level"@en ;
    rdfs:comment "Level of capacity being built (basic, intermediate, advanced, expert)."@en ;
    rdfs:domain cacontology-training:CapacityBuildingProgram ;
    rdfs:range xsd:string .

cacontology-training:trainingDuration a owl:DatatypeProperty ;
    rdfs:label "training duration"@en ;
    rdfs:comment "Duration of training program from start to completion."@en ;
    rdfs:domain cacontology-training:InternationalTraining ;
    rdfs:range xsd:duration .

cacontology-training:trainingReachCount a owl:DatatypeProperty ;
    rdfs:label "training reach count"@en ;
    rdfs:comment "Number of participants reached by training program."@en ;
    rdfs:domain cacontology-training:InternationalTraining ;
    rdfs:range xsd:nonNegativeInteger .

cacontology-undercover:MeetingLocationArrangement a owl:Class ;
    rdfs:label "Meeting Location Arrangement"@en ;
    rdfs:comment "Suspect arranging specific meeting location (motel, hotel, other private location)."@en ;
    rdfs:subClassOf cacontology-undercover:SuspectCommunicationAction .

cacontology-undercover:MinorPersonaAgent a owl:Class ;
    rdfs:label "Minor Persona Agent"@en ;
    rdfs:comment "Undercover agent operating with minor persona identity on social media platforms."@en ;
    rdfs:subClassOf cacontology-undercover:UndercoverAgent .

cacontology-undercover:MultiplePersonaOperation a owl:Class ;
    rdfs:label "Multiple Persona Operation"@en ;
    rdfs:comment "Undercover operation where agent poses as multiple fictitious minors (e.g., 14-year-old and 12-year-old sisters). Extends MinorPersonaOperation."@en ;
    rdfs:subClassOf cacontology-undercover:MinorPersonaOperation .

cacontology-undercover:PredatorTargetingOperation a owl:Class ;
    rdfs:label "Predator Targeting Operation"@en ;
    rdfs:comment "Undercover operation specifically targeting online predators who seek contact with children."@en ;
    rdfs:subClassOf cacontology-undercover:UndercoverOperation .

cacontology-undercover:SocialMediaUndercoverOperation a owl:Class ;
    rdfs:label "Social Media Undercover Operation"@en ;
    rdfs:comment "Undercover operation conducted on social media platforms to identify predators seeking to meet children."@en ;
    rdfs:subClassOf cacontology-undercover:UndercoverOperation .

cacontology-undercover:WebsiteAdvertisementResponse a owl:Class ;
    rdfs:label "Website Advertisement Response"@en ;
    rdfs:comment "Undercover operation responding to existing trafficking advertisements posted by suspects."@en ;
    rdfs:subClassOf cacontology-undercover:UndercoverOperation .

cacontology-us-ncmec1:NCMECIncidentType a owl:Class ;
    rdfs:label "NCMEC Incident Type"@en ;
    rdfs:comment "Types of incidents as defined by NCMEC Cybertip API (Section B.1.1). This class represents the standardized incident categories used in NCMEC reporting."@en ;
    rdfs:subClassOf cacontology-us-ncmec1:NCMECCybertipReport .

cacontology-us-ncmec1:NCMECReportAnnotation a owl:Class ;
    rdfs:label "NCMEC Report Annotation"@en ;
    rdfs:comment "Tags to describe the NCMEC report. Source: NCMEC Cybertip API Section B.1.1, reportAnnotations element."@en ;
    rdfs:subClassOf cacontology-us-ncmec1:NCMECCybertipReport .

cacontology-us-ncmec1:PlatformCooperation a owl:Class ;
    rdfs:label "Platform Cooperation"@en ;
    rdfs:comment "Cooperation from digital platforms in providing information for NCMEC tips."@en ;
    rdfs:subClassOf uco-observable:ObservableObject .

cacontology-us-ncmec1:TipProcessing a owl:Class ;
    rdfs:label "Tip Processing"@en ;
    rdfs:comment "Processing workflow for NCMEC tips from receipt to investigation referral."@en ;
    rdfs:subClassOf uco-observable:ObservableObject .

cacontology-usa-federal:FederalChildExploitationLaw a gufo:Kind,
        owl:Class ;
    rdfs:label "Federal Child Exploitation Law"@en ;
    rdfs:comment "U.S. federal law related to child exploitation as enforced by CEOS. Modeled as gUFO Object providing legal framework."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-usa-leg:parentAgency a owl:ObjectProperty ;
    rdfs:label "Parent Agency"@en ;
    rdfs:comment "Links an agency to its parent cabinet or sub-cabinet agency."@en ;
    rdfs:domain uco-identity:Organization ;
    rdfs:range uco-identity:Organization ;
    rdfs:subPropertyOf gufo:isComponentOf .

cacontology-impact:EmergencyHelpSeeking a owl:Class ;
    rdfs:label "Emergency Help Seeking"@en ;
    rdfs:comment "Victim's attempt to seek emergency help during trafficking or exploitation, such as calling 911 (e.g., Wilmington, NC call)."@en ;
    rdfs:subClassOf cacontology-impact:VictimBehavior .

cacontology-impact:HospitalIntervention a owl:Class ;
    rdfs:label "Hospital Intervention"@en ;
    rdfs:comment "Medical intervention and assessment of trafficking victim at hospital following emergency call."@en ;
    rdfs:subClassOf cacontology-impact:EmergencyResponse .

cacontology-abduction:AbductionExploitationPattern a owl:Class ;
    rdfs:label "Abduction Exploitation Pattern"@en ;
    rdfs:comment "Patterns of sexual exploitation following stranger abduction."@en ;
    rdfs:subClassOf cacontology:ChildSexualAbuseEvent .

cacontology-abduction:ForcedLocationEntry a owl:Class ;
    rdfs:label "Forced Location Entry"@en ;
    rdfs:comment "Forcing victim to enter buildings, apartments, or other locations for exploitation."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-analyst:OccupationalHarm a owl:Class ;
    rdfs:label "Occupational Harm"@en ;
    dcterms:source "Community & Intelligence Beyond Detection (Global Emancipation Network), 2026-02-10."@en ;
    rdfs:comment "Occupational harm experienced by investigators or content analysts arising from exposure to traumatic materials or sustained operational stressors."@en ;
    rdfs:seeAlso <https://www.linkedin.com/pulse/community-intelligence-beyond-detection-global-emancipation-network-xvemc/> ;
    rdfs:subClassOf gufo:Situation .

cacontology-athletic:TeamDynamicsExploitation a owl:Class ;
    rdfs:label "Team Dynamics Exploitation"@en ;
    rdfs:comment "Exploitation using team membership, group dynamics, and athletic authority structures. Enhanced as gUFO Situation."@en,
        "gUFO Situation: Complex coordination contexts involving multiple team members and authority relationships."@en ;
    rdfs:subClassOf gufo:Situation,
        uco-action:Action .

cacontology-case:CaseTracking a owl:Class ;
    rdfs:label "Case Tracking"@en ;
    rdfs:comment "Systematic tracking of case progress, updates, and status changes across multiple systems and jurisdictions. Enhanced as gUFO Object for systematic monitoring."@en,
        "gUFO Object: Tracking systems with measurable properties and systematic update mechanisms."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-detection:RiskStratificationResult a owl:Class ;
    rdfs:label "Risk Stratification Result"@en ;
    dcterms:source "Community & Intelligence Beyond Detection (Global Emancipation Network), 2026-02-10."@en ;
    rdfs:comment "A risk-stratified output artifact (tier/score/rationale) produced from detection or tip signals to support explainable prioritization."@en ;
    rdfs:seeAlso <https://www.linkedin.com/pulse/community-intelligence-beyond-detection-global-emancipation-network-xvemc/> ;
    rdfs:subClassOf gufo:Object,
        uco-observable:ObservableObject .

cacontology-enterprises:EncryptedChannelNetwork a gufo:Kind,
        owl:Class ;
    rdfs:label "Encrypted Channel Network"@en ;
    rdfs:comment "Network of encrypted messaging channels used for enterprise coordination and content sharing."@en ;
    rdfs:subClassOf gufo:FunctionalComplex,
        uco-observable:ObservableObject .

cacontology-forensics:ChainOfCustodyAction a owl:Class ;
    rdfs:label "Chain of Custody Action"@en ;
    rdfs:comment "An action that documents evidence handling, transfer, and custody maintaining legal admissibility."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-forensics:CrossPlatformCorrelation a owl:Class ;
    rdfs:label "Cross-Platform Correlation"@en ;
    rdfs:comment "Analysis correlating evidence across multiple platforms and services to identify coordinated criminal activities."@en ;
    rdfs:subClassOf cacontology-forensics:ContentCorrelationAnalysis .

cacontology-forensics:TemporalPatternAnalysis a owl:Class ;
    rdfs:label "Temporal Pattern Analysis"@en ;
    rdfs:comment "Analysis of temporal patterns and timing correlations across different pieces of evidence."@en ;
    rdfs:subClassOf cacontology-forensics:ContentCorrelationAnalysis .

cacontology-forensics:VictimIdentificationProcess a owl:Class ;
    rdfs:label "Victim Identification Process"@en ;
    rdfs:comment "Systematic process for identifying child victims from seized images and videos during long-term investigations."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-grooming:GroomingMessage a owl:Class ;
    rdfs:label "Grooming Message"@en ;
    rdfs:comment "Communication containing grooming behavior or inappropriate content directed at a child."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:Message .

cacontology-grooming:SexualContentExchangeGrooming a owl:Class ;
    rdfs:label "Sexual Content Exchange Grooming"@en ;
    rdfs:comment "Grooming involving exchange of sexual content to normalize sexual behavior."@en ;
    rdfs:subClassOf cacontology-grooming:OnlineGrooming .

cacontology-grooming:SubstanceFacilitatedGrooming a owl:Class ;
    rdfs:label "Substance Facilitated Grooming"@en ;
    rdfs:comment "Grooming that uses alcohol or drugs to reduce victim resistance and facilitate exploitation."@en ;
    rdfs:subClassOf cacontology-grooming:GroomingBehavior .

cacontology-strategy:ModuleIntegrationStrategy a owl:Class ;
    rdfs:label "Module Integration Strategy"@en ;
    rdfs:comment "Framework for systematically integrating gUFO concepts into ICAC ontology modules. Defines patterns, priorities, and validation approaches."@en ;
    rdfs:subClassOf gufo:Plan .

cacontology-hotlines:StatusScheme a skos:ConceptScheme ;
    rdfs:label "Hotline Status Scheme"@en ;
    dcterms:issued "2024-03-20"^^xsd:date ;
    dcterms:modified "2024-05-17"^^xsd:date ;
    rdfs:comment "A scheme for tracking hotline report status."@en .

cacontology-institutional:InstitutionalFounder a gufo:Role,
        owl:Class ;
    rdfs:label "Institutional Founder"@en ;
    rdfs:comment "Individual who founded the charitable or care institution."@en ;
    rdfs:subClassOf gufo:Object,
        uco-role:Role .

cacontology-institutional:PositionOfTrustAbuse a gufo:EventType,
        owl:Class ;
    rdfs:label "Position of Trust Abuse"@en ;
    rdfs:comment "Abuse of position of trust within institutional care setting."@en ;
    rdfs:subClassOf cacontology-institutional:InstitutionalExploitation .

cacontology-institutional:SystematicInstitutionalAbuse a gufo:EventType,
        owl:Class ;
    rdfs:label "Systematic Institutional Abuse"@en ;
    rdfs:comment "Systematic pattern of abuse affecting multiple children over extended period."@en ;
    rdfs:subClassOf cacontology-institutional:InstitutionalExploitation .

cacontology-coord:IntelligenceSharing a gufo:EventType,
        owl:Class ;
    rdfs:label "Intelligence Sharing"@en ;
    rdfs:comment "Specialized sharing of intelligence information including tactical, strategic, operational, and threat assessment data."@en ;
    rdfs:subClassOf cacontology-coord:InformationSharing .

cacontology-corruption:PositionOfAuthorityAbuse a gufo:EventType,
        owl:Class ;
    rdfs:label "Position of Authority Abuse"@en ;
    rdfs:comment "Abuse of law enforcement or military position of authority for exploitation purposes."@en ;
    rdfs:subClassOf cacontology-corruption:LawEnforcementCorruption .

cacontology-legal:LegalCompliance a gufo:SituationType,
        owl:Class ;
    rdfs:label "Legal Compliance"@en ;
    rdfs:comment "Situation of compliance with international standards."@en ;
    rdfs:subClassOf gufo:Situation,
        uco-core:UcoObject .

cacontology-legal:RegionalFramework a gufo:Kind,
        owl:Class ;
    rdfs:label "Regional Framework"@en ;
    rdfs:comment "Regional legal framework for child protection."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-multi:InformationSharing a owl:Class ;
    rdfs:label "Information Sharing"@en ;
    rdfs:comment "Formal sharing of intelligence or evidence between jurisdictions."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-multi:LargeScaleOperation a owl:Class ;
    rdfs:label "Large Scale Operation"@en ;
    rdfs:comment "Operation involving 100+ law enforcement actions or extensive coordination."@en ;
    rdfs:subClassOf cacontology-multi:NamedMultiJurisdictionalOperation .

<https://cacontology.projectvic.org/multi-jurisdiction/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Multi-Jurisdictional Operations Ontology"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:issued "2024-12-19"^^xsd:date ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "An ontology for representing multi-jurisdictional investigations, inter-agency coordination, resource sharing, and jurisdictional challenges in Internet Crimes Against Children cases, extending UCO and CASE with gUFO foundational ontology enhancements."@en ;
    owl:imports <http://purl.org/nemo/gufo>,
        <https://cacontology.projectvic.org/2.11.0>,
        <https://ontology.unifiedcyberontology.org/uco/action>,
        <https://ontology.unifiedcyberontology.org/uco/core>,
        <https://ontology.unifiedcyberontology.org/uco/identity>,
        <https://ontology.unifiedcyberontology.org/uco/location>,
        <https://ontology.unifiedcyberontology.org/uco/observable>,
        <https://ontology.unifiedcyberontology.org/uco/role> ;
    owl:versionIRI <https://cacontology.projectvic.org/multi-jurisdiction/2.11.0> .

cacontology-partnerships:CrowdsourcingInvestigation a owl:Class ;
    rdfs:label "Crowdsourcing Investigation"@en ;
    rdfs:comment "Investigation leveraging public participation for object identification, geolocation, and evidence analysis. Modeled as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action ;
    owl:equivalentClass cacontology-gufo:CriminalEvent .

cacontology-physical:ComputerEquipment a owl:Class ;
    rdfs:label "Computer Equipment"@en ;
    rdfs:comment "Digital devices including computers, laptops, tablets, and mobile phones seized as evidence (gUFO FunctionalComplex)."@en ;
    rdfs:subClassOf gufo:FunctionalComplex,
        cacontology-physical:PhysicalEvidence .

cacontology-platforms:ContentModerationAction a owl:Class ;
    rdfs:label "Content Moderation Action"@en ;
    rdfs:comment "An action taken by a platform to moderate content (review, remove, restrict, etc.). Modeled as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-platforms:ContentModerationQueue a owl:Class ;
    rdfs:label "Content Moderation Queue"@en ;
    dcterms:source "Community & Intelligence Beyond Detection (Global Emancipation Network), 2026-02-10."@en ;
    rdfs:comment "A queue/backlog of content items awaiting moderation review and operational handling at scale (e.g., large volumes of flagged CSAM candidates)."@en ;
    rdfs:seeAlso <https://www.linkedin.com/pulse/community-intelligence-beyond-detection-global-emancipation-network-xvemc/> ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-platforms:DataRetentionPolicy a owl:Class ;
    rdfs:label "Data Retention Policy"@en ;
    rdfs:comment "A platform's policy for how long they retain user data and content. Modeled as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-platforms:ElectronicDeviceEvidence a owl:Class ;
    rdfs:label "Electronic Device Evidence"@en ;
    rdfs:comment "Digital evidence found on electronic devices including computers, phones, and storage media."@en ;
    rdfs:subClassOf uco-observable:ObservableObject .

cacontology-prevention:CommunityEmailList a owl:Class ;
    rdfs:label "Community Email List"@en ;
    rdfs:comment "Organized email communication system for ongoing safety updates to parents and community members."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-production:ExtendedProductionPeriod a owl:Class ;
    rdfs:label "Extended Production Period"@en ;
    rdfs:comment "Ongoing pattern of production over an extended time period."@en ;
    rdfs:subClassOf gufo:Situation,
        uco-observable:ObservableObject .

cacontology-production:ProductionEquipment a owl:Class ;
    rdfs:label "Production Equipment"@en ;
    rdfs:comment "Devices and equipment used to produce child sexual abuse material."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:ObservableObject .

cacontology-sextortion:ExtortionDemand a owl:Class ;
    rdfs:label "Extortion Demand"@en ;
    rdfs:comment "Specific demand made by sextortion offender using threat leverage."@en ;
    rdfs:subClassOf uco-observable:ObservableObject .

cacontology-specialized:OfficerWellnessProgram a owl:Class ;
    rdfs:label "Officer Wellness Program"@en ;
    rdfs:comment "Program providing mental health and wellness support to ICAC officers. Modeled as gUFO Organization."@en ;
    rdfs:subClassOf gufo:Organization,
        uco-core:UcoObject .

cacontology-street:LocationTransition a owl:Class ;
    rdfs:label "Location Transition"@en ;
    rdfs:comment "Movement of victim from initial contact location to exploitation location."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-street:StreetRecruitmentLocation a owl:Class ;
    rdfs:label "Street Recruitment Location"@en ;
    rdfs:comment "Specific location where street-based trafficking recruitment occurs."@en ;
    rdfs:subClassOf uco-location:Location .

cacontology-street:VictimStreetResponse a owl:Class ;
    rdfs:label "Victim Street Response"@en ;
    rdfs:comment "Victim's response to street-based recruitment attempts and trafficking propositions."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-synthesis:DistributionObservation a owl:Class ;
    rdfs:label "Distribution Observation"@en ;
    rdfs:comment "A structured observation about a distribution (count/denominator and/or rank) reported by a report."@en ;
    rdfs:subClassOf cacontology-synthesis:Claim .

cacontology-tactical:BookingAction a owl:Class ;
    rdfs:label "Booking Action"@en ;
    rdfs:comment "Process of booking a suspect into a correctional facility including fingerprinting, photography, and data entry. Extends investigation:InvestigativeAction for CASE ontology integration."@en ;
    rdfs:subClassOf gufo:Event,
        case-investigation:InvestigativeAction .

cacontology-taskforce:CoordinationMechanism a owl:Class ;
    rdfs:label "Coordination Mechanism"@en ;
    rdfs:comment "Formal mechanism for coordinating task force activities."@en ;
    rdfs:subClassOf gufo:Situation,
        uco-observable:ObservableObject .

cacontology-taskforce:MultiRegionalState a owl:Class ;
    rdfs:label "Multi-Regional State"@en ;
    rdfs:comment "State with multiple ICAC task forces covering different geographic regions."@en ;
    rdfs:subClassOf uco-location:Location .

cacontology-taskforce:TaskForceContactInformation a owl:Class ;
    rdfs:label "Task Force Contact Information"@en ;
    rdfs:comment "Contact information for ICAC task force including phone, email, and website."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-trafficking:VictimTransportation a owl:Class ;
    rdfs:label "Victim Transportation"@en ;
    rdfs:comment "Transportation of trafficking victims between locations for commercial sexual exploitation. Modeled as gUFO Event."@en ;
    rdfs:subClassOf cacontology-trafficking:TraffickingOperation .

cacontology-usa-leg:FundingNeed a owl:Class ;
    rdfs:label "Funding Need"@en ;
    rdfs:comment "Funding requirement from an ICAC task force."@en ;
    rdfs:subClassOf gufo:Object .

cacontology-usa-leg:Outcome a owl:Class ;
    rdfs:label "Outcome"@en ;
    rdfs:comment "Result of advocacy efforts."@en ;
    rdfs:subClassOf gufo:Object .

cacontology-usa-leg:USCabinetAgency a owl:Class ;
    rdfs:label "U.S. Cabinet Agency"@en ;
    rdfs:comment "Cabinet-level department of the United States Federal Government."@en ;
    rdfs:subClassOf gufo:Organization,
        uco-identity:Organization ;
    cacontology-legal:countryCode "US" ;
    cacontology-legal:isCountrySpecific true ;
    cacontology-legal:jurisdictionScope "US" .

cacontology-usa-leg:USSubCabinetAgency a owl:Class ;
    rdfs:label "U.S. Sub-Cabinet Agency"@en ;
    rdfs:comment "Sub-cabinet law enforcement agency within a cabinet department."@en ;
    rdfs:subClassOf gufo:Organization,
        uco-identity:Organization ;
    cacontology-legal:countryCode "US" ;
    cacontology-legal:isCountrySpecific true ;
    cacontology-legal:jurisdictionScope "US" .

cacontology-abduction:DisguiseBasedConcealment a owl:Class ;
    rdfs:label "Disguise Based Concealment"@en ;
    rdfs:comment "Use of disguises or concealment methods to hide identity during approach and abduction."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-abduction:PostAbductionReporting a owl:Class ;
    rdfs:label "Post Abduction Reporting"@en ;
    rdfs:comment "Victim's reporting of abduction and exploitation to authorities or family."@en ;
    rdfs:subClassOf cacontology-abduction:VictimAbductionResponse .

cacontology-abduction:VictimAbductionResponse a owl:Class ;
    rdfs:label "Victim Abduction Response"@en ;
    rdfs:comment "Victim's response to stranger abduction and exploitation attempts."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-abduction:VictimTargetingPattern a owl:Class ;
    rdfs:label "Victim Targeting Pattern"@en ;
    rdfs:comment "Patterns of victim selection and targeting in stranger abduction cases."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-ai:AIDetectionTool a owl:Class ;
    rdfs:label "AI Detection Tool"@en ;
    rdfs:comment "Software tool specialized for detecting AI-generated content in digital media. Enhanced as gUFO Object for tool modeling."@en ;
    rdfs:subClassOf gufo:Object,
        uco-tool:AnalyticTool .

cacontology-athletic:AthleticExploitationDiscovery a owl:Class ;
    rdfs:label "Athletic Exploitation Discovery"@en ;
    rdfs:comment "Discovery of athletic coaching exploitation through various reporting mechanisms. Enhanced as gUFO Event."@en,
        "gUFO Event: Discovery processes with defined timelines and reporting mechanisms."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action ;
    cacontology-gufo:hasTemporalProperty cacontology-gufo:discoveryBeginTime,
        cacontology-gufo:reportingTime .

cacontology-athletic:AthleticFacilityExploitation a owl:Class ;
    rdfs:label "Athletic Facility Exploitation"@en ;
    rdfs:comment "Exploitation occurring in athletic facilities and sports venues. Enhanced as gUFO Event occurring in gUFO Objects."@en,
        "gUFO Event: Exploitation processes occurring within physical athletic facilities and spaces."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-forensics:ForensicImage a owl:Class ;
    rdfs:label "Forensic Image"@en ;
    rdfs:comment "A bit-for-bit copy of digital media created using forensically sound methods, maintaining evidence integrity."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:Image .

cacontology-grooming:PhysicalSpaceGrooming a owl:Class ;
    rdfs:label "Physical Space Grooming"@en ;
    rdfs:comment "Grooming that occurs in physical spaces rather than digital platforms."@en ;
    rdfs:subClassOf cacontology-grooming:GroomingBehavior .

cacontology-grooming:RapidEscalationGrooming a owl:Class ;
    rdfs:label "Rapid Escalation Grooming"@en ;
    rdfs:comment "Grooming with accelerated timeline from initial contact to exploitation attempt, bypassing traditional relationship-building phases."@en ;
    rdfs:subClassOf cacontology-grooming:GroomingBehavior .

cacontology-strategy:ValidationStrategy a owl:Class ;
    rdfs:label "Validation Strategy"@en ;
    rdfs:comment "Framework for validating gUFO integration across ICAC modules ensuring consistency and correctness."@en ;
    rdfs:subClassOf gufo:Plan .

cacontology-hotlines:HotlineAction a owl:Class ;
    rdfs:label "Hotline Action"@en ;
    rdfs:comment "An action taken as part of processing a hotline report. Enhanced as gUFO Event for comprehensive temporal process modeling."@en,
        "gUFO Event: Temporal processes with defined start/end points, participants, and outcomes in hotline operations."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-institutional:USProsecutionForeignCrimes a gufo:EventType,
        owl:Class ;
    rdfs:label "US Prosecution Foreign Crimes"@en ;
    rdfs:comment "US prosecution of crimes committed by US citizens in foreign countries."@en ;
    rdfs:subClassOf gufo:Event,
        case-investigation:Investigation .

cacontology-legal:LegalReform a gufo:EventType,
        owl:Class ;
    rdfs:label "Legal Reform"@en ;
    rdfs:comment "Process of reforming child protection legislation."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-legal:LegislativeInstrument a owl:Class ;
    rdfs:label "Legislative Instrument"@en ;
    rdfs:comment "A bill, resolution, or other legislative document."@en ;
    rdfs:subClassOf gufo:AbstractArtifact ;
    cacontology-legal:isCountrySpecific false .

cacontology-legal:PolicyHarmonization a gufo:EventType,
        owl:Class ;
    rdfs:label "Policy Harmonization"@en ;
    rdfs:comment "Process of harmonizing policies across jurisdictions."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-multi:CrossBorderOperation a owl:Class ;
    rdfs:label "Cross Border Operation"@en ;
    rdfs:comment "Law enforcement operation that crosses state or national borders."@en ;
    rdfs:subClassOf cacontology-multi:MultiJurisdictionalInvestigation .

cacontology-multi:NamedMultiJurisdictionalOperation a owl:Class ;
    rdfs:label "Named Multi-Jurisdictional Operation"@en ;
    rdfs:comment "Formally named multi-phase operation coordinated across jurisdictions."@en ;
    rdfs:subClassOf cacontology-multi:MultiJurisdictionalInvestigation .

cacontology-multi:StateLineCrossing a owl:Class ;
    rdfs:label "State Line Crossing"@en ;
    rdfs:comment "Documented crossing of state boundaries during offense."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-partnerships:CoordinationMechanism a owl:Class ;
    rdfs:label "Coordination Mechanism"@en ;
    rdfs:comment "Mechanism for coordinating activities and sharing information between partners. Modeled as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-physical:BodycamFootage a owl:Class ;
    rdfs:label "Bodycam Footage"@en ;
    rdfs:comment "Body camera footage from law enforcement officers. Used for suspect identification and evidence. IS a digital observable as it is a digital recording."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:ObservableObject .

cacontology-physical:ConsentToSearchAuthorization a owl:Class ;
    rdfs:label "Consent to Search Authorization"@en ;
    rdfs:comment "Authorization obtained through suspect's consent to search property or devices. Extends investigation:Authorization for CASE ontology integration."@en ;
    rdfs:subClassOf gufo:Object,
        case-investigation:Authorization .

cacontology-prevention:CommunityOutreach a owl:Class ;
    rdfs:label "Community Outreach"@en ;
    rdfs:comment "Outreach programs to engage communities in child protection. Modeled as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-production:ProductionLocation a owl:Class ;
    rdfs:label "Production Location"@en ;
    rdfs:comment "Physical location where child sexual abuse material production occurred."@en ;
    rdfs:subClassOf gufo:Object,
        uco-location:Location .

cacontology-recruitment:PeerRecruitmentNetwork a owl:Class ;
    rdfs:label "Peer Recruitment Network"@en ;
    rdfs:comment "Network of traffickers utilizing existing victims to recruit new victims through peer relationships and social connections."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-sextortion:SextortionCommunication a owl:Class ;
    rdfs:label "Sextortion Communication"@en ;
    rdfs:comment "Communication patterns specific to sextortion incidents."@en ;
    rdfs:subClassOf uco-observable:Message .

cacontology-sextortion:VictimResponse a owl:Class ;
    rdfs:label "Victim Response"@en ;
    rdfs:comment "Pattern of victim response to sextortion attempts."@en ;
    rdfs:subClassOf uco-observable:ObservableObject .

cacontology-street:IsolatedLocation a owl:Class ;
    rdfs:label "Isolated Location"@en ;
    rdfs:comment "Secluded location used for exploitation away from public view."@en ;
    rdfs:subClassOf uco-location:Location .

cacontology-street:VictimReporting a owl:Class ;
    rdfs:label "Victim Reporting"@en ;
    rdfs:comment "Victim's decision to report trafficking recruitment or assault to authorities."@en ;
    rdfs:subClassOf cacontology-street:HelpSeekingBehavior .

cacontology-temporal:AgeAtTimeSituation a owl:Class ;
    rdfs:label "Age At Time Situation"@en ;
    rdfs:comment "gUFO QualityValueAttributionSituation specializing in attribution of an Age quality value to a specific person over a time-bounded interval (e.g., the victim was 13 years old during a 2025 grooming event)."@en ;
    rdfs:subClassOf gufo:QualityValueAttributionSituation .

cacontology-trafficking:TraffickerRole a gufo:Role,
        owl:Class ;
    rdfs:label "Trafficker Role"@en ;
    rdfs:comment "Role of individual involved in sex trafficking operations. Modeled as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf uco-role:OffenderRole ;
    owl:equivalentClass cacontology-gufo:OffenderRole .

cacontology-trafficking:TraffickingEnterprise a owl:Class ;
    rdfs:label "Trafficking Enterprise"@en ;
    rdfs:comment "Criminal organization engaged in systematic sex trafficking operations with multiple defendants and coordinated activities. Modeled as gUFO Organization."@en ;
    rdfs:subClassOf gufo:Organization,
        uco-identity:Organization .

cacontology-undercover:UndercoverChatInvestigation a owl:Class ;
    rdfs:label "Undercover Chat Investigation"@en ;
    rdfs:comment "Investigation using chat communications on various platforms with agents posing as minors."@en ;
    rdfs:subClassOf cacontology-undercover:ChatRoomInfiltration .

cacontology-us-ncmec1:NCMECCybertipReport a owl:Class ;
    rdfs:label "NCMEC Cybertip Report"@en ;
    rdfs:comment "A report submitted to NCMEC's CyberTipline. This class represents the root structure of a NCMEC report as defined in the NCMEC Cybertip API documentation."@en ;
    rdfs:subClassOf uco-observable:ObservableObject .

cacontology-impact:EmergencyResponse a owl:Class ;
    rdfs:label "Emergency Response"@en ;
    rdfs:comment "Immediate response to victim emergency help requests, including law enforcement and victim services coordination."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-athletic:PhysicalContactEscalation a owl:Class ;
    rdfs:label "Physical Contact Escalation"@en ;
    rdfs:comment "Escalation of physical contact within athletic training context. Enhanced as gUFO Event."@en,
        "gUFO Event: Contact escalation processes with measurable progression patterns and temporal boundaries."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action ;
    cacontology-gufo:hasTemporalProperty cacontology-gufo:escalationBeginTime,
        cacontology-gufo:escalationPeakTime .

cacontology-custodial:CustodyArrangement a gufo:Kind,
        owl:Class ;
    rdfs:label "Custody Arrangement"@en ;
    rdfs:comment "Formal or informal arrangement for child custody or care. Modeled as gUFO Object with temporal arrangement characteristics."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:ObservableObject .

cacontology-detection:COPINEClassificationScheme a gufo:Object,
        skos:ConceptScheme ;
    rdfs:label "COPINE Classification Scheme"@en ;
    dcterms:issued "2024-12-19"^^xsd:date ;
    rdfs:comment "European COPINE classification scale for child abuse imagery severity. Modeled as gUFO Object."@en .

cacontology-detection:SARClassificationScheme a gufo:Object,
        skos:ConceptScheme ;
    rdfs:label "SAR Classification Scheme"@en ;
    dcterms:issued "2024-12-19"^^xsd:date ;
    rdfs:comment "NCMEC's Suspected Abuse Report (SAR) classification scale from 1-5. Modeled as gUFO Object."@en .

cacontology-educational:WrittenHarassment a owl:Class ;
    rdfs:label "Written Harassment"@en ;
    rdfs:comment "Harassment through written comments on student work, assignments, or academic materials. Enhanced as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action ;
    cacontology-gufo:hasTemporalProperty cacontology-gufo:beginTimePoint,
        cacontology-gufo:endTimePoint .

cacontology-enterprises:EnterpriseRole a gufo:Role,
        owl:Class ;
    rdfs:label "Enterprise Role"@en ;
    rdfs:comment "Role within child exploitation enterprise structure."@en ;
    rdfs:subClassOf uco-role:Role .

cacontology-hotlines:EvidenceItem a owl:Class ;
    rdfs:label "Evidence Item"@en ;
    rdfs:comment "A piece of evidence associated with a hotline report. Enhanced as gUFO Object for comprehensive digital artifact modeling."@en,
        "gUFO Object: Digital artifacts representing evidence materials with structured metadata and forensic characteristics."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:DigitalArtifact .

cacontology-institutional:DonorManipulation a gufo:EventType,
        owl:Class ;
    rdfs:label "Donor Manipulation"@en ;
    rdfs:comment "Manipulation of donors and supporters to maintain funding for abusive operations."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-international:EuropolOperation a owl:Class ;
    rdfs:label "Europol Operation"@en ;
    rdfs:comment "Large-scale international operation coordinated by Europol involving multiple EU member states and international partners."@en ;
    rdfs:subClassOf cacontology-international:CrossBorderOperation .

cacontology-corruption:UniformBasedExploitation a gufo:EventType,
        owl:Class ;
    rdfs:label "Uniform Based Exploitation"@en ;
    rdfs:comment "Exploitation activity conducted while wearing official law enforcement or military uniform for authority enhancement."@en ;
    rdfs:subClassOf cacontology-corruption:InsiderThreat .

cacontology-legal:AdvocacyProcess a gufo:EventType,
        owl:Class ;
    rdfs:label "Advocacy Process"@en ;
    rdfs:comment "Process used in legislative advocacy."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action ;
    cacontology-legal:isCountrySpecific false .

cacontology-legal:ComplianceProcess a gufo:EventType,
        owl:Class ;
    rdfs:label "Compliance Process"@en ;
    rdfs:comment "Process for ensuring legal compliance."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action ;
    cacontology-legal:isCountrySpecific false .

cacontology-legal:TreatyFramework a gufo:Kind,
        owl:Class ;
    rdfs:label "Treaty Framework"@en ;
    rdfs:comment "International treaty framework for child protection."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-multi:ResourceSharing a owl:Class ;
    rdfs:label "Resource Sharing"@en ;
    rdfs:comment "Sharing of personnel, equipment, or expertise between agencies."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-multi:TaskForce a owl:Class ;
    rdfs:label "Task Force"@en ;
    rdfs:comment "Temporary multi-agency organization formed for specific operations."@en ;
    rdfs:subClassOf gufo:Object,
        uco-identity:Organization .

cacontology-platforms:AnonymousContactOpportunity a owl:Class ;
    rdfs:label "Anonymous Contact Opportunity"@en ;
    rdfs:comment "Opportunities provided by platform for anonymous users to initiate contact with other users."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-recruitment:SchoolStaffMember a owl:Class ;
    rdfs:label "School Staff Member"@en ;
    rdfs:comment "Employee of educational institution involved in reporting or responding to trafficking."@en ;
    rdfs:subClassOf uco-role:Role .

cacontology-recruitment:VictimMediatedRecruitment a owl:Class ;
    rdfs:label "Victim Mediated Recruitment"@en ;
    rdfs:comment "Recruitment of new victims through existing trafficking victims acting as intermediaries."@en ;
    rdfs:subClassOf cacontology-trafficking:VictimRecruitment .

cacontology-sentencing:AppellateIssue a owl:Class ;
    rdfs:label "Appellate Issue"@en ;
    dcterms:source "United States v. McCormack (9th Cir. 2017) opinion (CourtListener)."@en ;
    rdfs:comment "Issue raised on appeal to challenge a conviction or sentence (e.g., evidentiary admission, sufficiency of evidence, sentencing reasonableness). Modeled as gUFO Object."@en ;
    rdfs:seeAlso <https://www.courtlistener.com/opinion/8700418/united-states-v-mccormack/> ;
    rdfs:subClassOf gufo:Object,
        uco-observable:ObservableObject .

cacontology-registry:ConvictingOffense a owl:Class ;
    rdfs:label "Convicting Offense"@en ;
    rdfs:comment "Criminal offense that resulted in sex offender registration requirement."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-taskforce:RegionalTaskForce a owl:Class ;
    rdfs:label "Regional Task Force"@en ;
    rdfs:comment "ICAC task force covering specific geographic region within a state."@en ;
    rdfs:subClassOf cacontology-taskforce:StateICACtaskForce .

cacontology-taskforce:ResourceSharing a owl:Class ;
    rdfs:label "Resource Sharing"@en ;
    rdfs:comment "Sharing of resources, personnel, or expertise between task forces."@en ;
    rdfs:subClassOf gufo:Situation,
        uco-observable:ObservableObject .

cacontology-taskforce:TaskForceMetrics a owl:Class ;
    rdfs:label "Task Force Metrics"@en ;
    rdfs:comment "Performance metrics and statistics for ICAC task force operations."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-training:ProfessionalCertification a owl:Class ;
    rdfs:label "Professional Certification"@en ;
    rdfs:comment "Formal certification for child protection professionals. Modeled as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-undercover:UndercoverIdentity a owl:Class ;
    rdfs:label "Undercover Identity"@en ;
    rdfs:comment "A fictitious identity created and maintained by law enforcement for undercover operations."@en ;
    rdfs:subClassOf gufo:Object,
        uco-identity:Identity .

cacontology-us-ncmec1:CyberTipAnalysis a owl:Class ;
    rdfs:label "CyberTip Analysis"@en ;
    rdfs:comment "Analytical processing and assessment of NCMEC CyberTip reports by law enforcement."@en ;
    rdfs:subClassOf uco-observable:ObservableObject .

cacontology-us-ncmec1:InvestigationTrigger a owl:Class ;
    rdfs:label "Investigation Trigger"@en ;
    rdfs:comment "Event or information that triggers law enforcement investigation based on NCMEC tip."@en ;
    rdfs:subClassOf uco-observable:ObservableObject .

cacontology-athletic:AthleticCoachRole a owl:Class ;
    rdfs:label "Athletic Coach Role"@en ;
    rdfs:comment "Athletic coaching role with authority over team members and training activities. Enhanced as anti-rigid gUFO Role."@en,
        "gUFO Role (Anti-Rigid): Coaching roles with flexible assignment and dynamic authority levels."@en ;
    rdfs:subClassOf gufo:Role,
        cacontology-educational:CoachRole ;
    cacontology-gufo:hasAntiRigidityConstraint "Role assignment varies based on team needs and coaching specialization" .

cacontology-athletic:PhysicalTrainingCoercion a owl:Class ;
    rdfs:label "Physical Training Coercion"@en ;
    rdfs:comment "Use of physical training, conditioning, and exercise as coercion mechanism for sexual exploitation. Enhanced as gUFO Event."@en,
        "gUFO Event: Physical coercion processes with temporal duration and measurable impacts."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action ;
    cacontology-gufo:hasTemporalProperty cacontology-gufo:coercionBeginTime,
        cacontology-gufo:coercionEndTime .

cacontology-detection:ManualClassificationAction a owl:Class ;
    rdfs:label "Manual Classification Action"@en ;
    rdfs:comment "The action of human review and classification of suspected CSAM content. Modeled as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-enterprises:EnterpriseHierarchy a gufo:Kind,
        owl:Class ;
    rdfs:label "Enterprise Hierarchy"@en ;
    rdfs:comment "Organizational hierarchy within child exploitation enterprise defining leadership and member roles."@en ;
    rdfs:subClassOf gufo:FunctionalComplex,
        uco-core:UcoObject .

cacontology-institutional:VulnerableChildInCare a gufo:Phase,
        owl:Class ;
    rdfs:label "Vulnerable Child in Care"@en ;
    rdfs:comment "Child in institutional care due to vulnerability factors."@en ;
    rdfs:subClassOf gufo:Object,
        uco-identity:Person .

cacontology-international:InternationalReferral a owl:Class ;
    rdfs:label "International Referral"@en ;
    rdfs:comment "Referral of cases or information to international partners."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-legal:InternationalLawEnforcement a gufo:EventType,
        owl:Class ;
    rdfs:label "International Law Enforcement"@en ;
    rdfs:comment "Law enforcement cooperation across international boundaries."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-legal:LegislativeAssessment a gufo:Kind,
        owl:Class ;
    rdfs:label "Legislative Assessment"@en ;
    rdfs:comment "Assessment of existing child protection legislation."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-partnerships:PartnerRole a gufo:Role,
        owl:Class ;
    rdfs:label "Partner Role"@en ;
    rdfs:comment "Role played by an organization within a public-private partnership framework. Modeled as anti-rigid gUFO Role."@en ;
    rdfs:subClassOf uco-role:Role .

cacontology-physical:AbuseFacilitationItem a owl:Class ;
    rdfs:label "Abuse Facilitation Item"@en ;
    rdfs:comment "Physical items intended for use in facilitating child abuse or exploitation (gUFO Object)."@en ;
    rdfs:subClassOf cacontology-physical:PhysicalEvidence .

cacontology-production:RecordingDevice a owl:Class ;
    rdfs:label "Recording Device"@en ;
    rdfs:comment "Device capable of capturing video or photographic content."@en ;
    rdfs:subClassOf cacontology-production:ProductionEquipment .

cacontology-recruitment:SchoolVulnerabilityFactor a owl:Class ;
    rdfs:label "School Vulnerability Factor"@en ;
    rdfs:comment "Factors within educational environment that increase vulnerability to recruitment."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-sentencing:FederalCharge a owl:Class ;
    rdfs:label "Federal Charge"@en ;
    rdfs:comment "Criminal charge under federal law and jurisdiction. Modeled as gUFO Object."@en ;
    rdfs:subClassOf cacontology-sentencing:CriminalCharge .

cacontology-sentencing:FloridaStateCharge a owl:Class ;
    rdfs:label "Florida State Charge"@en ;
    rdfs:comment "Criminal charge under Florida state law and jurisdiction for ICAC-related offenses. Modeled as gUFO Object."@en ;
    rdfs:subClassOf cacontology-sentencing:StateCharge .

cacontology-street:VulnerabilityIndicator a owl:Class ;
    rdfs:label "Vulnerability Indicator"@en ;
    rdfs:comment "Observable characteristic or behavior indicating potential trafficking vulnerability."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-tactical:ArrestOperation a owl:Class ;
    rdfs:label "Arrest Operation"@en ;
    rdfs:comment "Law enforcement operation to apprehend and take suspect into custody. Extends investigation:InvestigativeAction for proper CASE ontology integration."@en ;
    rdfs:subClassOf gufo:Event,
        case-investigation:InvestigativeAction .

cacontology-trafficking:TraffickingOperation a owl:Class ;
    rdfs:label "Trafficking Operation"@en ;
    rdfs:comment "Coordinated trafficking activity involving multiple perpetrators, victims, and locations. Modeled as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action ;
    owl:equivalentClass cacontology-gufo:CriminalEvent .

cacontology-undercover:MeetingLocation a owl:Class ;
    rdfs:label "Meeting Location"@en ;
    rdfs:comment "Physical location arranged for meeting with alleged minor. Extends uco-location:Location as this represents a physical place."@en ;
    rdfs:subClassOf gufo:Object,
        uco-location:Location .

cacontology-usa-leg:USCongressionalCommittee a owl:Class ;
    rdfs:label "U.S. Congressional Committee"@en ;
    rdfs:comment "Committee of the United States Congress."@en ;
    rdfs:subClassOf gufo:Organization,
        uco-identity:Organization ;
    cacontology-legal:countryCode "US" ;
    cacontology-legal:isCountrySpecific true ;
    cacontology-legal:jurisdictionScope "US" .

cacontology-educational:ClassroomExploitationContext a owl:Class ;
    rdfs:label "Classroom Exploitation Context"@en ;
    rdfs:comment "Specific classroom situations and contexts where exploitation occurs. Enhanced as gUFO Object for context modeling."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject ;
    cacontology-gufo:hasTemporalProperty cacontology-gufo:contextTimePoint .

cacontology-enterprises:Lorebook a gufo:Kind,
        owl:Class ;
    rdfs:label "Lorebook"@en ;
    rdfs:comment "Edited compilation of victim content including images, videos, and personal information organized by enterprise members."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:ObservableObject .

cacontology-infrastructure:SecurityInfrastructure a owl:Class ;
    rdfs:label "Security Infrastructure"@en ;
    rdfs:comment "Security systems protecting platform infrastructure from detection and takedown efforts (gUFO FunctionalComplex)."@en ;
    rdfs:subClassOf gufo:FunctionalComplex,
        cacontology-infrastructure:PlatformInfrastructure .

cacontology-international:InformationSharingAgreement a owl:Class ;
    rdfs:label "Information Sharing Agreement"@en ;
    rdfs:comment "Formal agreement governing information sharing between countries."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-legal:LegislativeRole a owl:Class ;
    rdfs:label "Legislative Role"@en ;
    rdfs:comment "Role an actor plays in the legislative ecosystem."@en ;
    rdfs:subClassOf gufo:Role,
        uco-core:Role ;
    cacontology-legal:isCountrySpecific false .

cacontology-partnerships:InformationSharingFramework a owl:Class ;
    rdfs:label "Information Sharing Framework"@en ;
    rdfs:comment "Framework governing how information is shared between public and private partners while protecting privacy and investigation integrity. Modeled as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-physical:SuspectVehicle a owl:Class ;
    rdfs:label "Suspect Vehicle"@en ;
    rdfs:comment "Vehicle registered to or used by suspect in ICAC offense. Used for evidence tracking when suspect travels to meet alleged minor. Physical evidence item."@en ;
    rdfs:subClassOf cacontology-physical:PhysicalEvidence .

cacontology-platforms:AnonymousChatPlatform a owl:Class ;
    rdfs:label "Anonymous Chat Platform"@en ;
    rdfs:comment "Platform that allows anonymous or minimally verified communication, enabling contact without identity verification."@en ;
    rdfs:subClassOf cacontology-platforms:MessagingService .

cacontology-prevention:ChildSafetyEducation a owl:Class ;
    rdfs:label "Child Safety Education"@en ;
    rdfs:comment "Education programs teaching children about safety."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-prevention:PreventionMetrics a owl:Class ;
    rdfs:label "Prevention Metrics"@en ;
    rdfs:comment "Metrics for measuring prevention program effectiveness."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-prevention:SafetyProtocol a owl:Class ;
    rdfs:label "Safety Protocol"@en ;
    rdfs:comment "Protocol designed to ensure child safety in various settings."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-production:ProducedContent a owl:Class ;
    rdfs:label "Produced Content"@en ;
    rdfs:comment "Child sexual abuse material created through production activities."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:DigitalArtifact .

cacontology-recruitment:EducationalInstitution a owl:Class ;
    rdfs:label "Educational Institution"@en ;
    rdfs:comment "School or educational facility where recruitment occurs or reporting takes place."@en ;
    rdfs:subClassOf uco-identity:Organization .

cacontology-street:PostContactReinforcement a owl:Class ;
    rdfs:label "Post Contact Reinforcement"@en ;
    rdfs:comment "Follow-up contact after initial encounter to reinforce trafficking proposition."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-synthesis:Report a owl:Class ;
    rdfs:label "Report"@en ;
    rdfs:comment "A report or publication treated as a collected source document (an intellectual work), distinct from the concrete artifact(s) that realize it."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-temporal:PhaseTransitionEvent a owl:Class ;
    rdfs:label "Phase Transition Event"@en ;
    rdfs:comment "Event marking transition between investigation phases. Modeled as gUFO Event with temporal boundaries and phase change effects."@en ;
    rdfs:subClassOf [ a owl:Restriction ;
            owl:onClass gufo:Phase ;
            owl:onProperty cacontology-temporal:transitionsFrom ;
            owl:qualifiedCardinality "1"^^xsd:nonNegativeInteger ],
        [ a owl:Restriction ;
            owl:onClass gufo:Phase ;
            owl:onProperty cacontology-temporal:transitionsTo ;
            owl:qualifiedCardinality "1"^^xsd:nonNegativeInteger ],
        gufo:Event .

cacontology-training:CapacityBuildingProgram a owl:Class ;
    rdfs:label "Capacity Building Program"@en ;
    rdfs:comment "Structured program for building organizational and individual capacity. Modeled as gUFO Organization."@en ;
    rdfs:subClassOf gufo:Organization,
        uco-core:UcoObject .

cacontology:CACInvestigation a owl:Class ;
    rdfs:label "CAC Investigation"@en ;
    rdfs:comment "A child-protection investigation that follows a standard action lifecycle that commonly begins with the discovery of CSAM, the receipt of a cybertip, or a call to a hotline. This class extends the CASE Investigation class to provide CAC-specific investigation capabilities with gUFO Object modeling."@en ;
    rdfs:subClassOf gufo:Object,
        case-investigation:Investigation .

cacontology-abduction:WeaponBasedCoercion a owl:Class ;
    rdfs:label "Weapon Based Coercion"@en ;
    rdfs:comment "Use of weapons to threaten, intimidate, and control victims during abduction and exploitation."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-case:CaseClosure a owl:Class ;
    rdfs:label "Case Closure"@en ;
    rdfs:comment "Formal case closure process including disposition, appeals status, and archival procedures. Enhanced as gUFO Event for closure processes."@en,
        "gUFO Event: Closure processes with defined temporal boundaries and final disposition outcomes."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action ;
    cacontology-gufo:hasTemporalProperty cacontology-gufo:closureBeginTime,
        cacontology-gufo:closureTime .

cacontology-custodial:PositionOfTrust a gufo:Role,
        owl:Class ;
    rdfs:label "Position of Trust"@en ;
    rdfs:comment "Role or position that grants special access to or authority over children. Modeled as anti-rigid gUFO Role with temporal participation."@en ;
    rdfs:subClassOf gufo:Role,
        uco-role:Role .

cacontology-detection:AutomatedDetectionAction a owl:Class ;
    rdfs:label "Automated Detection Action"@en ;
    rdfs:comment "The action of using automated systems to detect potential CSAM content. Modeled as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action ;
    owl:equivalentClass cacontology-gufo:CriminalEvent .

cacontology-educational:EducatorRole a owl:Class ;
    rdfs:label "Educator Role"@en ;
    rdfs:comment "Professional role within educational institution with access to students. Enhanced as anti-rigid gUFO Role for role evolution modeling."@en ;
    rdfs:subClassOf gufo:Role,
        uco-role:Role ;
    cacontology-gufo:hasAntiRigidityConstraint "Role changes based on employment status and institutional context" ;
    cacontology-gufo:hasTemporalProperty cacontology-gufo:employmentBeginTimePoint,
        cacontology-gufo:employmentEndTimePoint .

cacontology-forensics:UserBehaviorForensics a owl:Class ;
    rdfs:label "User Behavior Forensics"@en ;
    rdfs:comment "Forensic analysis of user behavior patterns across massive user databases for investigation prioritization."@en ;
    rdfs:subClassOf cacontology-forensics:MassDigitalEvidenceProcessing .

cacontology-institutional:CrossBorderPersonalTravel a gufo:EventType,
        owl:Class ;
    rdfs:label "Cross Border Personal Travel"@en ;
    rdfs:comment "Personal travel across national borders specifically for child exploitation purposes."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-institutional:TrustedAdultRole a gufo:Role,
        owl:Class ;
    rdfs:label "Trusted Adult Role"@en ;
    rdfs:comment "Role as trusted adult authority figure within institutional care setting."@en ;
    rdfs:subClassOf cacontology-institutional:CareProviderRole .

cacontology-legal:LegalFrameworkGap a gufo:Kind,
        owl:Class ;
    rdfs:label "Legal Framework Gap"@en ;
    rdfs:comment "Identified gap in legal framework coverage."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-legal:Statute a owl:Class ;
    rdfs:label "Statute"@en ;
    rdfs:comment "Enacted law within a jurisdiction."@en ;
    rdfs:subClassOf gufo:Norm ;
    cacontology-legal:isCountrySpecific false .

cacontology-specialized:NamedOperation a owl:Class ;
    rdfs:label "Named Operation"@en ;
    rdfs:comment "Formally named multi-phase operation with specific objectives. Modeled as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action ;
    owl:equivalentClass cacontology-gufo:CriminalEvent .

cacontology-tactical:TacticalEquipment a owl:Class ;
    rdfs:label "Tactical Equipment"@en ;
    rdfs:comment "Specialized equipment used in tactical operations."@en ;
    rdfs:subClassOf uco-observable:ObservableObject .

cacontology-undercover:SuspectCommunicationAction a owl:Class ;
    rdfs:label "Suspect Communication Action"@en ;
    rdfs:comment "Base class for criminal communication actions initiated by suspect during undercover operation."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-impact:RecoveryProcess a owl:Class ;
    rdfs:label "Recovery Process"@en ;
    rdfs:comment "Process of healing and recovery from victimization."@en ;
    rdfs:subClassOf gufo:Situation,
        uco-observable:ObservableObject .

cacontology-ai:AICSAMInvestigation a owl:Class ;
    rdfs:label "AI-CSAM Investigation"@en ;
    rdfs:comment "Investigation specifically focused on AI-generated child sexual abuse material, requiring specialized techniques and legal frameworks. Enhanced as gUFO Event for complex investigation modeling."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action ;
    cacontology-gufo:hasTemporalProperty cacontology-gufo:beginTimePoint,
        cacontology-gufo:duration,
        cacontology-gufo:endTimePoint .

cacontology-forensics:AutomatedContentAnalysis a owl:Class ;
    rdfs:label "Automated Content Analysis"@en ;
    rdfs:comment "Automated analysis of large volumes of content using machine learning and AI for rapid classification and triage."@en ;
    rdfs:subClassOf cacontology-forensics:MassDigitalEvidenceProcessing .

cacontology-international:RealTimeIntelligenceSharing a owl:Class ;
    rdfs:label "Real-Time Intelligence Sharing"@en ;
    rdfs:comment "Real-time sharing of intelligence and alerts between international partners for immediate threat response and coordination."@en ;
    rdfs:subClassOf cacontology-international:InternationalIntelligenceSharing .

cacontology-coord:JointInvestigation a gufo:EventType,
        owl:Class ;
    rdfs:label "Joint Investigation"@en ;
    rdfs:comment "Formal joint investigation involving multiple agencies working together with shared resources, command structure, and unified reporting."@en ;
    rdfs:subClassOf cacontology-coord:InvestigationCoordination .

cacontology-recruitment:SchoolBasedReporting a owl:Class ;
    rdfs:label "School Based Reporting"@en ;
    rdfs:comment "Reporting of trafficking incidents through educational institution personnel."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-registry:RecidivistSexOffender a owl:Class ;
    rdfs:label "Recidivist Sex Offender"@en ;
    rdfs:comment "Registered sex offender who has committed subsequent sexual offenses after initial conviction and registration."@en ;
    rdfs:subClassOf cacontology-registry:RegisteredSexOffender .

cacontology-sextortion:SextortionProgression a owl:Class ;
    rdfs:label "Sextortion Progression"@en ;
    rdfs:comment "Sequential phases of sextortion from initial contact through exploitation."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-sextortion:ThreatMechanism a owl:Class ;
    rdfs:label "Threat Mechanism"@en ;
    rdfs:comment "Specific method of threatening or coercing victims using obtained material."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-street:InitialStreetContact a owl:Class ;
    rdfs:label "Initial Street Contact"@en ;
    rdfs:comment "First contact between trafficker and victim occurring in public space."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-taskforce:TaskForceHostOrganization a owl:Class ;
    rdfs:label "Task Force Host Organization"@en ;
    rdfs:comment "Organization that hosts and coordinates an ICAC task force."@en ;
    rdfs:subClassOf uco-identity:Organization .

cacontology-usa-leg:LegislativeStage a gufo:Phase,
        owl:Class ;
    rdfs:label "Legislative Stage"@en ;
    rdfs:comment "Stage in the U.S. legislative process."@en ;
    rdfs:subClassOf gufo:Phase ;
    cacontology-legal:isCountrySpecific true ;
    cacontology-legal:jurisdictionScope "US" .

cacontology-impact:TraumaIndicator a owl:Class ;
    rdfs:label "Trauma Indicator"@en ;
    rdfs:comment "Observable signs or symptoms indicating psychological trauma."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:ObservableObject .

cacontology-forensics:ContentCorrelationAnalysis a owl:Class ;
    rdfs:label "Content Correlation Analysis"@en ;
    rdfs:comment "Analysis correlating content across multiple users and platforms for identifying networks and relationships."@en ;
    rdfs:subClassOf cacontology-forensics:AutomatedContentAnalysis .

cacontology-partnerships:TechnologyCooperation a owl:Class ;
    rdfs:label "Technology Cooperation"@en ;
    rdfs:comment "Cooperation in developing and deploying technology solutions for child protection. Modeled as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-physical:CriminalProcurement a owl:Class ;
    rdfs:label "Criminal Procurement"@en ;
    rdfs:comment "Action of acquiring items specifically for criminal purposes (gUFO Event)."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-prevention:EducationalResource a owl:Class ;
    rdfs:label "Educational Resource"@en ;
    rdfs:comment "Resource designed for educational purposes in child protection."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-street:StreetBasedRecruitment a owl:Class ;
    rdfs:label "Street Based Recruitment"@en ;
    rdfs:comment "Trafficking recruitment occurring in public spaces through direct physical approach and opportunistic exploitation."@en ;
    rdfs:subClassOf cacontology-trafficking:VictimRecruitment .

cacontology-synthesis:TextEvidencePointer a owl:Class ;
    rdfs:label "Text Evidence Pointer"@en ;
    rdfs:comment "A resolvable pointer to a location in a text artifact (e.g., normalized.txt lines), optionally with quote and quote hash."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-case:CaseMetrics a owl:Class ;
    rdfs:label "Case Metrics"@en ;
    rdfs:comment "Performance metrics and analytics for case management including duration, resolution rates, and resource utilization. Enhanced as gUFO Object for metric management."@en,
        "gUFO Object: Metrics objects with measurable characteristics and analytical properties."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-coord:CommunicationProtocol a gufo:SituationType,
        owl:Class ;
    rdfs:label "Communication Protocol"@en ;
    rdfs:comment "Formal protocols governing communication between agencies including channels, frequencies, and procedures."@en ;
    rdfs:subClassOf gufo:Situation,
        uco-core:UcoObject .

cacontology-legal:LegislativeProcess a gufo:EventType,
        owl:Class ;
    rdfs:label "Legislative Process"@en ;
    rdfs:comment "A step in the legislative lifecycle - applicable across jurisdictions."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action ;
    cacontology-legal:isCountrySpecific false .

cacontology-registry:RegistrationRecord a owl:Class ;
    rdfs:label "Registration Record"@en ;
    rdfs:comment "Official record of sex offender registration including all required data elements."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-specialized:SpecializedInvestigativeUnit a owl:Class ;
    rdfs:label "Specialized Investigative Unit"@en ;
    rdfs:comment "Specialized unit with unique capabilities for ICAC investigations. Modeled as gUFO Organization."@en ;
    rdfs:subClassOf gufo:Organization,
        uco-identity:Organization .

cacontology-taskforce:SpecializedUnit a owl:Class ;
    rdfs:label "Specialized Unit"@en ;
    rdfs:comment "Specialized unit within ICAC task force focused on specific aspects of investigations."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:ObservableObject .

cacontology-ai:AIGeneratedCSAM a owl:Class ;
    rdfs:label "AI-Generated CSAM"@en ;
    rdfs:comment "Child sexual abuse material fully generated by artificial intelligence without depicting real victims, but still contributing to objectification and sexualization of children. Enhanced as gUFO Object for precise foundational modeling."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:ObservableObject ;
    cacontology-gufo:hasTemporalProperty cacontology-gufo:creationTimePoint ;
    cacontology-gufo:hasValidationConstraint "gUFO Object validation for digital artifacts" .

cacontology-custodial:AuthorityFigure a gufo:Role,
        owl:Class ;
    rdfs:label "Authority Figure"@en ;
    rdfs:comment "Individual in position of authority, trust, or power over children. Modeled as anti-rigid gUFO Role with relational foundation."@en ;
    rdfs:subClassOf gufo:Role,
        uco-role:Role .

cacontology-enterprises:SelfHarmCoercion a gufo:EventType,
        owl:Class ;
    rdfs:label "Self Harm Coercion"@en ;
    rdfs:comment "Coercion of victims to engage in self-harm activities including cutting, burning, and extreme degradation."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-forensics:ForensicAcquisitionAction a owl:Class ;
    rdfs:label "Forensic Acquisition Action"@en ;
    rdfs:comment "The action of creating a forensically sound copy of digital evidence using write-blocking and verification procedures."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-gufo:Investigation rdfs:subClassOf [ a owl:Restriction ;
            owl:onClass cacontology-temporal:InvestigationLifecycle ;
            owl:onProperty gufo:participatesIn ;
            owl:qualifiedCardinality "1"^^xsd:nonNegativeInteger ] .

cacontology-hotlines:HotlineReport a owl:Class ;
    rdfs:label "Hotline Report"@en ;
    rdfs:comment "A report submitted to a hotline about potential child sexual abuse material. Enhanced as gUFO Situation representing complex multi-party coordination contexts involving reporters, hotline organizations, evidence, and processing workflows."@en,
        "gUFO Situation: Complex multi-party contexts involving coordination between reporters, hotline staff, evidence analysis, and law enforcement coordination."@en ;
    rdfs:subClassOf gufo:Situation,
        uco-observable:Observation .

cacontology-infrastructure:PaymentProcessing a owl:Class ;
    rdfs:label "Payment Processing"@en ;
    rdfs:comment "Financial processing systems enabling platform monetization through subscription fees, content purchases, or cryptocurrency transactions (gUFO FunctionalComplex)."@en ;
    rdfs:subClassOf gufo:FunctionalComplex,
        uco-observable:ObservableObject .

cacontology-international:InternationalPartnership a owl:Class ;
    rdfs:label "International Partnership"@en ;
    rdfs:comment "A formal partnership between countries or organizations for child protection cooperation."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-synthesis:Claim a owl:Class ;
    rdfs:label "Claim"@en ;
    rdfs:comment "A first-class, queryable claim extracted from a report (finding, recommendation, distribution, gap, or scope constraint)."@en ;
    rdfs:subClassOf uco-core:UcoObject .

cacontology-impact:PsychologicalHarm a owl:Class ;
    rdfs:label "Psychological Harm"@en ;
    rdfs:comment "Mental or emotional harm experienced by child victims."@en ;
    rdfs:subClassOf gufo:IntrinsicMoment,
        uco-observable:ObservableObject .

cacontology-impact:VictimSupport a owl:Class ;
    rdfs:label "Victim Support"@en ;
    rdfs:comment "Support services provided to child victims and their families."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology:ChildSexualAbuseEvent a owl:Class ;
    rdfs:label "Child Sexual Abuse Event"@en ;
    rdfs:comment "A class representing any event involving child sexual abuse or exploitation. This is the base class for all CAC incidents modeled as gUFO Event. Victim and offender ages at the time of the event SHOULD be represented using cacontology-temporal:AgeAtTimeSituation instances rather than static age literals to support age-of-consent, Romeo-and-Juliet, and other temporal legal analyses."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Crime ;
    owl:equivalentClass cacontology-gufo:CriminalEvent .

cacontology-ai:AIContentDetection a owl:Class ;
    rdfs:label "AI Content Detection"@en ;
    rdfs:comment "Process of identifying AI-generated or AI-altered content to distinguish from authentic material during investigations. Enhanced as gUFO Event for forensic process modeling."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action ;
    cacontology-gufo:hasTemporalProperty cacontology-gufo:beginTimePoint,
        cacontology-gufo:endTimePoint .

cacontology-international:CrossBorderOperation a owl:Class ;
    rdfs:label "Cross-Border Operation"@en ;
    rdfs:comment "Investigation or operation spanning multiple countries."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-corruption:InsiderThreatDetection a gufo:EventType,
        owl:Class ;
    rdfs:label "Insider Threat Detection"@en ;
    rdfs:comment "Detection of corruption within law enforcement or military personnel."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-platforms:ElectronicServiceProvider a owl:Class ;
    rdfs:label "Electronic Service Provider (ESP)"@en ;
    rdfs:comment "An organization that provides digital services and platforms, with responsibilities for content moderation and law enforcement cooperation. Modeled as gUFO Organization."@en ;
    rdfs:subClassOf gufo:Organization,
        uco-identity:Organization .

cacontology-platforms:SocialMediaEvidence a owl:Class ;
    rdfs:label "Social Media Evidence"@en ;
    rdfs:comment "Digital evidence collected from social media platforms, including posts, messages, and account information."@en ;
    rdfs:subClassOf uco-observable:ObservableObject .

cacontology-sentencing:CriminalSentence a owl:Class ;
    rdfs:label "Criminal Sentence"@en ;
    rdfs:comment "Punishment imposed by court for criminal conviction. Modeled as gUFO Object."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:ObservableObject .

cacontology-impact:TherapeuticIntervention a owl:Class ;
    rdfs:label "Therapeutic Intervention"@en ;
    rdfs:comment "Professional therapeutic treatment or intervention for victim recovery."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-ai:AIContentGeneration a owl:Class ;
    rdfs:label "AI Content Generation"@en ;
    rdfs:comment "Process of creating artificial CSAM using machine learning models, neural networks, or other AI technologies. Enhanced as gUFO Event for precise temporal and causal modeling."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action ;
    cacontology-gufo:hasTemporalProperty cacontology-gufo:beginTimePoint,
        cacontology-gufo:duration,
        cacontology-gufo:endTimePoint .

cacontology-educational:EducationalInstitution a owl:Class ;
    rdfs:label "Educational Institution"@en ;
    rdfs:comment "Educational institution where child exploitation occurs, including schools, colleges, and educational programs. Enhanced as gUFO Organization for comprehensive institutional modeling."@en ;
    rdfs:subClassOf gufo:Organization,
        uco-identity:Organization ;
    cacontology-gufo:hasTemporalProperty cacontology-gufo:accreditationPeriod,
        cacontology-gufo:establishmentTimePoint ;
    cacontology-gufo:hasValidationConstraint "gUFO Organization validation for educational institutions" .

cacontology-enterprises:NihilisticViolentExtremismNetwork a gufo:Kind,
        owl:Class ;
    rdfs:label "Nihilistic Violent Extremism Network"@en ;
    rdfs:comment "Criminal network engaging in child exploitation as part of broader nihilistic violent extremism goals including social unrest and downfall of current world order (e.g., 764 network)."@en ;
    rdfs:subClassOf gufo:FunctionalComplex,
        uco-identity:Organization .

cacontology-multi:LawEnforcementAgency a owl:Class ;
    rdfs:label "Law Enforcement Agency"@en ;
    rdfs:comment "Government organization responsible for law enforcement within a jurisdiction."@en ;
    rdfs:subClassOf gufo:Object,
        uco-identity:Organization .

cacontology-physical:PhysicalSearch a owl:Class ;
    rdfs:label "Physical Search"@en ;
    rdfs:comment "Law enforcement search of physical premises for evidence. Extends investigation:InvestigativeAction for CASE ontology integration (gUFO Event)."@en ;
    rdfs:subClassOf gufo:Event,
        case-investigation:InvestigativeAction .

cacontology-street:DirectTraffickingProposition a owl:Class ;
    rdfs:label "Direct Trafficking Proposition"@en ;
    rdfs:comment "Explicit, immediate proposition for victim to engage in commercial sexual activity."@en ;
    rdfs:subClassOf cacontology-grooming:SexualExploitation .

cacontology-athletic:AthleticCoachingExploitation a owl:Class ;
    rdfs:label "Athletic Coaching Exploitation"@en ;
    rdfs:comment "Child sexual exploitation committed by athletic coaches using sports authority, team dynamics, and physical training as coercion mechanisms. Enhanced as gUFO Event for comprehensive temporal and causal modeling of exploitation patterns."@en,
        "gUFO Event: Athletic exploitation processes with defined temporal boundaries, participants, and coercive mechanisms."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology-educational:EducatorPerpetratedExploitation ;
    cacontology-gufo:hasTemporalProperty cacontology-gufo:exploitationBeginTime,
        cacontology-gufo:exploitationEndTime .

cacontology-multi:MassProsecutionCoordination a owl:Class ;
    rdfs:label "Mass Prosecution Coordination"@en ;
    rdfs:comment "Coordination of prosecutions for massive user bases from large-scale platform takedowns requiring simultaneous action across multiple jurisdictions (nearly 2 million users for Kidflix operation)."@en ;
    rdfs:subClassOf cacontology-multi:MultiJurisdictionalOperation .

cacontology-case:CaseAssignment a owl:Class ;
    rdfs:label "Case Assignment"@en ;
    rdfs:comment "Assignment of personnel and resources to specific cases with defined roles and responsibilities. Enhanced as gUFO Event linking to gUFO Roles."@en,
        "gUFO Event: Assignment processes with temporal duration and role-based relationships."@en ;
    rdfs:subClassOf gufo:Event,
        uco-core:UcoObject ;
    cacontology-gufo:hasTemporalProperty cacontology-gufo:assignmentBeginTime,
        cacontology-gufo:assignmentEndTime .

cacontology-case:CaseDocumentation a owl:Class ;
    rdfs:label "Case Documentation"@en ;
    rdfs:comment "Comprehensive documentation management for case files, reports, evidence logs, and legal documents. Enhanced as gUFO Object for document management."@en,
        "gUFO Object: Documentation objects with measurable characteristics, access control, and retention properties."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-case:CaseReview a owl:Class ;
    rdfs:label "Case Review"@en ;
    rdfs:comment "Formal review processes for case quality assurance, supervisory oversight, and legal compliance. Enhanced as gUFO Event for review processes."@en,
        "gUFO Event: Review processes with defined temporal boundaries, participants, and evaluation outcomes."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action ;
    cacontology-gufo:hasTemporalProperty cacontology-gufo:reviewBeginTime,
        cacontology-gufo:reviewEndTime .

cacontology-case:CaseWorkflow a owl:Class ;
    rdfs:label "Case Workflow"@en ;
    rdfs:comment "Structured workflow stages and processes for managing case progression from intake to disposition. Enhanced as gUFO Event for comprehensive temporal and causal modeling."@en,
        "gUFO Event: Workflow processes with defined temporal boundaries, participants, and operational outcomes."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action ;
    cacontology-gufo:hasTemporalProperty cacontology-gufo:workflowBeginTime,
        cacontology-gufo:workflowEndTime .

cacontology-custodial:TrustViolation a gufo:Kind,
        owl:Class ;
    rdfs:label "Trust Violation"@en ;
    rdfs:comment "Action that violates a position of trust or custodial responsibility. Modeled as gUFO Event with temporal boundaries and participation patterns."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-forensics:MassDigitalEvidenceProcessing a owl:Class ;
    rdfs:label "Mass Digital Evidence Processing"@en ;
    rdfs:comment "Processing of massive volumes of digital evidence requiring specialized automated tools and distributed processing systems (terabytes of data from platforms with millions of users)."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-sentencing:LegalProceeding a owl:Class ;
    rdfs:label "Legal Proceeding"@en ;
    rdfs:comment "Formal judicial process for prosecuting cacontology-related crimes. Modeled as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action ;
    owl:equivalentClass cacontology-gufo:CriminalEvent .

cacontology-taskforce:TaskForceMember a gufo:Role,
        owl:Class ;
    rdfs:label "Task Force Member"@en ;
    rdfs:comment "Individual member of an ICAC task force with specialized training."@en ;
    rdfs:subClassOf uco-role:Role .

cacontology-taskforce:TaskForceOperation a owl:Class ;
    rdfs:label "Task Force Operation"@en ;
    rdfs:comment "Coordinated operation conducted by ICAC task force."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-infrastructure:InfrastructureAnalysis a owl:Class ;
    rdfs:label "Infrastructure Analysis"@en ;
    rdfs:comment "Analysis of seized infrastructure to understand platform operations and identify additional targets (gUFO Event)."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-legal:NationalLegislation a gufo:Kind,
        owl:Class ;
    rdfs:label "National Legislation"@en ;
    rdfs:comment "National child protection legislation."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-multi:Jurisdiction a owl:Class ;
    rdfs:label "Jurisdiction"@en ;
    rdfs:comment "Legal authority and geographic area where an agency has enforcement power."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-sextortion:SextortionIncident a owl:Class ;
    rdfs:label "Sextortion Incident"@en ;
    rdfs:comment "Online blackmail incident where offender tricks or coerces someone into sending sexual images, then threatens to share unless demands are met. May involve demands for money, gift cards, or more graphic content."@en ;
    rdfs:subClassOf cacontology:Sextortion .

cacontology-usa-federal:FederalProsecution a gufo:EventType,
        owl:Class ;
    rdfs:label "Federal Prosecution"@en ;
    rdfs:comment "Federal legal prosecution process for child exploitation crimes. Modeled as gUFO Event with temporal progression through phases."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-abduction:StrangerAbduction a owl:Class ;
    rdfs:label "Stranger Abduction"@en ;
    rdfs:comment "Abduction of child by unknown perpetrator without prior relationship or contact."@en ;
    rdfs:subClassOf cacontology:ChildSexualAbuseEvent .

cacontology-asset-forfeiture:AssetForfeitureAction a owl:Class ;
    rdfs:label "Asset Forfeiture Action"@en ;
    rdfs:comment "Legal action to forfeit assets derived from or used in child exploitation crimes. Enhanced as gUFO Event for comprehensive temporal and causal modeling of forfeiture proceedings."@en,
        "gUFO Event: Legal proceedings with defined start/end points, participants, and outcomes in asset forfeiture operations."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action ;
    cacontology-gufo:hasTemporalProperty cacontology-gufo:forfeitureBeginTime,
        cacontology-gufo:forfeitureEndTime .

cacontology-coord:CoordinationMetrics a gufo:Kind,
        owl:Class ;
    rdfs:label "Coordination Metrics"@en ;
    rdfs:comment "Performance metrics for measuring effectiveness and efficiency of inter-agency coordination."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject .

cacontology-corruption:LawEnforcementCorruption a gufo:EventType,
        owl:Class ;
    rdfs:label "Law Enforcement Corruption"@en ;
    rdfs:comment "Corruption involving law enforcement personnel in child exploitation activities."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-impact:VictimImpactAssessment a owl:Class ;
    rdfs:label "Victim Impact Assessment"@en ;
    rdfs:comment "Comprehensive assessment of the impact of criminal activity on child victims."@en ;
    rdfs:subClassOf gufo:Situation,
        uco-observable:ObservableObject .

cacontology-educational:EducatorPerpetratedExploitation a owl:Class ;
    rdfs:label "Educator Perpetrated Exploitation"@en ;
    rdfs:comment "Child sexual exploitation committed by educational institution personnel using their position of trust and authority. Enhanced as gUFO Event for comprehensive temporal and causal modeling."@en ;
    rdfs:subClassOf gufo:Event,
        cacontology:ChildSexualExploitation ;
    cacontology-gufo:hasTemporalProperty cacontology-gufo:beginTimePoint,
        cacontology-gufo:duration,
        cacontology-gufo:endTimePoint ;
    cacontology-gufo:hasValidationConstraint "gUFO Event validation for exploitation incidents" .

cacontology-enterprises:ChildExploitationEnterprise a gufo:Kind,
        owl:Class ;
    rdfs:label "Child Exploitation Enterprise"@en ;
    rdfs:comment "Criminal enterprise as defined in 18 U.S.C. § 2252A(g) engaging in coordinated child exploitation activities with multiple participants and systematic operations."@en ;
    rdfs:subClassOf gufo:FunctionalComplex,
        uco-identity:Organization .

cacontology-infrastructure:InfrastructureTakedown a owl:Class ;
    rdfs:label "Infrastructure Takedown"@en ;
    rdfs:comment "Coordinated operation to dismantle platform infrastructure including servers, domains, and supporting systems (gUFO Event)."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-institutional:CharitableOrganization a gufo:Kind,
        owl:Class ;
    rdfs:label "Charitable Organization"@en ;
    rdfs:comment "Charitable or humanitarian organization providing services to vulnerable populations."@en ;
    rdfs:subClassOf gufo:Object,
        uco-identity:Organization .

cacontology-prevention:PreventionProgram a owl:Class ;
    rdfs:label "Prevention Program"@en ;
    rdfs:comment "Structured program designed to prevent child abuse and exploitation. Modeled as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-registry:RegisteredSexOffender a owl:Class ;
    rdfs:label "Registered Sex Offender"@en ;
    rdfs:comment "Individual required to register as a sex offender."@en ;
    rdfs:subClassOf uco-identity:Person .

<https://cacontology.projectvic.org/2.11.0> a owl:Ontology ;
    rdfs:label "CAC Ontology Core"@en ;
    dcterms:creator "CAC Ontology Team" ;
    dcterms:issued "2024-03-20"^^xsd:date ;
    dcterms:modified "2025-11-18"^^xsd:date ;
    rdfs:comment "A core ontology for representing concepts and relationships specific to Crimes Against Children investigations, extending UCO and CASE with gUFO foundational ontology enhancements for improved semantic precision, temporal modeling, and validation capabilities."@en ;
    owl:imports <http://purl.org/nemo/gufo>,
        <https://cacontology.projectvic.org/hotlines/core/2.11.0>,
        <https://ontology.caseontology.org/case>,
        uco-core: ;
    owl:versionIRI <https://cacontology.projectvic.org/2.11.0> .

cacontology-coord:CoordinationAgreement a gufo:SituationType,
        owl:Class ;
    rdfs:label "Coordination Agreement"@en ;
    rdfs:comment "Formal agreements governing coordination between agencies including MOUs, MOAs, and operational agreements."@en ;
    rdfs:subClassOf gufo:Situation,
        uco-core:UcoObject .

cacontology-coord:ResourceSharing a gufo:EventType,
        owl:Class ;
    rdfs:label "Resource Sharing"@en ;
    rdfs:comment "Systematic sharing of resources between agencies including personnel, equipment, facilities, and expertise."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-corruption:CorruptLawEnforcementOfficer a gufo:Role,
        owl:Class ;
    rdfs:label "Corrupt Law Enforcement Officer"@en ;
    rdfs:comment "Law enforcement officer engaged in child exploitation activities."@en ;
    rdfs:subClassOf uco-role:Role .

cacontology-partnerships:PublicPrivatePartnership a owl:Class ;
    rdfs:label "Public-Private Partnership"@en ;
    rdfs:comment "Formal partnership between government/law enforcement agencies and private sector organizations for child protection initiatives. Modeled as gUFO Organization."@en ;
    rdfs:subClassOf gufo:Organization,
        uco-core:UcoObject .

cacontology-coord:LiaisonOfficer a gufo:Role,
        owl:Class ;
    rdfs:label "Liaison Officer"@en ;
    rdfs:comment "Designated officer responsible for maintaining communication and coordination between agencies."@en ;
    rdfs:subClassOf uco-role:Role .

cacontology-case:CaseManagement a owl:Class ;
    rdfs:label "Case Management"@en ;
    rdfs:comment "Comprehensive management framework for ICAC cases including status tracking, priority assignment, and resource allocation. Enhanced as gUFO Object for comprehensive structural modeling and property management."@en,
        "gUFO Object: Case management frameworks with measurable characteristics, structural properties, and organizational relationships."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:UcoObject ;
    cacontology-gufo:hasValidationConstraint "Case management must maintain consistency across all operational phases" .

cacontology-institutional:InstitutionalExploitation a gufo:EventType,
        owl:Class ;
    rdfs:label "Institutional Exploitation"@en ;
    rdfs:comment "Systematic exploitation of children within institutional care settings."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-coord:InformationSharing a gufo:EventType,
        owl:Class ;
    rdfs:label "Information Sharing"@en ;
    rdfs:comment "Systematic sharing of information between agencies including intelligence, evidence, case data, and technical information."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-custodial:CustodialRelationship a gufo:Kind,
        owl:Class ;
    rdfs:label "Custodial Relationship"@en ;
    rdfs:comment "Legal or informal relationship involving custody, care, or supervision of a child. Modeled as gUFO Object with Kind typing for rigid identity criteria."@en ;
    rdfs:subClassOf gufo:Object,
        uco-core:Relationship .

cacontology-production:ProductionOffense a owl:Class ;
    rdfs:label "Production Offense"@en ;
    rdfs:comment "Criminal offense involving the production, creation, or manufacturing of child sexual abuse material."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Crime ;
    owl:equivalentClass cacontology-gufo:CriminalEvent .

cacontology-training:InternationalTraining a owl:Class ;
    rdfs:label "International Training"@en ;
    rdfs:comment "Training program conducted across multiple countries. Modeled as gUFO Event."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action ;
    owl:equivalentClass cacontology-gufo:CriminalEvent .

cacontology-undercover:UndercoverOperation a owl:Class ;
    rdfs:label "Undercover Operation"@en ;
    rdfs:comment "A law enforcement operation using false identities or covert methods to investigate crimes and gather evidence."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-grooming:GroomingBehavior a owl:Class ;
    rdfs:label "Grooming Behavior"@en ;
    rdfs:comment "Predatory behavior designed to prepare a child for abuse by building trust, isolating them, and normalizing inappropriate contact."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action ;
    owl:equivalentClass cacontology-gufo:CriminalEvent .

cacontology-tactical:TacticalOperation a owl:Class ;
    rdfs:label "Tactical Operation"@en ;
    rdfs:comment "Specialized law enforcement operation requiring tactical teams and advanced planning."@en ;
    rdfs:subClassOf uco-action:Action .

cacontology-physical:PhysicalEvidence a owl:Class ;
    rdfs:label "Physical Evidence"@en ;
    rdfs:comment "Tangible items collected as evidence in ICAC investigations (gUFO Object)."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:ObservableObject .

cacontology-taskforce:ICACtaskForce a owl:Class ;
    rdfs:label "CAC Task Force"@en ;
    rdfs:comment "Internet Crimes Against Children task force unit specializing in child exploitation investigations."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:ObservableObject .

cacontology-infrastructure:PlatformInfrastructure a owl:Class ;
    rdfs:label "Platform Infrastructure"@en ;
    rdfs:comment "Technical infrastructure supporting child exploitation platforms, including servers, networks, and supporting systems (gUFO Object)."@en ;
    rdfs:subClassOf gufo:Object,
        uco-observable:ObservableObject .

cacontology-coord:InvestigationCoordination a gufo:EventType,
        owl:Class ;
    rdfs:label "Investigation Coordination"@en ;
    rdfs:comment "Comprehensive framework for coordinating investigations across multiple agencies, jurisdictions, and organizational boundaries."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

cacontology-multi:MultiJurisdictionalInvestigation a owl:Class ;
    rdfs:label "Multi-Jurisdictional Investigation"@en ;
    rdfs:comment "Investigation spanning multiple legal jurisdictions requiring coordination between agencies."@en ;
    rdfs:subClassOf gufo:Event,
        uco-action:Action .

[] a owl:AllDifferent ;
    owl:distinctMembers ( cacontology-gufo:InitialPhase cacontology-gufo:AnalysisPhase cacontology-gufo:LegalProcessPhase cacontology-gufo:EvidencePhase cacontology-gufo:ResolutionPhase cacontology-gufo:CompletedPhase ) .

