CAC Stranger Abduction SHACL Shapes
type: Ontology
comment: SHACL validation shapes for the CAC Stranger Abduction Ontology, providing validation for stranger abduction patterns, weapon-based coercion, and opportunistic predation.
version IRI: https://cacontology.projectvic.org/abduction/shapes/3.1.0
version info: 3.1.0
creator: CAC Ontology Team
modified: 2026-08-09
imports: https://cacontology.projectvic.org/abduction/3.1.0
imports: http://purl.org/nemo/gufo#/1.0.0
imports: https://ontology.unifiedcyberontology.org/uco/core/1.5.0

Stranger Abduction Shape
type: NodeShape
target class: StrangerAbduction
comment: Validation shape for stranger abduction instances.
property:
  path: abductionType
  datatype: string
  min count: 1
  max count: 1
  in: opportunistic
  in: predatory
  in: planned
  in: random
  in: targeted
  in: crime_of_opportunity
  message: Stranger abduction must specify abduction type from the allowed list.
property:
  path: abductionLocation
  datatype: string
  min count: 1
  max count: 1
  in: public_space
  in: school_area
  in: residential_area
  in: commercial_area
  in: transportation_hub
  in: recreational_area
  in: remote_location
  message: Stranger abduction must specify abduction location type from the allowed list.
property:
  path: victimAge
  datatype: nonNegativeInteger
  min count: 1
  max count: 1
  min inclusive: 0
  max inclusive: 17
  message: Victim age must be between 0 and 17 years.
property:
  path: abductionTime
  datatype: dateTime
  min count: 1
  max count: 1
  message: Stranger abduction must specify abduction time.
property:
  path: reportedTime
  datatype: dateTime
  min count: 1
  max count: 1
  message: Stranger abduction must specify reported time.
property:
  path: responseTime
  datatype: decimal
  min count: 0
  max count: 1
  min inclusive: 0.1
  max inclusive: 168.0
  message: Response time must be between 0.1 and 168 hours (1 week).
property:
  path: riskLevel
  datatype: string
  min count: 1
  max count: 1
  in: critical
  in: high
  in: medium
  in: low
  in: unknown
  message: Stranger abduction must specify risk level from the allowed list.

Opportunistic Abduction Shape
type: NodeShape
target class: OpportunisticAbduction
comment: Validation shape for opportunistic abduction instances.
property:
  path: opportunityFactor
  datatype: string
  min count: 1
  max count: 1
  in: isolated_victim
  in: lack_of_supervision
  in: vulnerable_situation
  in: environmental_factor
  in: timing_factor
  in: distraction
  message: Opportunistic abduction must specify opportunity factor from the allowed list.
property:
  path: impulsiveNature
  datatype: boolean
  min count: 1
  max count: 1
  message: Opportunistic abduction must specify if it was impulsive in nature.

Predatory Abduction Shape
type: NodeShape
target class: PredatoryAbduction
comment: Validation shape for predatory abduction instances.
property:
  path: huntingBehavior
  datatype: boolean
  min count: 1
  max count: 1
  message: Predatory abduction must specify if hunting behavior was observed.
property:
  path: surveillancePeriod
  datatype: decimal
  min count: 0
  max count: 1
  min inclusive: 0.1
  max inclusive: 720.0
  message: Surveillance period must be between 0.1 and 720 hours (30 days).
property:
  path: victimSelection
  datatype: string
  min count: 1
  max count: 1
  in: specific_criteria
  in: random_selection
  in: convenience
  in: vulnerability_based
  in: proximity_based
  message: Predatory abduction must specify victim selection method from the allowed list.

Abductor Profile Shape
type: NodeShape
target class: AbductorProfile
comment: Validation shape for abductor profile instances.
property:
  path: profileType
  datatype: string
  min count: 1
  max count: 1
  in: behavioral_profile
  in: demographic_profile
  in: psychological_profile
  in: criminal_profile
  in: composite_profile
  message: Abductor profile must specify profile type from the allowed list.
property:
  path: ageRange
  datatype: string
  min count: 0
  max count: 1
  in: under_18
  in: 18_25
  in: 26_35
  in: 36_45
  in: 46_55
  in: 56_65
  in: over_65
  in: unknown
  message: Age range must be from the allowed list.
property:
  path: genderProfile
  datatype: string
  min count: 0
  max count: 1
  in: male
  in: female
  in: unknown
  in: other
  message: Gender profile must be from the allowed list.
property:
  path: criminalHistory
  datatype: boolean
  min count: 0
  max count: 1
  message: Abductor profile may specify if criminal history exists.
property:
  path: priorOffenses
  datatype: nonNegativeInteger
  min count: 0
  max count: 1
  min inclusive: 0
  max inclusive: 50
  message: Prior offenses must be between 0 and 50.
property:
  path: psychologicalFactors
  datatype: string
  min count: 0
  max count: 1
  in: antisocial_personality
  in: sexual_deviance
  in: substance_abuse
  in: mental_illness
  in: impulse_control
  in: multiple_factors
  message: Psychological factors must be from the allowed list.

Behavioral Profile Shape
type: NodeShape
target class: BehavioralProfile
comment: Validation shape for behavioral profile instances.
property:
  path: approachMethod
  datatype: string
  min count: 1
  max count: 1
  in: deception
  in: force
  in: enticement
  in: authority_figure
  in: assistance_ruse
  in: direct_approach
  message: Behavioral profile must specify approach method from the allowed list.
property:
  path: communicationStyle
  datatype: string
  min count: 0
  max count: 1
  in: friendly
  in: authoritative
  in: threatening
  in: manipulative
  in: silent
  in: erratic
  message: Communication style must be from the allowed list.
property:
  path: organizationLevel
  datatype: string
  min count: 1
  max count: 1
  in: highly_organized
  in: organized
  in: mixed
  in: disorganized
  in: chaotic
  message: Behavioral profile must specify organization level from the allowed list.

Abduction Method Shape
type: NodeShape
target class: AbductionMethod
comment: Validation shape for abduction method instances.
property:
  path: methodType
  datatype: string
  min count: 1
  max count: 1
  in: physical_force
  in: deception
  in: enticement
  in: threat
  in: weapon_use
  in: vehicle_abduction
  in: walk_away
  message: Abduction method must specify method type from the allowed list.
property:
  path: forceLevel
  datatype: string
  min count: 0
  max count: 1
  in: none
  in: minimal
  in: moderate
  in: significant
  in: extreme
  in: lethal
  message: Force level must be from the allowed list.
property:
  path: weaponInvolved
  datatype: boolean
  min count: 1
  max count: 1
  message: Abduction method must specify if weapon was involved.
property:
  path: vehicleUsed
  datatype: boolean
  min count: 1
  max count: 1
  message: Abduction method must specify if vehicle was used.
property:
  path: accomplices
  datatype: nonNegativeInteger
  min count: 0
  max count: 1
  min inclusive: 0
  max inclusive: 10
  message: Number of accomplices must be between 0 and 10.

Vehicle Abduction Shape
type: NodeShape
target class: VehicleAbduction
comment: Validation shape for vehicle abduction instances.
property:
  path: vehicleType
  datatype: string
  min count: 1
  max count: 1
  in: sedan
  in: suv
  in: truck
  in: van
  in: motorcycle
  in: commercial_vehicle
  in: unknown
  message: Vehicle abduction must specify vehicle type from the allowed list.
property:
  path: vehicleColor
  datatype: string
  min count: 0
  max count: 1
  in: white
  in: black
  in: gray
  in: silver
  in: red
  in: blue
  in: green
  in: yellow
  in: brown
  in: other
  in: unknown
  message: Vehicle color must be from the allowed list.
property:
  path: licensePlateInfo
  datatype: boolean
  min count: 1
  max count: 1
  message: Vehicle abduction must specify if license plate information is available.

Search Operation Shape
type: NodeShape
target class: SearchOperation
comment: Validation shape for search operation instances.
property:
  path: searchType
  datatype: string
  min count: 1
  max count: 1
  in: ground_search
  in: air_search
  in: water_search
  in: urban_search
  in: wilderness_search
  in: multi_domain_search
  message: Search operation must specify search type from the allowed list.
property:
  path: searchRadius
  datatype: decimal
  min count: 1
  max count: 1
  min inclusive: 0.1
  max inclusive: 1000.0
  message: Search radius must be between 0.1 and 1000 kilometers.
property:
  path: searchDuration
  datatype: decimal
  min count: 0
  max count: 1
  min inclusive: 1.0
  max inclusive: 8760.0
  message: Search duration must be between 1 and 8760 hours (1 year).
property:
  path: personnelCount
  datatype: nonNegativeInteger
  min count: 1
  max count: 1
  min inclusive: 1
  max inclusive: 1000
  message: Search operation must have between 1 and 1000 personnel.
property:
  path: resourcesDeployed
  datatype: nonNegativeInteger
  min count: 1
  max count: 1
  min inclusive: 1
  max inclusive: 100
  message: Search operation must deploy between 1 and 100 resources.
property:
  path: startTime
  datatype: dateTime
  min count: 1
  max count: 1
  message: Search operation must specify start time.
property:
  path: endTime
  datatype: dateTime
  min count: 0
  max count: 1
  message: Search operation may specify end time.

Ground Search Shape
type: NodeShape
target class: GroundSearch
comment: Validation shape for ground search instances.
property:
  path: searchPattern
  datatype: string
  min count: 1
  max count: 1
  in: grid_search
  in: line_search
  in: spiral_search
  in: zone_search
  in: hasty_search
  in: containment_search
  message: Ground search must specify search pattern from the allowed list.
property:
  path: terrainType
  datatype: string
  min count: 1
  max count: 1
  in: urban
  in: suburban
  in: rural
  in: wilderness
  in: forest
  in: desert
  in: mountainous
  in: coastal
  message: Ground search must specify terrain type from the allowed list.
property:
  path: canineUnits
  datatype: nonNegativeInteger
  min count: 0
  max count: 1
  min inclusive: 0
  max inclusive: 50
  message: Number of canine units must be between 0 and 50.

Amber Alert Shape
type: NodeShape
target class: AmberAlert
comment: Validation shape for Amber Alert instances.
property:
  path: alertLevel
  datatype: string
  min count: 1
  max count: 1
  in: local
  in: regional
  in: statewide
  in: multi_state
  in: national
  in: international
  message: Amber Alert must specify alert level from the allowed list.
property:
  path: activationTime
  datatype: dateTime
  min count: 1
  max count: 1
  message: Amber Alert must specify activation time.
property:
  path: deactivationTime
  datatype: dateTime
  min count: 0
  max count: 1
  message: Amber Alert may specify deactivation time.
property:
  path: alertDuration
  datatype: decimal
  min count: 0
  max count: 1
  min inclusive: 0.1
  max inclusive: 720.0
  message: Alert duration must be between 0.1 and 720 hours (30 days).
property:
  path: distributionChannels
  datatype: nonNegativeInteger
  min count: 1
  max count: 1
  min inclusive: 1
  max inclusive: 50
  message: Amber Alert must use between 1 and 50 distribution channels.
property:
  path: publicResponse
  datatype: nonNegativeInteger
  min count: 0
  max count: 1
  min inclusive: 0
  max inclusive: 10000
  message: Public response count must be between 0 and 10000.

Alert Criteria Shape
type: NodeShape
target class: AlertCriteria
comment: Validation shape for alert criteria instances.
property:
  path: criteriaType
  datatype: string
  min count: 1
  max count: 1
  in: age_criteria
  in: abduction_confirmed
  in: danger_criteria
  in: description_available
  in: time_criteria
  in: jurisdiction_criteria
  message: Alert criteria must specify criteria type from the allowed list.
property:
  path: criteriaMet
  datatype: boolean
  min count: 1
  max count: 1
  message: Alert criteria must specify if criteria is met.
property:
  path: verificationLevel
  datatype: string
  min count: 1
  max count: 1
  in: confirmed
  in: probable
  in: possible
  in: unverified
  in: disputed
  message: Alert criteria must specify verification level from the allowed list.

Victim Recovery Shape
type: NodeShape
target class: VictimRecovery
comment: Validation shape for victim recovery instances.
property:
  path: recoveryType
  datatype: string
  min count: 1
  max count: 1
  in: safe_recovery
  in: rescue_operation
  in: self_escape
  in: release_by_abductor
  in: discovery_by_public
  in: law_enforcement_recovery
  message: Victim recovery must specify recovery type from the allowed list.
property:
  path: recoveryTime
  datatype: dateTime
  min count: 1
  max count: 1
  message: Victim recovery must specify recovery time.
property:
  path: recoveryLocation
  datatype: string
  min count: 1
  max count: 1
  in: original_location
  in: nearby_location
  in: distant_location
  in: different_jurisdiction
  in: different_state
  in: different_country
  message: Victim recovery must specify recovery location type from the allowed list.
property:
  path: victimCondition
  datatype: string
  min count: 1
  max count: 1
  in: unharmed
  in: minor_injuries
  in: significant_injuries
  in: critical_condition
  in: deceased
  in: unknown
  message: Victim recovery must specify victim condition from the allowed list.
property:
  path: medicalAttention
  datatype: boolean
  min count: 1
  max count: 1
  message: Victim recovery must specify if medical attention was required.
property:
  path: captivityDuration
  datatype: decimal
  min count: 0
  max count: 1
  min inclusive: 0.1
  max inclusive: 8760.0
  message: Captivity duration must be between 0.1 and 8760 hours (1 year).

Rescue Operation Shape
type: NodeShape
target class: RescueOperation
comment: Validation shape for rescue operation instances.
property:
  path: operationType
  datatype: string
  min count: 1
  max count: 1
  in: tactical_rescue
  in: negotiated_release
  in: stealth_operation
  in: coordinated_assault
  in: emergency_response
  in: planned_operation
  message: Rescue operation must specify operation type from the allowed list.
property:
  path: riskAssessment
  datatype: string
  min count: 1
  max count: 1
  in: low_risk
  in: moderate_risk
  in: high_risk
  in: extreme_risk
  in: unknown_risk
  message: Rescue operation must specify risk assessment from the allowed list.
property:
  path: specializedUnits
  datatype: nonNegativeInteger
  min count: 0
  max count: 1
  min inclusive: 0
  max inclusive: 20
  message: Number of specialized units must be between 0 and 20.

InvolvesAbductorShape
type: PropertyShape
path: involvesAbductor
name: involves abductor
description: Links abduction to abductor profile
class: AbductorProfile
min count: 1
max count: 1

UsesMethodShape
type: PropertyShape
path: usesMethod
name: uses method
description: Links abduction to method used
class: AbductionMethod
min count: 1
max count: 1

TriggersSearchShape
type: PropertyShape
path: triggersSearch
name: triggers search
description: Links abduction to search operations
class: SearchOperation
min count: 0

ActivatesAlertShape
type: PropertyShape
path: activatesAlert
name: activates alert
description: Links abduction to Amber Alert
class: AmberAlert
min count: 0
max count: 1

ResultsInRecoveryShape
type: PropertyShape
path: resultsInRecovery
name: results in recovery
description: Links abduction to victim recovery
class: VictimRecovery
min count: 0
max count: 1

MeetsAlertCriteriaShape
type: PropertyShape
path: meetsAlertCriteria
name: meets alert criteria
description: Links Amber Alert to criteria
class: AlertCriteria
min count: 1

RequiresRescueShape
type: PropertyShape
path: requiresRescue
name: requires rescue
description: Links recovery to rescue operation
class: RescueOperation
min count: 0
max count: 1

Abduction Cross Reference Shape
type: NodeShape
target class: StrangerAbduction
comment: Validates cross-references between abduction and related entities.
sparql:
  message: Stranger abduction must involve abductor and use method.
  select: SELECT $this WHERE { $this a cacontology-stranger:StrangerAbduction . FILTER NOT EXISTS { $this cacontology-stranger:involvesAbductor ?abductor ; cacontology-stranger:usesMethod ?method . } }

Amber Alert Validation Shape
type: NodeShape
target class: AmberAlert
comment: Validates Amber Alert activation criteria.
sparql:
  message: Amber Alert must meet all required criteria before activation.
  select: SELECT $this WHERE { $this a cacontology-stranger:AmberAlert ; cacontology-stranger:meetsAlertCriteria ?criteria . ?criteria cacontology-stranger:criteriaMet false . }

Search Effectiveness Shape
type: NodeShape
target class: SearchOperation
comment: Validates search operation resource allocation.
sparql:
  message: Large search operations should have adequate personnel.
  select: SELECT $this WHERE { $this cacontology-stranger:searchRadius ?radius ; cacontology-stranger:personnelCount ?personnel . FILTER (?radius > 50.0 && ?personnel < 20) }

Temporal Validation Shape
type: NodeShape
target class: StrangerAbduction
comment: Validates temporal consistency in stranger abductions.
sparql:
  message: Abduction time must be before or equal to reported time.
  select: SELECT $this WHERE { $this cacontology-stranger:abductionTime ?abduction ; cacontology-stranger:reportedTime ?reported . FILTER (?abduction > ?reported) }

Search Timing Shape
type: NodeShape
target class: SearchOperation
comment: Validates search operation timing.
sparql:
  message: Search start time must be before end time when both are specified.
  select: SELECT $this WHERE { $this uco-core:startTime ?start ; uco-core:endTime ?end . FILTER (?start >= ?end) }

Amber Alert Timing Shape
type: NodeShape
target class: AmberAlert
comment: Validates Amber Alert timing consistency.
sparql:
  message: Alert activation time must be before deactivation time when both are specified.
  select: SELECT $this WHERE { $this cacontology-stranger:activationTime ?activation ; cacontology-stranger:deactivationTime ?deactivation . FILTER (?activation >= ?deactivation) }

Recovery Timing Shape
type: NodeShape
target class: VictimRecovery
comment: Validates victim recovery timing consistency.
sparql:
  message: Recovery time should be after abduction time.
  select: SELECT $this WHERE { ?abduction cacontology-stranger:resultsInRecovery $this ; cacontology-stranger:abductionTime ?abductionTime . $this cacontology-stranger:recoveryTime ?recoveryTime . FILTER (?recoveryTime <= ?abductionTime) }

Data Quality Shape
type: NodeShape
target class: StrangerAbduction
comment: Validates data quality for stranger abductions.
property:
  path: label
  datatype: string
  min count: 0
  max count: 1
  min length: 5
  max length: 200
  message: Label should be between 5 and 200 characters when provided.
property:
  path: comment
  datatype: string
  min count: 0
  max count: 1
  min length: 10
  max length: 1000
  message: Comment should be between 10 and 1000 characters when provided.