@prefix dct: <http://purl.org/dc/terms/> .
@prefix obo: <http://purl.obolibrary.org/obo/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix prov: <http://www.w3.org/ns/prov#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix time: <http://www.w3.org/2006/time#> .
@prefix uo: <https://uo.karelin.ai/ontology#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

uo: a owl:Ontology ;
    rdfs:label "UO Domain Ontology"@en ;
    dct:created "2026-05-01"^^xsd:date ;
    rdfs:comment "Canonical schema for Alex's personal+work knowledge graph."@en ;
    owl:versionInfo "0.2.0" .

uo:AI a uo:Dimension ;
    rdfs:label "AI"@en ;
    skos:inScheme uo:Axis ;
    skos:notation "AI" .

uo:ActiveStatus a uo:Status ;
    rdfs:label "active"@en ;
    skos:inScheme uo:Status ;
    skos:notation "active" .

uo:Activity a owl:Class ;
    rdfs:label "Activity"@en ;
    rdfs:comment "A timespan or event on the timeline, based on real data (LLM logs, chats, etc.). Overlaps with Chain but not exactly: Chains are semantic annotations; Activities are real-data timespans."@en ;
    rdfs:subClassOf uo:Entity .

uo:AlexSource a uo:Source ;
    rdfs:label "alex"@en ;
    skos:inScheme uo:Source ;
    skos:notation "alex" .

uo:ArchivedStatus a uo:Status ;
    rdfs:label "archived"@en ;
    skos:inScheme uo:Status ;
    skos:notation "archived" .

uo:Concept a owl:Class ;
    rdfs:label "Concept"@en ;
    rdfs:comment "An abstract topic, framework, or domain (e.g. Ontology, Compliance)."@en ;
    rdfs:subClassOf skos:Concept,
        uo:Entity .

uo:Creekview a uo:Dimension ;
    rdfs:label "Creekview"@en ;
    skos:inScheme uo:Axis ;
    skos:notation "Creekview" .

uo:Dashboard a owl:Class ;
    rdfs:label "Dashboard"@en ;
    rdfs:comment "A page whose content is rendered dynamically by a view — frontmatter plus a view reference, no hand-written body."@en ;
    rdfs:subClassOf obo:IAO_0000030 .

uo:Data a uo:Dimension ;
    rdfs:label "Data"@en ;
    skos:inScheme uo:Axis ;
    skos:notation "Data" .

uo:Epic a owl:Class ;
    rdfs:label "Epic"@en ;
    rdfs:subClassOf uo:Chain .

uo:Idea a owl:Class ;
    rdfs:label "Idea"@en ;
    rdfs:subClassOf uo:Chain .

uo:Karelin a uo:Dimension ;
    rdfs:label "Karelin"@en ;
    rdfs:comment "Personal/meta axis — Alex Karelin's own domain and cross-cutting work."@en ;
    skos:inScheme uo:Axis ;
    skos:notation "Karelin" .

uo:Ongoing a owl:Class ;
    rdfs:label "Ongoing"@en ;
    rdfs:comment "Deprecated page schema; ongoing-ness is lifecycle/status, not schema."@en ;
    rdfs:subClassOf uo:Entity ;
    owl:deprecated true .

uo:Ontology a owl:Class ;
    rdfs:label "Ontology"@en ;
    rdfs:comment "A formal, named namespace of terms (classes and properties) with a canonical IRI prefix."@en ;
    rdfs:subClassOf skos:Concept,
        prov:Entity .

uo:Platform a owl:Class ;
    rdfs:label "Platform"@en ;
    rdfs:comment "A tool, SaaS service, or piece of infrastructure."@en ;
    rdfs:subClassOf prov:Entity,
        uo:Entity .

uo:Process a owl:Class ;
    rdfs:label "Process"@en ;
    rdfs:comment "A node in a work-lifecycle scheme — phases (Start, Scope, Pre-production, Production, Result) and the entities recognised within them."@en ;
    rdfs:subClassOf skos:Concept,
        skos:ConceptScheme .

uo:ProductivityGrouping a uo:Grouping ;
    rdfs:label "Productivity"@en ;
    skos:inScheme uo:Grouping ;
    skos:notation "Productivity" .

uo:ProjectFile a owl:Class ;
    rdfs:label "Project File"@en ;
    rdfs:comment "A piece of textual content (notes, sections, attachments) belonging to a Project, Epic, Idea, or Task page, co-located with its parent file."@en ;
    rdfs:subClassOf obo:IAO_0000030 ;
    uo:typeName "ProjectFile" .

uo:Property a owl:Class ;
    rdfs:label "Property"@en ;
    rdfs:comment "An attribute or relation defined within an Ontology — e.g. phone, participants, up. Distinct from OntologyEntity (class terms)."@en ;
    rdfs:subClassOf skos:Concept,
        prov:Entity .

uo:RetiredStatus a uo:Status ;
    rdfs:label "retired"@en ;
    skos:inScheme uo:Status ;
    skos:notation "retired" .

uo:Role a owl:Class ;
    rdfs:label "Role"@en ;
    rdfs:comment "A role someone plays inside an org or project."@en ;
    rdfs:subClassOf uo:Entity .

uo:SessionIntelSource a uo:Source ;
    rdfs:label "session-intel"@en ;
    skos:inScheme uo:Source ;
    skos:notation "session-intel" .

uo:SmartHome a uo:Dimension ;
    rdfs:label "SmartHome"@en ;
    skos:inScheme uo:Axis ;
    skos:notation "SmartHome" .

uo:SupersededStatus a uo:Status ;
    rdfs:label "superseded"@en ;
    skos:inScheme uo:Status ;
    skos:notation "superseded" .

uo:Task a owl:Class ;
    rdfs:label "Task"@en ;
    rdfs:subClassOf uo:Chain .

uo:Theme a skos:ConceptScheme ;
    rdfs:label "Theme"@en ;
    rdfs:comment "Controlled vocabulary of theme dimension-values."@en .

uo:ThinkingGrouping a uo:Grouping ;
    rdfs:label "Thinking"@en ;
    skos:inScheme uo:Grouping ;
    skos:notation "Thinking" .

uo:Thread a owl:Class ;
    rdfs:label "Thread"@en ;
    rdfs:comment "Deprecated synonym of Chain (deprecated 2026-06-30)."@en ;
    owl:deprecated true ;
    owl:equivalentClass uo:Chain .

uo:WorkGrouping a uo:Grouping ;
    rdfs:label "Work"@en ;
    skos:inScheme uo:Grouping ;
    skos:notation "Work" .

uo:abstract a owl:AnnotationProperty ;
    rdfs:label "abstract"@en ;
    rdfs:comment "True when the class is an abstract name — never used as a type: value in frontmatter or in text; concrete subclasses carry the user-facing names."@en .

uo:address a owl:DatatypeProperty ;
    rdfs:label "address"@en ;
    rdfs:domain uo:Entity ;
    rdfs:range xsd:string .

uo:aliases a owl:DatatypeProperty ;
    rdfs:label "aliases"@en ;
    rdfs:comment "Alternate names/handles for non-Person entities (KG aliases: field)."@en ;
    rdfs:domain uo:Entity ;
    rdfs:range xsd:string .

uo:alternateName a owl:DatatypeProperty ;
    rdfs:label "alternate name"@en ;
    rdfs:comment "Aliases used in raw data (Slack handles, abbreviations, emails)."@en ;
    rdfs:domain uo:Entity ;
    rdfs:range xsd:string ;
    uo:fieldName "alternateName" .

uo:confidence a owl:DatatypeProperty ;
    rdfs:label "confidence"@en ;
    rdfs:comment "Extraction confidence for an auto-captured entity (high/medium/low)."@en ;
    rdfs:domain uo:Entity ;
    rdfs:range xsd:string .

uo:conversationMedium a owl:DatatypeProperty ;
    rdfs:label "conversation medium"@en ;
    rdfs:domain uo:Conversation ;
    rdfs:range xsd:string .

uo:country a owl:DatatypeProperty ;
    rdfs:label "country"@en ;
    rdfs:domain prov:Location ;
    rdfs:range xsd:string .

uo:description a owl:DatatypeProperty ;
    rdfs:label "description"@en ;
    rdfs:comment "Free-text description of the entity. On ontology term pages it mirrors the term's rdfs:comment and round-trips via sync."@en ;
    rdfs:domain uo:Entity ;
    rdfs:range xsd:string ;
    uo:fieldName "description" .

uo:email a owl:DatatypeProperty ;
    rdfs:label "email"@en ;
    rdfs:domain uo:Entity ;
    rdfs:range xsd:string .

uo:endDate a owl:DatatypeProperty ;
    rdfs:label "end date"@en ;
    rdfs:domain uo:Entity ;
    rdfs:range xsd:date ;
    uo:fieldName "endDate" .

uo:fieldName a owl:AnnotationProperty ;
    rdfs:label "field name"@en ;
    rdfs:comment "The exact Obsidian frontmatter key this property is stored as, when it differs from the snake_cased label (e.g. hasAxis → axis, alternateName → alternateName)."@en .

uo:firstMessageDate a owl:DatatypeProperty ;
    rdfs:label "first message date"@en ;
    rdfs:domain uo:LLMChat ;
    rdfs:range xsd:dateTime .

uo:focus a owl:ObjectProperty ;
    rdfs:label "focus"@en ;
    rdfs:comment "The real-world entity a classifier/dimension concept refers to — e.g. the Xsolla axis value refers to the uo:Xsolla organisation."@en ;
    rdfs:domain uo:Dimension ;
    rdfs:range uo:Entity .

uo:generatedAt a owl:DatatypeProperty ;
    rdfs:label "generated at"@en ;
    rdfs:comment "Timestamp of the last generation of this page."@en ;
    rdfs:domain obo:IAO_0000030 ;
    rdfs:range xsd:dateTime ;
    uo:fieldName "generated_at" .

uo:generatedBy a owl:DatatypeProperty ;
    rdfs:label "generated by"@en ;
    rdfs:comment "Tool that generated this page. Pages carrying it are safe to regenerate; hand edits belong in frontmatter and round-trip via sync."@en ;
    rdfs:domain obo:IAO_0000030 ;
    rdfs:range xsd:string ;
    uo:fieldName "generated_by" .

uo:hasGrouping a owl:ObjectProperty ;
    rdfs:label "has grouping"@en ;
    rdfs:comment "Grouping (top-level domain) this entity belongs to. Constrained vocabulary."@en ;
    rdfs:domain uo:Entity ;
    rdfs:range uo:Dimension ;
    uo:fieldName "grouping" .

uo:indexed a owl:DatatypeProperty ;
    rdfs:label "indexed"@en ;
    rdfs:comment "Whether this entity has been indexed by the ingestion pipeline."@en ;
    rdfs:domain prov:Person ;
    rdfs:range xsd:boolean .

uo:industry a owl:DatatypeProperty ;
    rdfs:label "industry"@en ;
    rdfs:comment "Industry sector of an organisation."@en ;
    rdfs:domain prov:Organization ;
    rdfs:range xsd:string .

uo:iri a owl:DatatypeProperty ;
    rdfs:label "iri"@en ;
    rdfs:comment "Canonical IRI of the ontology term an OntologyEntity page represents."@en ;
    rdfs:domain uo:OntologyEntity ;
    rdfs:range xsd:anyURI ;
    uo:fieldName "iri" .

uo:lastMessageDate a owl:DatatypeProperty ;
    rdfs:label "last message date"@en ;
    rdfs:domain uo:LLMChat ;
    rdfs:range xsd:dateTime .

uo:location a owl:DatatypeProperty ;
    rdfs:label "location"@en ;
    rdfs:comment "Free-text location string (city, region, country)."@en ;
    rdfs:domain uo:Entity ;
    rdfs:range xsd:string .

uo:mentionSessions a owl:DatatypeProperty ;
    rdfs:label "mention sessions"@en ;
    rdfs:comment "Identifiers of sessions in which this entity was mentioned."@en ;
    rdfs:domain uo:Entity ;
    rdfs:range xsd:string .

uo:model a owl:DatatypeProperty ;
    rdfs:label "model"@en ;
    rdfs:domain uo:LLMChat ;
    rdfs:range xsd:string .

uo:org a owl:ObjectProperty ;
    rdfs:label "org"@en ;
    rdfs:comment "Organisation a person belongs to."@en ;
    rdfs:domain prov:Person ;
    rdfs:range prov:Organization .

uo:ownerOrg a owl:ObjectProperty ;
    rdfs:label "owner org"@en ;
    rdfs:comment "Organisation that owns a project / platform."@en ;
    rdfs:domain uo:Entity ;
    rdfs:range prov:Organization .

uo:parent a owl:ObjectProperty ;
    rdfs:label "parent"@en ;
    rdfs:comment "Parent entity. (Distinct KG field from up:; not asserted equivalent.)"@en ;
    rdfs:domain uo:Entity ;
    rdfs:range uo:Entity .

uo:participants a owl:ObjectProperty ;
    rdfs:label "participants"@en ;
    rdfs:domain uo:Conversation ;
    rdfs:range prov:Person .

uo:phone a owl:DatatypeProperty ;
    rdfs:label "phone"@en ;
    rdfs:domain uo:Entity ;
    rdfs:range xsd:string .

uo:phoneticName a owl:DatatypeProperty ;
    rdfs:label "phonetic name"@en ;
    rdfs:comment "Cyrillic/non-ASCII forms STT might emit."@en ;
    rdfs:domain prov:Person ;
    rdfs:range xsd:string ;
    uo:fieldName "phoneticName" .

uo:prev a owl:ObjectProperty ;
    rdfs:label "prev"@en ;
    rdfs:comment "Previous item in a sequence of entities."@en ;
    rdfs:domain uo:Chain ;
    rdfs:range uo:Chain ;
    owl:inverseOf uo:next .

uo:primaryAxis a owl:ObjectProperty ;
    rdfs:label "primary axis"@en ;
    rdfs:comment "The single most relevant axis for this entity."@en ;
    rdfs:domain uo:Entity ;
    rdfs:range uo:Dimension ;
    rdfs:subPropertyOf uo:hasAxis .

uo:priority a owl:DatatypeProperty ;
    rdfs:label "priority"@en ;
    rdfs:domain uo:Project ;
    rdfs:range xsd:string ;
    uo:fieldName "priority" .

uo:project a owl:ObjectProperty ;
    rdfs:label "project"@en ;
    rdfs:comment "A project this entity is associated with."@en ;
    rdfs:domain uo:Entity ;
    rdfs:range uo:Project .

uo:related a owl:ObjectProperty ;
    rdfs:label "related"@en ;
    rdfs:comment "A loosely related entity."@en ;
    rdfs:domain uo:Entity ;
    rdfs:range uo:Entity .

uo:role a owl:DatatypeProperty ;
    rdfs:label "role"@en ;
    rdfs:domain prov:Person ;
    rdfs:range xsd:string .

uo:sessionCount a owl:DatatypeProperty ;
    rdfs:label "session count"@en ;
    rdfs:comment "Number of sessions in which this entity was mentioned."@en ;
    rdfs:domain uo:Entity ;
    rdfs:range xsd:integer .

uo:source a owl:ObjectProperty ;
    rdfs:label "source"@en ;
    rdfs:comment "Provenance of this entity record — how it was captured. Constrained vocabulary."@en ;
    rdfs:domain uo:Entity ;
    rdfs:range uo:Source .

uo:spokenLanguage a owl:DatatypeProperty ;
    rdfs:label "spoken language"@en ;
    rdfs:comment "BCP-47 language tag."@en ;
    rdfs:domain prov:Person ;
    rdfs:range xsd:string ;
    uo:fieldName "spoken_languages" .

uo:startDate a owl:DatatypeProperty ;
    rdfs:label "start date"@en ;
    rdfs:domain uo:Entity ;
    rdfs:range xsd:date ;
    uo:fieldName "startDate" .

uo:status a owl:ObjectProperty ;
    rdfs:label "status"@en ;
    rdfs:comment "Lifecycle status. Constrained vocabulary (uo:Status)."@en ;
    rdfs:domain uo:Entity ;
    rdfs:range uo:Status .

uo:tags a owl:DatatypeProperty ;
    rdfs:label "tags"@en ;
    rdfs:comment "Free-text keyword tags."@en ;
    rdfs:domain uo:Entity ;
    rdfs:range xsd:string .

uo:typeName a owl:AnnotationProperty ;
    rdfs:label "type name"@en ;
    rdfs:comment "The exact type: token and fileClass name for this class, when it differs from the label (e.g. Ontology Entity → OntologyEntity)."@en .

uo:up a owl:ObjectProperty ;
    rdfs:label "up"@en ;
    rdfs:comment "Hierarchical parent: the broader entity this one sits under."@en ;
    rdfs:domain uo:Chain ;
    rdfs:range uo:Chain ;
    owl:inverseOf uo:down .

uo:validInterval a owl:ObjectProperty ;
    rdfs:label "valid interval"@en ;
    rdfs:comment "The time interval during which this entity or term was in use."@en ;
    rdfs:range time:ProperInterval ;
    rdfs:subPropertyOf time:hasTime .

uo:voiceprintPath a owl:DatatypeProperty ;
    rdfs:label "voiceprint path"@en ;
    rdfs:comment "Path to a stored voiceprint sample for speaker recognition."@en ;
    rdfs:domain prov:Person ;
    rdfs:range xsd:string .

uo:voiceprintSamples a owl:DatatypeProperty ;
    rdfs:label "voiceprint samples"@en ;
    rdfs:comment "Number of voiceprint samples captured."@en ;
    rdfs:domain prov:Person ;
    rdfs:range xsd:integer .

prov:Location a owl:Class ;
    rdfs:label "Place"@en ;
    rdfs:comment "A geographic location (city, office, region)."@en ;
    rdfs:subClassOf uo:Entity .

uo:OntologyEntity a owl:Class ;
    rdfs:label "Ontology Entity"@en ;
    rdfs:comment "A class term defined within a specific Ontology — e.g. Chain, Role, prov:Entity, skos:Concept. Attributes (e.g. phone, participants) are uo:Property, not OntologyEntity. References its parent Ontology via inOntology."@en ;
    rdfs:subClassOf skos:Concept,
        prov:Entity ;
    uo:typeName "OntologyEntity" .

uo:Suntrust a uo:Dimension ;
    rdfs:label "Suntrust"@en ;
    skos:exactMatch uo:SuntrustGrouping ;
    skos:inScheme uo:Axis ;
    skos:notation "Suntrust" .

uo:SuntrustGrouping a uo:Grouping ;
    rdfs:label "Suntrust"@en ;
    skos:exactMatch uo:Suntrust ;
    skos:inScheme uo:Grouping ;
    skos:notation "Suntrust" .

uo:TulaCoGrouping a uo:Grouping ;
    rdfs:label "TulaCo"@en ;
    skos:exactMatch uo:tulaCo ;
    skos:inScheme uo:Grouping ;
    skos:notation "TulaCo" ;
    uo:focus uo:TulaCo .

uo:XsollaGrouping a uo:Grouping ;
    rdfs:label "Xsolla"@en ;
    skos:exactMatch uo:xsolla ;
    skos:inScheme uo:Grouping ;
    skos:notation "Xsolla" ;
    uo:focus uo:Xsolla .

uo:down a owl:ObjectProperty ;
    rdfs:label "down"@en ;
    rdfs:comment "Hierarchical child: inverse of up."@en ;
    rdfs:domain uo:Chain ;
    rdfs:range uo:Chain .

uo:hasAxis a owl:ObjectProperty ;
    rdfs:label "has axis"@en ;
    rdfs:comment "Multi-valued. The first item is the primary axis."@en ;
    rdfs:domain uo:Entity ;
    rdfs:range uo:Dimension ;
    uo:fieldName "axis" .

uo:next a owl:ObjectProperty ;
    rdfs:label "next"@en ;
    rdfs:comment "Next item in a sequence of entities: inverse of prev."@en ;
    rdfs:domain uo:Chain ;
    rdfs:range uo:Chain .

uo:tulaCo a uo:Dimension ;
    rdfs:label "TulaCo"@en ;
    skos:exactMatch uo:TulaCoGrouping ;
    skos:inScheme uo:Axis ;
    skos:notation "TulaCo" ;
    uo:focus uo:TulaCo .

uo:xsolla a uo:Dimension ;
    rdfs:label "Xsolla"@en ;
    skos:exactMatch uo:XsollaGrouping ;
    skos:inScheme uo:Axis ;
    skos:notation "Xsolla" ;
    uo:focus uo:Xsolla .

uo:Project a owl:Class ;
    rdfs:label "Project"@en ;
    rdfs:comment "An initiative with status, owner, and one or more axes. (BFO Process; PROV Activity via Chain.)"@en ;
    rdfs:subClassOf uo:Chain,
        uo:Entity .

uo:TulaCo a prov:Organization ;
    rdfs:label "TulaCo"@en .

uo:Xsolla a prov:Organization ;
    rdfs:label "Xsolla"@en .

uo:Conversation a owl:Class ;
    rdfs:label "Conversation"@en ;
    rdfs:subClassOf obo:IAO_0000030 .

uo:LLMChat a owl:Class ;
    rdfs:label "LLM-Chat"@en ;
    rdfs:subClassOf uo:Conversation .

prov:Organization a owl:Class ;
    rdfs:label "Org"@en ;
    rdfs:comment "An organisation (company, team, legal entity)."@en ;
    rdfs:subClassOf uo:Entity .

uo:Source a owl:Class ;
    rdfs:label "Source"@en ;
    rdfs:comment "Provenance of an entity record — how it was captured into the graph. Closed vocabulary (backfilled from KG source: field)."@en ;
    rdfs:subClassOf skos:Concept,
        skos:ConceptScheme .

obo:IAO_0000030 a owl:Class ;
    rdfs:label "Information Content Entity"@en ;
    rdfs:comment "An information artifact that is about something — notes, messages, documents, transcripts, recordings. (IAO Information Content Entity; BFO Generically Dependent Continuant.)"@en ;
    uo:abstract true ;
    uo:typeName "InformationContentEntity" .

skos:ConceptScheme a owl:Class ;
    rdfs:label "Scheme"@en ;
    rdfs:comment "A controlled vocabulary: the set of allowed values for a typed frontmatter field. Members are SKOS Concepts that point back via inScheme."@en .

prov:Person a owl:Class ;
    rdfs:label "Person"@en ;
    rdfs:comment "A human individual."@en ;
    rdfs:subClassOf uo:Entity .

uo:Axis a skos:ConceptScheme ;
    rdfs:label "Axis"@en ;
    rdfs:comment "Controlled vocabulary of axis dimension-values."@en .

uo:Status a owl:Class ;
    rdfs:label "Status"@en ;
    rdfs:comment "Lifecycle status of a project. Closed vocabulary (backfilled from KG status: field)."@en ;
    rdfs:subClassOf skos:Concept,
        skos:ConceptScheme .

uo:Dimension a owl:Class ;
    rdfs:label "Dimension"@en ;
    rdfs:comment "A classifier value attached to work items — the value of a dimension field (e.g. Xsolla, AI). A SKOS concept; the vocabularies that hold dimension values are Schemes (skos:ConceptScheme — Axis, Theme, Grouping)."@en ;
    rdfs:subClassOf skos:Concept .

uo:Grouping a skos:ConceptScheme ;
    rdfs:label "Grouping"@en ;
    rdfs:comment "Controlled vocabulary of grouping dimension-values (top-level domains projects sit under)."@en .

uo:Chain a owl:Class ;
    rdfs:label "Chain"@en ;
    rdfs:comment "Abstract name for a connected sequence of work items — like up/down/prev/next for edges, the abstract name is never used in text or frontmatter; renderings are Project, Epic, Task, Idea, sites visited, etc. Chains are semantic, more like annotations; contrast uo:Activity, which is grounded in real data."@en ;
    rdfs:subClassOf obo:IAO_0000030,
        prov:Activity,
        uo:Entity ;
    uo:abstract true .

uo:Entity a owl:Class ;
    rdfs:label "Entity"@en ;
    rdfs:comment "Abstract base class for all named things in the graph."@en ;
    uo:abstract true .

