Skip to content

Ontology

OWL ontology definitions for Blacklake semantic metadata.

Overview

The Blacklake ontology defines the semantic model for data objects, commits, and relationships using OWL (Web Ontology Language).

Namespace Definitions

@prefix bl: <https://sempervent.github.io/blacklake/ns#> .
@prefix dct: <http://purl.org/dc/terms/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@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#> .

Core Classes

Object Class

bl:Object a owl:Class ;
  rdfs:subClassOf dct:Dataset ;
  rdfs:label "Blacklake Object" ;
  rdfs:comment "A content-addressable object in the Blacklake system" .

Commit Class

bl:Commit a owl:Class ;
  rdfs:label "Blacklake Commit" ;
  rdfs:comment "A commit in the Blacklake version control system" .

Repository Class

bl:Repository a owl:Class ;
  rdfs:label "Blacklake Repository" ;
  rdfs:comment "A Blacklake repository containing objects and commits" .

Object Properties

Content Properties

bl:checksum a owl:DatatypeProperty ;
  rdfs:domain bl:Object ;
  rdfs:range xsd:string ;
  rdfs:label "Checksum" ;
  rdfs:comment "The cryptographic hash of the object content" .

bl:algo a owl:DatatypeProperty ;
  rdfs:domain bl:Object ;
  rdfs:range xsd:string ;
  rdfs:label "Algorithm" ;
  rdfs:comment "The hash algorithm used to compute the checksum" .

Relationship Properties

bl:author a owl:ObjectProperty ;
  rdfs:domain bl:Object ;
  rdfs:range foaf:Agent ;
  rdfs:subPropertyOf dct:creator ;
  rdfs:label "Author" ;
  rdfs:comment "The author of the object" .

bl:hasObject a owl:ObjectProperty ;
  rdfs:domain bl:Repository ;
  rdfs:range bl:Object ;
  rdfs:label "Has Object" ;
  rdfs:comment "Relates a repository to its objects" .

bl:hasCommit a owl:ObjectProperty ;
  rdfs:domain bl:Repository ;
  rdfs:range bl:Commit ;
  rdfs:label "Has Commit" ;
  rdfs:comment "Relates a repository to its commits" .

Data Properties

Dublin Core Properties

bl:title a owl:DatatypeProperty ;
  rdfs:domain bl:Object ;
  rdfs:range xsd:string ;
  rdfs:subPropertyOf dct:title ;
  rdfs:label "Title" ;
  rdfs:comment "The title of the object" .

bl:description a owl:DatatypeProperty ;
  rdfs:domain bl:Object ;
  rdfs:range xsd:string ;
  rdfs:subPropertyOf dct:description ;
  rdfs:label "Description" ;
  rdfs:comment "A description of the object" .

bl:format a owl:DatatypeProperty ;
  rdfs:domain bl:Object ;
  rdfs:range xsd:string ;
  rdfs:subPropertyOf dct:format ;
  rdfs:label "Format" ;
  rdfs:comment "The MIME type of the object" .

bl:size a owl:DatatypeProperty ;
  rdfs:domain bl:Object ;
  rdfs:range xsd:integer ;
  rdfs:subPropertyOf dct:extent ;
  rdfs:label "Size" ;
  rdfs:comment "The size of the object in bytes" .

Temporal Properties

bl:created a owl:DatatypeProperty ;
  rdfs:domain bl:Object ;
  rdfs:range xsd:dateTime ;
  rdfs:subPropertyOf dct:created ;
  rdfs:label "Created" ;
  rdfs:comment "The creation date of the object" .

bl:modified a owl:DatatypeProperty ;
  rdfs:domain bl:Object ;
  rdfs:range xsd:dateTime ;
  rdfs:subPropertyOf dct:modified ;
  rdfs:label "Modified" ;
  rdfs:comment "The last modification date of the object" .

Object Relationships

Inheritance Hierarchy

graph TD
    THING[owl:Thing] --> RESOURCE[dct:Resource]
    RESOURCE --> DATASET[dct:Dataset]
    DATASET --> OBJECT[bl:Object]

    THING --> AGENT[foaf:Agent]
    AGENT --> PERSON[foaf:Person]
    AGENT --> ORGANIZATION[foaf:Organization]

    THING --> COMMIT[bl:Commit]
    THING --> REPOSITORY[bl:Repository]

Object Relationships

graph TD
    REPO[Repository] --> OBJECT[Object]
    REPO --> COMMIT[Commit]
    OBJECT --> AUTHOR[Agent]
    COMMIT --> AUTHOR
    COMMIT --> TREE[Tree Object]
    TREE --> OBJECT

Property Restrictions

Functional Properties

bl:checksum a owl:FunctionalProperty ;
  rdfs:domain bl:Object ;
  rdfs:range xsd:string .

Inverse Properties

bl:hasObject a owl:ObjectProperty ;
  owl:inverseOf bl:isObjectOf .

bl:isObjectOf a owl:ObjectProperty ;
  rdfs:domain bl:Object ;
  rdfs:range bl:Repository ;
  rdfs:label "Is Object Of" ;
  rdfs:comment "Relates an object to its repository" .

Transitive Properties

bl:partOf a owl:ObjectProperty ;
  rdfs:domain bl:Object ;
  rdfs:range bl:Object ;
  owl:TransitiveProperty ;
  rdfs:label "Part Of" ;
  rdfs:comment "Relates an object to its parent object" .

Data Type Definitions

Custom Data Types

bl:SHA256Hash a owl:Datatype ;
  rdfs:subClassOf xsd:string ;
  rdfs:label "SHA-256 Hash" ;
  rdfs:comment "A SHA-256 hash value" .

bl:MIMEType a owl:Datatype ;
  rdfs:subClassOf xsd:string ;
  rdfs:label "MIME Type" ;
  rdfs:comment "A MIME type identifier" .

Enumeration Values

bl:HashAlgorithm a owl:Class ;
  rdfs:label "Hash Algorithm" ;
  rdfs:comment "Supported hash algorithms" .

bl:sha256 a bl:HashAlgorithm ;
  rdfs:label "SHA-256" ;
  rdfs:comment "SHA-256 hash algorithm" .

bl:sha1 a bl:HashAlgorithm ;
  rdfs:label "SHA-1" ;
  rdfs:comment "SHA-1 hash algorithm" .

Axioms and Rules

Object Axioms

bl:Object a owl:Class ;
  owl:equivalentClass [
    a owl:Restriction ;
    owl:onProperty bl:checksum ;
    owl:cardinality 1
  ] ;
  owl:equivalentClass [
    a owl:Restriction ;
    owl:onProperty bl:algo ;
    owl:cardinality 1
  ] .

Commit Axioms

bl:Commit a owl:Class ;
  owl:equivalentClass [
    a owl:Restriction ;
    owl:onProperty bl:hasTree ;
    owl:cardinality 1
  ] ;
  owl:equivalentClass [
    a owl:Restriction ;
    owl:onProperty bl:hasParent ;
    owl:minCardinality 0
  ] .

Ontology Diagram

graph TB
    subgraph "Blacklake Ontology"
        OBJECT[bl:Object]
        COMMIT[bl:Commit]
        REPO[bl:Repository]
        AGENT[foaf:Agent]
        PERSON[foaf:Person]
        ORG[foaf:Organization]
    end

    subgraph "Dublin Core"
        DATASET[dct:Dataset]
        RESOURCE[dct:Resource]
    end

    subgraph "Properties"
        CHECKSUM[bl:checksum]
        ALGO[bl:algo]
        AUTHOR[bl:author]
        HAS_OBJECT[bl:hasObject]
        HAS_COMMIT[bl:hasCommit]
    end

    OBJECT --> DATASET
    DATASET --> RESOURCE

    AGENT --> PERSON
    AGENT --> ORG

    OBJECT --> CHECKSUM
    OBJECT --> ALGO
    OBJECT --> AUTHOR

    REPO --> HAS_OBJECT
    REPO --> HAS_COMMIT

    HAS_OBJECT --> OBJECT
    HAS_COMMIT --> COMMIT

    AUTHOR --> AGENT

Usage Examples

Object Definition

bl:obj:sha256:abc123... a bl:Object ;
  bl:checksum "abc123..." ;
  bl:algo "sha256" ;
  bl:title "Sales Data 2024" ;
  bl:description "Q1-Q4 sales data" ;
  bl:format "text/csv" ;
  bl:size 1024000 ;
  bl:created "2024-01-15T10:30:00Z"^^xsd:dateTime ;
  bl:author [
    a foaf:Person ;
    foaf:name "Data Team" ;
    foaf:mbox <mailto:data@company.com>
  ] .

Commit Definition

bl:commit:sha256:def456... a bl:Commit ;
  bl:title "Add sales data" ;
  bl:description "Added Q1-Q4 sales data with metadata" ;
  bl:created "2024-01-15T10:30:00Z"^^xsd:dateTime ;
  bl:author [
    a foaf:Person ;
    foaf:name "Data Team" ;
    foaf:mbox <mailto:data@company.com>
  ] ;
  bl:hasTree bl:tree:sha256:ghi789... ;
  bl:hasParent bl:commit:sha256:jkl012... .

Validation Rules

Object Validation

bl:Object a owl:Class ;
  owl:equivalentClass [
    a owl:Restriction ;
    owl:onProperty bl:checksum ;
    owl:cardinality 1
  ] ;
  owl:equivalentClass [
    a owl:Restriction ;
    owl:onProperty bl:algo ;
    owl:cardinality 1
  ] ;
  owl:equivalentClass [
    a owl:Restriction ;
    owl:onProperty dct:title ;
    owl:cardinality 1
  ] .

Commit Validation

bl:Commit a owl:Class ;
  owl:equivalentClass [
    a owl:Restriction ;
    owl:onProperty bl:hasTree ;
    owl:cardinality 1
  ] ;
  owl:equivalentClass [
    a owl:Restriction ;
    owl:onProperty bl:author ;
    owl:cardinality 1
  ] .

Next Steps