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¶
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¶
- Metadata Model - Understanding the metadata model
- JSON-LD - JSON-LD processing
- SHACL - Data validation