CAC Institutional Exploitation SHACL Shapes with gUFO Validation
type: Ontology
comment: SHACL validation shapes for gUFO-enhanced CAC institutional exploitation ontology, including anti-rigidity constraints, temporal validation, and foundational type compliance.
version IRI: https://cacontology.projectvic.org/institutional-exploitation/shapes/3.1.0
version info: 3.1.0
creator: CAC Ontology Team
modified: 2026-08-09
imports: https://cacontology.projectvic.org/institutional-exploitation/3.1.0
imports: http://purl.org/nemo/gufo#/1.0.0
imports: https://ontology.unifiedcyberontology.org/uco/core/1.5.0

CharitableOrganizationKindValidationShape
type: NodeShape
target class: Kind
property:
  path: type
  has value: Kind
  min count: 1
message: Every charitable organization Kind must extend gufo:Object and be properly classified

ExploitationEventTypeValidationShape
type: NodeShape
target class: EventType
message: Every exploitation EventType must extend gufo:Event

InstitutionalRoleValidationShape
type: NodeShape
target class: Role
not:
  property:
    path: subClassOf
    class: Kind
message: Institutional roles are anti-rigid and cannot be subclasses of rigid Kinds

VulnerableChildPhaseValidationShape
type: NodeShape
target class: Phase
not:
  property:
    path: subClassOf
    class: Kind
message: Vulnerable child phases are anti-rigid temporal stages and cannot be rigid Kinds

LegalSituationTypeValidationShape
type: NodeShape
target class: SituationType
message: Every legal SituationType must extend gufo:Situation

InstitutionalTemporalBoundariesShape
type: NodeShape
target class: CharitableOrganization
property:
  path: hasInstitutionFoundingDate
  datatype: dateTime
  max count: 1
  message: Institution may have at most one founding date (gUFO temporal boundary)
property:
  path: hasOperationEndDate
  datatype: dateTime
  max count: 1
  message: Institution may have at most one operation end date (gUFO temporal boundary)
sparql:
  message: Institution operation end date must be after founding date (gUFO temporal ordering)
  prefixes:
    declare:
      prefix: cacontology-institutional
      namespace: https://cacontology.projectvic.org/institutional-exploitation#
  select: SELECT $this WHERE { $this cacontology-institutional:hasInstitutionFoundingDate ?foundingDate . $this cacontology-institutional:hasOperationEndDate ?endDate . FILTER (?endDate <= ?foundingDate) }

ExploitationTemporalShape
type: NodeShape
target class: InstitutionalExploitation
property:
  path: hasExploitationStartDate
  datatype: dateTime
  max count: 1
  message: Exploitation may have at most one start date (gUFO temporal boundary)
property:
  path: hasExploitationEndDate
  datatype: dateTime
  max count: 1
  message: Exploitation may have at most one end date (gUFO temporal boundary)
sparql:
  message: Exploitation end date must be after start date when both specified (gUFO temporal ordering)
  prefixes:
    declare:
      prefix: cacontology-institutional
      namespace: https://cacontology.projectvic.org/institutional-exploitation#
  select: SELECT $this WHERE { $this cacontology-institutional:hasExploitationStartDate ?startDate . $this cacontology-institutional:hasExploitationEndDate ?endDate . FILTER (?endDate <= ?startDate) }

RoleTemporalBoundariesShape
type: NodeShape
target class: TrustedAdultRole
property:
  path: hasRoleStartDate
  datatype: dateTime
  max count: 1
  message: Role may have at most one start date (gUFO temporal boundary)
property:
  path: hasRoleEndDate
  datatype: dateTime
  max count: 1
  message: Role may have at most one end date (gUFO temporal boundary)
sparql:
  message: Role end date must be after start date when both specified (gUFO temporal ordering)
  prefixes:
    declare:
      prefix: cacontology-institutional
      namespace: https://cacontology.projectvic.org/institutional-exploitation#
  select: SELECT $this WHERE { $this cacontology-institutional:hasRoleStartDate ?startDate . $this cacontology-institutional:hasRoleEndDate ?endDate . FILTER (?endDate <= ?startDate) }

Charitable Organization Shape
type: NodeShape
target class: CharitableOrganization
comment: Validation shape for charitable organization instances with gUFO integration.
property:
  path: hasInstitutionFoundingDate
  datatype: dateTime
  max count: 1
  message: Organization may have founding date (gUFO temporal boundary)
property:
  path: hasInstitutionalReputationLevel
  datatype: string
  in: excellent
  in: good
  in: fair
  in: poor
  in: terrible
  in: unknown
  max count: 1
  message: Institutional reputation level must be from allowed list (gUFO quality aspect)
property:
  path: hasOversightLevel
  datatype: string
  in: high
  in: moderate
  in: low
  in: minimal
  in: none
  in: self_regulated
  max count: 1
  message: Oversight level must be from allowed list (gUFO quality aspect)
property:
  path: foundingYear
  datatype: gYear
  min count: 0
  max count: 1
  message: Organization may have founding year specified.
property:
  path: childrenServed
  datatype: nonNegativeInteger
  min count: 0
  max count: 1
  min inclusive: 0
  max inclusive: 10000
  message: Children served must be between 0 and 10,000.

Orphanage Shape
type: NodeShape
target class: Orphanage
comment: Validation shape for orphanage instances with gUFO integration.
property:
  path: childrenServed
  datatype: nonNegativeInteger
  min count: 1
  max count: 1
  min inclusive: 1
  max inclusive: 500
  message: Orphanage must specify number of children served (1-500).
property:
  path: hasVulnerabilityLevel
  datatype: string
  in: low
  in: moderate
  in: high
  in: extreme
  in: critical
  min count: 1
  max count: 1
  message: Orphanage must specify vulnerability level of children (gUFO quality aspect)

Institutional Exploitation Shape
type: NodeShape
target class: InstitutionalExploitation
comment: Validation shape for institutional exploitation instances with gUFO integration.
property:
  path: hasExploitationStartDate
  datatype: dateTime
  max count: 1
  message: Exploitation may have start date (gUFO temporal boundary)
property:
  path: hasExploitationSeverityLevel
  datatype: string
  in: low
  in: moderate
  in: high
  in: severe
  in: extreme
  in: catastrophic
  min count: 1
  max count: 1
  message: Exploitation must specify severity level (gUFO quality aspect)
property:
  path: victimCount
  datatype: nonNegativeInteger
  min count: 1
  max count: 1
  min inclusive: 1
  max inclusive: 1000
  message: Exploitation must specify victim count (1-1000).
property:
  path: occursWithin
  class: CharitableOrganization
  min count: 1
  max count: 1
  message: Exploitation must occur within a charitable organization.

Long Term Institutional Control Shape
type: NodeShape
target class: LongTermInstitutionalControl
comment: Validation shape for long-term institutional control with gUFO integration.
property:
  path: operationDurationYears
  datatype: nonNegativeInteger
  min count: 1
  max count: 1
  min inclusive: 2
  max inclusive: 50
  message: Long-term control must specify duration (2-50 years).
property:
  path: hasSystematicityDegree
  datatype: double
  min inclusive: 0.5
  max inclusive: 1.0
  min count: 1
  max count: 1
  message: Long-term control must have high systematicity degree (0.5-1.0) (gUFO quality aspect)

Systematic Institutional Abuse Shape
type: NodeShape
target class: SystematicInstitutionalAbuse
comment: Validation shape for systematic abuse patterns with gUFO integration.
property:
  path: hasSystematicityDegree
  datatype: double
  min inclusive: 0.7
  max inclusive: 1.0
  min count: 1
  max count: 1
  message: Systematic abuse must have high systematicity degree (0.7-1.0) (gUFO quality aspect)
property:
  path: victimCount
  datatype: nonNegativeInteger
  min inclusive: 3
  min count: 1
  max count: 1
  message: Systematic abuse must involve at least 3 victims.

Cross Border Personal Travel Shape
type: NodeShape
target class: CrossBorderPersonalTravel
comment: Validation shape for cross-border travel instances with gUFO integration.
property:
  path: hasTravelDate
  datatype: dateTime
  min count: 1
  max count: 1
  message: Cross-border travel must have travel date (gUFO temporal boundary)
property:
  path: travelsFrom
  class: Location
  min count: 1
  max count: 1
  message: Travel must specify origin location.
property:
  path: travelsTo
  class: Location
  min count: 1
  max count: 1
  message: Travel must specify destination location.

Repeated Cross Border Travel Shape
type: NodeShape
target class: RepeatedCrossBorderTravel
comment: Validation shape for repeated travel patterns with gUFO integration.
property:
  path: travelFrequency
  datatype: string
  in: monthly
  in: quarterly
  in: semi_annually
  in: annually
  in: bi_annually
  min count: 1
  max count: 1
  message: Repeated travel must specify frequency from allowed list.
property:
  path: travelPatternYears
  datatype: nonNegativeInteger
  min inclusive: 2
  max inclusive: 30
  min count: 1
  max count: 1
  message: Repeated travel pattern must span 2-30 years.

Humanitarian Travel Cover Shape
type: NodeShape
target class: HumanitarianTravelCover
comment: Validation shape for humanitarian travel cover with gUFO integration.
property:
  path: travelPurposeClaimed
  datatype: string
  in: humanitarian_aid
  in: charitable_work
  in: missionary_work
  in: volunteer_service
  in: medical_mission
  in: educational_support
  min count: 1
  max count: 1
  message: Humanitarian cover must specify claimed purpose from allowed list.

Institutional Founder Shape
type: NodeShape
target class: InstitutionalFounder
comment: Validation shape for institutional founder roles with gUFO integration.
property:
  path: hasRoleStartDate
  datatype: dateTime
  min count: 1
  max count: 1
  message: Founder role must have start date (gUFO temporal boundary)
property:
  path: hasAuthorityLevel
  datatype: string
  in: founder
  in: executive_director
  in: board_chair
  in: senior_leadership
  in: middle_management
  min count: 1
  max count: 1
  message: Founder must specify authority level (gUFO quality aspect)
property:
  path: hasTrustLevel
  datatype: string
  in: absolute
  in: high
  in: moderate
  in: low
  in: compromised
  in: none
  min count: 1
  max count: 1
  message: Founder must specify trust level (gUFO quality aspect)

Trusted Adult Role Shape
type: NodeShape
target class: TrustedAdultRole
comment: Validation shape for trusted adult roles with gUFO integration.
property:
  path: hasAuthorityLevel
  datatype: string
  in: founder
  in: director
  in: supervisor
  in: caregiver
  in: staff
  in: volunteer
  min count: 1
  max count: 1
  message: Trusted adult must specify authority level (gUFO quality aspect)
property:
  path: hasTrustLevel
  datatype: string
  in: absolute
  in: high
  in: moderate
  in: low
  in: compromised
  min count: 1
  max count: 1
  message: Trusted adult must specify trust level (gUFO quality aspect)

Vulnerable Child in Care Shape
type: NodeShape
target class: VulnerableChildInCare
comment: Validation shape for vulnerable children with gUFO integration.
property:
  path: hasVulnerabilityLevel
  datatype: string
  in: low
  in: moderate
  in: high
  in: severe
  in: extreme
  in: critical
  min count: 1
  max count: 1
  message: Vulnerable child must specify vulnerability level (gUFO quality aspect)
property:
  path: vulnerabilityType
  datatype: string
  in: orphaned
  in: impoverished
  in: abandoned
  in: disabled
  in: refugee
  in: trafficked
  in: neglected
  in: abused
  min count: 1
  message: Vulnerable child must specify at least one vulnerability type.

Orphaned Child Shape
type: NodeShape
target class: OrphanedChild
comment: Validation shape for orphaned children with gUFO integration.
property:
  path: vulnerabilityType
  has value: orphaned
  min count: 1
  message: Orphaned child must have 'orphaned' vulnerability type.
property:
  path: hasVulnerabilityLevel
  datatype: string
  in: high
  in: severe
  in: extreme
  in: critical
  min count: 1
  max count: 1
  message: Orphaned child must have high vulnerability level (gUFO quality aspect)

Position of Trust Abuse Shape
type: NodeShape
target class: PositionOfTrustAbuse
comment: Validation shape for position of trust abuse with gUFO integration.
property:
  path: trustLevelExploited
  datatype: string
  in: high
  in: complete
  in: institutional
  in: parental
  in: absolute
  min count: 1
  max count: 1
  message: Position of trust abuse must specify trust level exploited.
property:
  path: exploitsRole
  class: TrustedAdultRole
  min count: 1
  max count: 1
  message: Trust abuse must exploit a trusted adult role.

Isolation Based Control Shape
type: NodeShape
target class: IsolationBasedControl
comment: Validation shape for isolation-based control with gUFO integration.
property:
  path: hasIsolationDegree
  datatype: string
  in: complete
  in: high
  in: moderate
  in: partial
  in: minimal
  min count: 1
  max count: 1
  message: Isolation control must specify isolation degree (gUFO quality aspect)
property:
  path: isolationDegree
  datatype: string
  in: complete
  in: high
  in: moderate
  in: partial
  min count: 1
  max count: 1
  message: Isolation must specify degree from allowed list.

Donor Manipulation Shape
type: NodeShape
target class: DonorManipulation
comment: Validation shape for donor manipulation with gUFO integration.
property:
  path: donorCount
  datatype: nonNegativeInteger
  min count: 1
  max count: 1
  min inclusive: 1
  max inclusive: 10000
  message: Donor manipulation must specify donor count (1-10,000).
property:
  path: manipulationTactics
  datatype: string
  in: emotional_appeal
  in: false_reporting
  in: photo_manipulation
  in: fake_testimonials
  in: progress_exaggeration
  in: need_inflation
  min count: 1
  message: Manipulation must specify at least one tactic.

Charitable Funding Misuse Shape
type: NodeShape
target class: CharitableFundingMisuse
comment: Validation shape for funding misuse with gUFO integration.
property:
  path: fundingAmount
  datatype: decimal
  min count: 1
  max count: 1
  min inclusive: 1000.00
  max inclusive: 10000000.00
  message: Funding misuse must specify amount ($1,000-$10,000,000).

Foreign Commerce Offense Shape
type: NodeShape
target class: ForeignCommerceOffense
comment: Validation shape for foreign commerce offenses with gUFO integration.
property:
  path: chargeCount
  datatype: nonNegativeInteger
  min count: 1
  max count: 1
  min inclusive: 1
  max inclusive: 100
  message: Foreign commerce offense must specify charge count (1-100).

US Prosecution Foreign Crimes Shape
type: NodeShape
target class: USProsecutionForeignCrimes
comment: Validation shape for US prosecution of foreign crimes with gUFO integration.
property:
  path: prosecutionJurisdiction
  datatype: string
  in: federal
  in: state
  in: international
  in: joint_jurisdiction
  min count: 1
  max count: 1
  message: Prosecution must specify jurisdiction from allowed list.
property:
  path: sentenceLength
  datatype: nonNegativeInteger
  min count: 0
  max count: 1
  min inclusive: 1
  max inclusive: 50
  message: Sentence length must be between 1 and 50 years when specified.

Multiple Victim Testimony Shape
type: NodeShape
target class: MultipleVictimTestimony
comment: Validation shape for multiple victim testimony with gUFO integration.
property:
  path: victimTestimoniesCount
  datatype: nonNegativeInteger
  min count: 1
  max count: 1
  min inclusive: 2
  max inclusive: 100
  message: Multiple victim testimony must specify count (2-100).

Adult Victim Testimony Shape
type: NodeShape
target class: AdultVictimTestimony
comment: Validation shape for adult victim testimony with gUFO integration.
property:
  path: yearsFromVictimizationToTestimony
  datatype: nonNegativeInteger
  min count: 1
  max count: 1
  min inclusive: 5
  max inclusive: 50
  message: Adult victim testimony must specify years from victimization (5-50).

ExploitationEventParticipationShape
type: NodeShape
target class: InstitutionalExploitation
property:
  path:
    alternative path: perpetratesExploitation
    alternative path: experiencesExploitation
    alternative path: facilitatedBy
  min count: 2
  message: Every exploitation event must have at least perpetrator and victim participants (gUFO participation)

TravelEventParticipationShape
type: NodeShape
target class: CrossBorderPersonalTravel
property:
  path: undertakesTravelFor
  class: Person
  min count: 1
  max count: 1
  message: Travel event must have exactly one traveler participant (gUFO participation)

InstitutionalCompositionShape
type: NodeShape
target class: CharitableOrganization
property:
  path:
    inverse path: isPartOfInstitution
  min count: 1
  message: Institution must have at least one component part (gUFO part-whole)

SystematicAbuseCompositionShape
type: NodeShape
target class: SystematicInstitutionalAbuse
property:
  path:
    inverse path: isComponentOfExploitation
  min count: 3
  message: Systematic abuse must be composed of at least 3 individual exploitation instances (gUFO part-whole)

InvestigationCompositionShape
type: NodeShape
target class: USProsecutionForeignCrimes
property:
  path:
    inverse path: isPartOfInvestigation
  min count: 1
  message: Investigation must include at least one piece of evidence or testimony (gUFO part-whole)

LongTermControlBusinessRule
type: NodeShape
target class: LongTermInstitutionalControl
sparql:
  message: Long-term institutional control must involve high authority roles and multiple victims
  prefixes:
    declare:
      prefix: cacontology-institutional
      namespace: https://cacontology.projectvic.org/institutional-exploitation#
  select: SELECT $this WHERE { $this cacontology-institutional:operationDurationYears ?duration ; cacontology-institutional:victimCount ?victims . FILTER (?duration >= 5 && ?victims < 5) }

CrossBorderTravelPatternBusinessRule
type: NodeShape
target class: RepeatedCrossBorderTravel
sparql:
  message: Repeated cross-border travel must enable significant institutional exploitation
  prefixes:
    declare:
      prefix: cacontology-institutional
      namespace: https://cacontology.projectvic.org/institutional-exploitation#
  select: SELECT $this WHERE { $this cacontology-institutional:travelPatternYears ?years ; cacontology-institutional:enablesExploitation ?exploitation . ?exploitation cacontology-institutional:victimCount ?victims . FILTER (?years >= 3 && ?victims < 3) }

TrustAbuseBusinessRule
type: NodeShape
target class: PositionOfTrustAbuse
sparql:
  message: High trust level exploitation must involve high authority roles
  prefixes:
    declare:
      prefix: cacontology-institutional
      namespace: https://cacontology.projectvic.org/institutional-exploitation#
  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")) }

SystematicAbusePatternBusinessRule
type: NodeShape
target class: SystematicInstitutionalAbuse
sparql:
  message: High systematicity requires institutional oversight failure and isolation control
  prefixes:
    declare:
      prefix: cacontology-institutional
      namespace: https://cacontology.projectvic.org/institutional-exploitation#
  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")) }

DonorManipulationBusinessRule
type: NodeShape
target class: DonorManipulation
sparql:
  message: Large-scale funding misuse requires multiple manipulation tactics
  prefixes:
    declare:
      prefix: cacontology-institutional
      namespace: https://cacontology.projectvic.org/institutional-exploitation#
  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) } }

Institutional Exploitation Data Quality Shape
type: NodeShape
target class: InstitutionalExploitation
comment: Validates data quality for institutional exploitation with gUFO quality aspects.
property:
  path: label
  datatype: string
  min count: 0
  max count: 1
  min length: 10
  max length: 300
  message: Label should be between 10 and 300 characters when provided.
property:
  path: comment
  datatype: string
  min count: 0
  max count: 1
  min length: 20
  max length: 2000
  message: Comment should be between 20 and 2000 characters when provided.

FoundedByShape
type: PropertyShape
path: foundedBy
name: founded by
description: Links institution to its founder (gUFO participation)
class: InstitutionalFounder
min count: 1
max count: 1

OccursWithinShape
type: PropertyShape
path: occursWithin
name: occurs within
description: Links exploitation to institution where it occurs (gUFO situational context)
class: CharitableOrganization
min count: 1
max count: 1

ExploitsVulnerabilityShape
type: PropertyShape
path: exploitsVulnerability
name: exploits vulnerability
description: Links exploitation to vulnerability exploited (gUFO aspect exploitation)
class: UcoObject
min count: 0

FacilitatedByShape
type: PropertyShape
path: facilitatedBy
name: facilitated by
description: Links exploitation to facilitating role (gUFO participation)
class: TrustedAdultRole
min count: 0