@prefix owl:  <http://www.w3.org/2002/07/owl#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xsd:  <http://www.w3.org/2001/XMLSchema#> .
@prefix dct:  <http://purl.org/dc/terms/> .
@prefix xeo:  <https://xeoontology.org/xeo#> .

# XEO Engagement module — DRAFT (v0).
#
# The seam between web-engine visibility and the pipeline: intents,
# conversion points, and conversion events, with pointers into whatever CRM
# you run. Design rule inherited from core: integrate with data sources, not
# vocabularies — the CRM record is referenced by identity key (crmRecordRef),
# never mirrored as a vendor vocabulary dependency.
#
# This module deliberately introduces interpretation-layer terms (targetsIntent,
# attributedResponse). Interpretations carry method and confidence; they are claims,
# not facts, and agents assembling context can filter them out.

xeo:engagement-module a owl:Ontology ;
    dct:title "XEO Engagement (draft)" ;
    dct:description "DRAFT v0. The seam between web-engine visibility and the pipeline: intents, conversion points, conversion events, and identity-key pointers into whatever CRM you run." ;
    dct:creator "Inbound Found" ;
    owl:versionInfo "0.5.0" .

# --- Intent ------------------------------------------------------------------

xeo:SearchIntent a owl:Class ;
    rdfs:label "Search Intent" ;
    xeo:epistemicLayer "entity" ;
    xeo:groundedIn "Broder (2002), 'A taxonomy of web search', as extended in common practice" ;
    dct:description "Why the person is asking. Modeled as named individuals, not free strings." .

xeo:Informational a xeo:SearchIntent , owl:NamedIndividual ; rdfs:label "Informational" .
xeo:Navigational  a xeo:SearchIntent , owl:NamedIndividual ; rdfs:label "Navigational" .
xeo:CommercialInvestigation a xeo:SearchIntent , owl:NamedIndividual ; rdfs:label "Commercial Investigation" .
xeo:Transactional a xeo:SearchIntent , owl:NamedIndividual ; rdfs:label "Transactional" .

xeo:targetsIntent a owl:ObjectProperty ;
    rdfs:range xeo:SearchIntent ;
    xeo:epistemicLayer "interpretation" ;
    dct:description "A URL or Prompt is aimed at this intent. A strategist's or model's claim — carries method and confidence." .

# --- Conversion points (entities on the page) ---------------------------------

xeo:ConversionPoint a owl:Class ;
    rdfs:label "Conversion Point" ;
    xeo:epistemicLayer "entity" ;
    dct:description "A durable on-page mechanism that turns attention into a pipeline event." .

xeo:CallToAction a owl:Class ; rdfs:subClassOf xeo:ConversionPoint ;
    rdfs:label "Call To Action" .

xeo:LeadCaptureForm a owl:Class ; rdfs:subClassOf xeo:ConversionPoint ;
    rdfs:label "Lead Capture Form" .

xeo:GatedAsset a owl:Class ; rdfs:subClassOf xeo:ConversionPoint ;
    rdfs:label "Gated Asset" ;
    dct:description "Content exchanged for contact information." .

xeo:hasConversionPoint a owl:ObjectProperty ;
    rdfs:domain xeo:URL ; rdfs:range xeo:ConversionPoint ;
    xeo:epistemicLayer "observation" ;
    dct:description "Observed presence of a conversion point on a page (crawl-attributed, bitemporal like linksTo)." .

# --- Conversion events (episodes) ---------------------------------------------

xeo:ConversionEvent a owl:Class ;
    rdfs:label "Conversion Event" ;
    xeo:epistemicLayer "episode" ;
    dct:description "A submission/click/unlock that happened at a time. Immutable once recorded." .

xeo:capturedBy a owl:ObjectProperty ;
    rdfs:domain xeo:ConversionEvent ; rdfs:range xeo:ConversionPoint ;
    xeo:epistemicLayer "observation" .

xeo:occurredAt a owl:DatatypeProperty ;
    rdfs:domain xeo:ConversionEvent ; rdfs:range xsd:dateTime ;
    xeo:epistemicLayer "episode" .

xeo:crmRecordRef a owl:DatatypeProperty ;
    rdfs:range xsd:string ;
    xeo:epistemicLayer "entity" ;
    xeo:canonicalStore "crm" ;
    dct:description "Identity-key pointer to the CRM object (form id, contact id, deal id) in whatever system runs the pipeline. The join contract to the post-click world — the graph never mirrors the CRM's schema." .

# --- Pre-click attribution (an interpretation, and labeled as one) --------------

xeo:attributedResponse a owl:ObjectProperty ;
    rdfs:domain xeo:ConversionEvent ; rdfs:range xeo:LLMResponse ;
    xeo:epistemicLayer "interpretation" ;
    dct:description "The claim that this conversion traces to engine visibility captured in this response episode. Multi-engine attribution is inherently inferential: this edge MUST carry method and confidence, and honest implementations will leave it sparse." .
