@prefix :       <http://demo.openlinksw.com/schemas/ScaleKG/> .
@prefix skg:    <http://demo.openlinksw.com/schemas/ScaleKG/> .
@prefix schema: <http://schema.org/> .
@prefix xsd:    <http://www.w3.org/2001/XMLSchema#> .
@prefix rdf:    <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs:   <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl:    <http://www.w3.org/2002/07/owl#> .
@prefix skos:   <http://www.w3.org/2004/02/skos/core#> .
@prefix cdx:    <https://linkeddata.uriburner.com/DAV/demos/daas/ontology-terms#> .

# TBox for the ScaleKG RDF View on demo.openlinksw.com. The ontology is the entity
# <http://demo.openlinksw.com/schemas/ScaleKG/>; this document is a separate CreativeWork.

<http://demo.openlinksw.com/schemas/ScaleKG/ontology-document> a schema:CreativeWork ;
    schema:name "ScaleKG ontology (TBox)"@en ;
    schema:description "RDFS/OWL vocabulary for the ScaleKG demonstration estate: regions, clusters, tenants, graph databases, replication links, warehouse sources and tables, workloads and analytics jobs. Loaded into the named graph http://demo.openlinksw.com/schemas/ScaleKG/ on demo.openlinksw.com and used to derive the urn:scalekg:inference rule set."@en ;
    schema:dateCreated "2026-09-30T00:00:00Z"^^xsd:dateTime ;
    schema:dateModified "2026-09-30T00:00:00Z"^^xsd:dateTime ;
    schema:author <https://www.linkedin.com/in/kidehen#this> ;
    schema:about <http://demo.openlinksw.com/schemas/ScaleKG/> .

<http://demo.openlinksw.com/schemas/ScaleKG/> a owl:Ontology ;
    rdfs:label "ScaleKG ontology"@en ;
    rdfs:comment "Vocabulary for describing a graph-database estate (tenants, clusters, databases, replication) and the warehouse sources that virtual-graph workloads read in place."@en ;
    owl:versionInfo "1.0"@en .

# ── Classes ────────────────────────────────────────────────────────────────

skg:Region a owl:Class ;
    rdfs:isDefinedBy <http://demo.openlinksw.com/schemas/ScaleKG/> ;
    rdfs:label "Region"@en ;
    rdfs:comment "A cloud region hosting one or more clusters."@en ;
    rdfs:subClassOf schema:Place .

skg:Cluster a owl:Class ;
    rdfs:isDefinedBy <http://demo.openlinksw.com/schemas/ScaleKG/> ;
    rdfs:label "Cluster"@en ;
    rdfs:comment "A database cluster or instance with a fixed amount of memory and storage that hosts one or more graph databases."@en ;
    rdfs:subClassOf schema:Thing .

skg:Tenant a owl:Class ;
    rdfs:isDefinedBy <http://demo.openlinksw.com/schemas/ScaleKG/> ;
    rdfs:label "Tenant"@en ;
    rdfs:comment "A customer organisation whose data is isolated in its own databases."@en ;
    rdfs:subClassOf schema:Organization .

skg:Environment a owl:Class ;
    rdfs:isDefinedBy <http://demo.openlinksw.com/schemas/ScaleKG/> ;
    rdfs:label "Environment"@en ;
    rdfs:comment "A lifecycle stage such as dev, test, staging or prod."@en ;
    rdfs:subClassOf schema:DefinedTerm .

skg:DataAsset a owl:Class ;
    rdfs:isDefinedBy <http://demo.openlinksw.com/schemas/ScaleKG/> ;
    rdfs:label "Data asset"@en ;
    rdfs:comment "Anything that stores queryable data: a natively stored graph database or a warehouse table read in place."@en ;
    rdfs:subClassOf schema:Dataset .

skg:GraphDatabase a owl:Class ;
    rdfs:isDefinedBy <http://demo.openlinksw.com/schemas/ScaleKG/> ;
    rdfs:label "Graph database"@en ;
    rdfs:comment "One database inside a cluster, owned by a single tenant in a single environment."@en ;
    rdfs:subClassOf skg:DataAsset .

skg:WarehouseTable a owl:Class ;
    rdfs:isDefinedBy <http://demo.openlinksw.com/schemas/ScaleKG/> ;
    rdfs:label "Warehouse table"@en ;
    rdfs:comment "A table in a data warehouse or lakehouse that a workload queries where it lives."@en ;
    rdfs:subClassOf skg:DataAsset .

skg:WarehouseSource a owl:Class ;
    rdfs:isDefinedBy <http://demo.openlinksw.com/schemas/ScaleKG/> ;
    rdfs:label "Warehouse source"@en ;
    rdfs:comment "A warehouse or lakehouse platform that holds warehouse tables."@en ;
    rdfs:subClassOf schema:DataCatalog .

skg:ReplicationLink a owl:Class ;
    rdfs:isDefinedBy <http://demo.openlinksw.com/schemas/ScaleKG/> ;
    rdfs:label "Replication link"@en ;
    rdfs:comment "A one-way link that keeps a target database in step with a source database on another cluster."@en ;
    rdfs:subClassOf schema:Intangible .

skg:Workload a owl:Class ;
    rdfs:isDefinedBy <http://demo.openlinksw.com/schemas/ScaleKG/> ;
    rdfs:label "Workload"@en ;
    rdfs:comment "An agent, GraphRAG application, analytics batch or SaaS application that reads a database or a warehouse."@en ;
    rdfs:subClassOf schema:SoftwareApplication .

skg:AnalyticsJob a owl:Class ;
    rdfs:isDefinedBy <http://demo.openlinksw.com/schemas/ScaleKG/> ;
    rdfs:label "Analytics job"@en ;
    rdfs:comment "A run of a graph-analytics job against a database, billed for the seconds it runs."@en ;
    rdfs:subClassOf schema:Action .

# ── Object properties ──────────────────────────────────────────────────────

skg:dependsOn a owl:ObjectProperty ;
    rdfs:isDefinedBy <http://demo.openlinksw.com/schemas/ScaleKG/> ;
    rdfs:label "depends on"@en ;
    rdfs:comment "Super-property: the subject cannot operate without the object. runsOn, readsFrom, queriesVirtually, hostedOn and replicatedTo are all specialisations."@en ;
    rdfs:subPropertyOf cdx:dependsOn .

skg:runsOn a owl:ObjectProperty ;
    rdfs:isDefinedBy <http://demo.openlinksw.com/schemas/ScaleKG/> ;
    rdfs:label "runs on"@en ;
    rdfs:comment "The natively stored graph database a workload uses."@en ;
    rdfs:domain skg:Workload ; rdfs:range skg:GraphDatabase ;
    rdfs:subPropertyOf skg:dependsOn .

skg:readsFrom a owl:ObjectProperty ;
    rdfs:isDefinedBy <http://demo.openlinksw.com/schemas/ScaleKG/> ;
    rdfs:label "reads from"@en ;
    rdfs:comment "A warehouse table a virtual-graph workload reads in place."@en ;
    rdfs:domain skg:Workload ; rdfs:range skg:WarehouseTable ;
    rdfs:subPropertyOf skg:dependsOn .

skg:queriesVirtually a owl:ObjectProperty ;
    rdfs:isDefinedBy <http://demo.openlinksw.com/schemas/ScaleKG/> ;
    rdfs:label "queries virtually"@en ;
    rdfs:comment "The warehouse source a workload queries through a virtual graph instead of a copy."@en ;
    rdfs:domain skg:Workload ; rdfs:range skg:WarehouseSource ;
    rdfs:subPropertyOf skg:dependsOn .

skg:hostedOn a owl:ObjectProperty ;
    rdfs:isDefinedBy <http://demo.openlinksw.com/schemas/ScaleKG/> ;
    rdfs:label "hosted on"@en ;
    rdfs:comment "The cluster a graph database lives in."@en ;
    rdfs:domain skg:GraphDatabase ; rdfs:range skg:Cluster ;
    rdfs:subPropertyOf skg:dependsOn .

skg:replicatedTo a owl:ObjectProperty ;
    rdfs:isDefinedBy <http://demo.openlinksw.com/schemas/ScaleKG/> ;
    rdfs:label "replicated to"@en ;
    rdfs:comment "The target database that continuously receives this database's changes."@en ;
    rdfs:domain skg:GraphDatabase ; rdfs:range skg:GraphDatabase ;
    rdfs:subPropertyOf skg:dependsOn .

skg:inRegion a owl:ObjectProperty ;
    rdfs:isDefinedBy <http://demo.openlinksw.com/schemas/ScaleKG/> ;
    rdfs:label "in region"@en ;
    rdfs:comment "The region a cluster runs in."@en ;
    rdfs:domain skg:Cluster ; rdfs:range skg:Region .

skg:homeRegion a owl:ObjectProperty ;
    rdfs:isDefinedBy <http://demo.openlinksw.com/schemas/ScaleKG/> ;
    rdfs:label "home region"@en ;
    rdfs:comment "The region a tenant is primarily served from."@en ;
    rdfs:domain skg:Tenant ; rdfs:range skg:Region .

skg:ownedBy a owl:ObjectProperty ;
    rdfs:isDefinedBy <http://demo.openlinksw.com/schemas/ScaleKG/> ;
    rdfs:label "owned by"@en ;
    rdfs:comment "The tenant that owns a database."@en ;
    rdfs:domain skg:GraphDatabase ; rdfs:range skg:Tenant .

skg:forTenant a owl:ObjectProperty ;
    rdfs:isDefinedBy <http://demo.openlinksw.com/schemas/ScaleKG/> ;
    rdfs:label "for tenant"@en ;
    rdfs:comment "The tenant a workload serves."@en ;
    rdfs:domain skg:Workload ; rdfs:range skg:Tenant .

skg:environment a owl:ObjectProperty ;
    rdfs:isDefinedBy <http://demo.openlinksw.com/schemas/ScaleKG/> ;
    rdfs:label "environment"@en ;
    rdfs:comment "The lifecycle stage a database belongs to."@en ;
    rdfs:domain skg:GraphDatabase ; rdfs:range skg:Environment .

skg:inSource a owl:ObjectProperty ;
    rdfs:isDefinedBy <http://demo.openlinksw.com/schemas/ScaleKG/> ;
    rdfs:label "in source"@en ;
    rdfs:comment "The warehouse source that holds a table."@en ;
    rdfs:domain skg:WarehouseTable ; rdfs:range skg:WarehouseSource .

skg:replicatesFrom a owl:ObjectProperty ;
    rdfs:isDefinedBy <http://demo.openlinksw.com/schemas/ScaleKG/> ;
    rdfs:label "replicates from"@en ;
    rdfs:comment "The source database of a replication link."@en ;
    rdfs:domain skg:ReplicationLink ; rdfs:range skg:GraphDatabase .

skg:replicatesTo a owl:ObjectProperty ;
    rdfs:isDefinedBy <http://demo.openlinksw.com/schemas/ScaleKG/> ;
    rdfs:label "replicates to"@en ;
    rdfs:comment "The target database of a replication link."@en ;
    rdfs:domain skg:ReplicationLink ; rdfs:range skg:GraphDatabase .

skg:ranOn a owl:ObjectProperty ;
    rdfs:isDefinedBy <http://demo.openlinksw.com/schemas/ScaleKG/> ;
    rdfs:label "ran on"@en ;
    rdfs:comment "The database an analytics job ran against."@en ;
    rdfs:domain skg:AnalyticsJob ; rdfs:range skg:GraphDatabase .

# ── Datatype properties ────────────────────────────────────────────────────

skg:cloud a owl:DatatypeProperty ;
    rdfs:isDefinedBy <http://demo.openlinksw.com/schemas/ScaleKG/> ;
    rdfs:label "cloud"@en ; rdfs:comment "The cloud provider of a region."@en ;
    rdfs:domain skg:Region ; rdfs:range xsd:string .
skg:countryCode a owl:DatatypeProperty ;
    rdfs:isDefinedBy <http://demo.openlinksw.com/schemas/ScaleKG/> ;
    rdfs:label "country code"@en ; rdfs:comment "ISO 3166-1 alpha-2 country code of a region."@en ;
    rdfs:domain skg:Region ; rdfs:range xsd:string .
skg:clusterRole a owl:DatatypeProperty ;
    rdfs:isDefinedBy <http://demo.openlinksw.com/schemas/ScaleKG/> ;
    rdfs:label "cluster role"@en ; rdfs:comment "primary or secondary."@en ;
    rdfs:domain skg:Cluster ; rdfs:range xsd:string .
skg:ramGb a owl:DatatypeProperty ;
    rdfs:isDefinedBy <http://demo.openlinksw.com/schemas/ScaleKG/> ;
    rdfs:label "RAM (GB)"@en ; rdfs:comment "Memory of a cluster in gigabytes."@en ;
    rdfs:domain skg:Cluster ; rdfs:range xsd:integer .
skg:storageGb a owl:DatatypeProperty ;
    rdfs:isDefinedBy <http://demo.openlinksw.com/schemas/ScaleKG/> ;
    rdfs:label "storage (GB)"@en ; rdfs:comment "Storage of a cluster in gigabytes."@en ;
    rdfs:domain skg:Cluster ; rdfs:range xsd:integer .
skg:edition a owl:DatatypeProperty ;
    rdfs:isDefinedBy <http://demo.openlinksw.com/schemas/ScaleKG/> ;
    rdfs:label "edition"@en ; rdfs:comment "The service edition a cluster runs."@en ;
    rdfs:domain skg:Cluster ; rdfs:range xsd:string .
skg:tier a owl:DatatypeProperty ;
    rdfs:isDefinedBy <http://demo.openlinksw.com/schemas/ScaleKG/> ;
    rdfs:label "tier"@en ; rdfs:comment "The commercial tier of a tenant."@en ;
    rdfs:domain skg:Tenant ; rdfs:range xsd:string .
skg:purpose a owl:DatatypeProperty ;
    rdfs:isDefinedBy <http://demo.openlinksw.com/schemas/ScaleKG/> ;
    rdfs:label "purpose"@en ; rdfs:comment "What a database is for."@en ;
    rdfs:domain skg:GraphDatabase ; rdfs:range xsd:string .
skg:syncMode a owl:DatatypeProperty ;
    rdfs:isDefinedBy <http://demo.openlinksw.com/schemas/ScaleKG/> ;
    rdfs:label "sync mode"@en ; rdfs:comment "transaction-pull or differential-backup-pull."@en ;
    rdfs:domain skg:ReplicationLink ; rdfs:range xsd:string .
skg:topology a owl:DatatypeProperty ;
    rdfs:isDefinedBy <http://demo.openlinksw.com/schemas/ScaleKG/> ;
    rdfs:label "topology"@en ; rdfs:comment "The replication topology, active-passive here."@en ;
    rdfs:domain skg:ReplicationLink ; rdfs:range xsd:string .
skg:rbacReplicated a owl:DatatypeProperty ;
    rdfs:isDefinedBy <http://demo.openlinksw.com/schemas/ScaleKG/> ;
    rdfs:label "RBAC replicated"@en ; rdfs:comment "1 when role-based access rules travel with the replica, 0 when they must be recreated on the target."@en ;
    rdfs:domain skg:ReplicationLink ; rdfs:range xsd:integer .
skg:vendor a owl:DatatypeProperty ;
    rdfs:isDefinedBy <http://demo.openlinksw.com/schemas/ScaleKG/> ;
    rdfs:label "vendor"@en ; rdfs:comment "The company behind a warehouse source."@en ;
    rdfs:domain skg:WarehouseSource ; rdfs:range xsd:string .
skg:rowCount a owl:DatatypeProperty ;
    rdfs:isDefinedBy <http://demo.openlinksw.com/schemas/ScaleKG/> ;
    rdfs:label "row count"@en ; rdfs:comment "Approximate rows in a warehouse table."@en ;
    rdfs:domain skg:WarehouseTable ; rdfs:range xsd:integer .
skg:workloadKind a owl:DatatypeProperty ;
    rdfs:isDefinedBy <http://demo.openlinksw.com/schemas/ScaleKG/> ;
    rdfs:label "workload kind"@en ; rdfs:comment "agent, graphrag, analytics or saas-app."@en ;
    rdfs:domain skg:Workload ; rdfs:range xsd:string .
skg:latencyClass a owl:DatatypeProperty ;
    rdfs:isDefinedBy <http://demo.openlinksw.com/schemas/ScaleKG/> ;
    rdfs:label "latency class"@en ; rdfs:comment "millisecond for natively stored databases, second for warehouse-backed virtual graphs."@en ;
    rdfs:domain skg:Workload ; rdfs:range xsd:string .
skg:jobKind a owl:DatatypeProperty ;
    rdfs:isDefinedBy <http://demo.openlinksw.com/schemas/ScaleKG/> ;
    rdfs:label "job kind"@en ; rdfs:comment "ml-feature-prep, entity-resolution or exploratory-science."@en ;
    rdfs:domain skg:AnalyticsJob ; rdfs:range xsd:string .
skg:runDate a owl:DatatypeProperty ;
    rdfs:isDefinedBy <http://demo.openlinksw.com/schemas/ScaleKG/> ;
    rdfs:label "run date"@en ; rdfs:comment "The day an analytics job ran."@en ;
    rdfs:domain skg:AnalyticsJob ; rdfs:range xsd:date .
skg:billedSeconds a owl:DatatypeProperty ;
    rdfs:isDefinedBy <http://demo.openlinksw.com/schemas/ScaleKG/> ;
    rdfs:label "billed seconds"@en ; rdfs:comment "Seconds a job was billed, which is the seconds it ran."@en ;
    rdfs:domain skg:AnalyticsJob ; rdfs:range xsd:integer .
