summaryrefslogtreecommitdiff
path: root/schema/baserock-example.schema
diff options
context:
space:
mode:
Diffstat (limited to 'schema/baserock-example.schema')
-rw-r--r--schema/baserock-example.schema264
1 files changed, 264 insertions, 0 deletions
diff --git a/schema/baserock-example.schema b/schema/baserock-example.schema
new file mode 100644
index 00000000..1f90a891
--- /dev/null
+++ b/schema/baserock-example.schema
@@ -0,0 +1,264 @@
+# Baserock Definitions schema example
+
+# This ontology teases out a simple formal model of the data represention
+# aspect of the Baserock definitions format (v5).
+#
+# It's not a great example of an ontology, because it models a generic problem
+# using terms and a data model tied closely to how a couple of specific tools
+# work. In future we need to produce a more general-purpose model. I hope
+# this schema is a useful step towards doing that.
+
+# This is an RDF + OWL ontology represented as RDF/Turtle data.
+
+# NOTE: I absolutely HATE CamelCase but it seems to be the convention for RDF
+# property names. I'm undecided on whether it's worse to condemning everyone
+# to using stupidCamelCaseNames for things, or worse to make a schema that is
+# inconsistent with the rest of the Linked Data world.
+
+# Things you can do with this:
+
+# Check it is valid:
+# rapper -i turtle baserock-example.schema
+#
+# Visualise it in a rubbish way:
+# rapper -i turtle -o dot baserock-example.schema | dot -Tpng > schema.png
+#
+# Edit with Protégé:
+# just open it in protege, it can save to Turtle format as well but will lose
+# comments and formatting.
+#
+# Browse it using the example browser program.
+# See: browser/README.txt
+
+
+# Metadata
+
+@prefix : <http://baserock.org/definitions/example-schema#> .
+@prefix owl: <http://www.w3.org/2002/07/owl#> .
+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+@prefix dc: <http://purl.org/dc/terms/> .
+
+: a owl:Ontology ;
+ rdfs:comment "Example schema for Baserock Definitions format version 5." .
+
+
+## Entities
+
+# Source definitions
+
+:Morphology a owl:Class ;
+ rdfs:comment "A definition file." .
+
+:Cluster a owl:Class ;
+ rdfs:subClassOf :Morphology ;
+ rdfs:comment "Instructions for deploying one or systems." .
+
+:System a owl:Class ;
+ rdfs:subClassOf :Morphology ;
+ rdfs:comment "A collection of strata in a form that can be executed." .
+
+:Stratum a owl:Class ;
+ rdfs:subClassOf :Morphology ;
+ rdfs:comment "A set of related chunks." .
+
+:Chunk a owl:Class ;
+ rdfs:subClassOf :Morphology ;
+ rdfs:comment "An individual component, that can be built from a Git repository." .
+
+# Container contents
+
+:SystemDeployment a owl:Class ;
+ rdfs:comment "Information for deploying one system of a cluster." .
+
+:ChunkReference a owl:Class ;
+ rdfs:comment "An instance of a chunk within a stratum." .
+
+# Products (for artifact split rules).
+
+:Artifact a owl:Class ;
+ rdfs:comment "One part of the result of building a morphology. The output of a build is split according to patterns, so there are multiple artifacts produced for a given source." .
+
+:StratumArtifact a owl:Class ;
+ rdfs:subClassOf :Artifact ;
+ rdfs:comment "Part of the result of building a stratum." .
+
+:ChunkArtifact a owl:Class ;
+ rdfs:subClassOf :Artifact ;
+ rdfs:comment "Part of the result of building a chunk." .
+
+
+## Shared properties
+
+# 'name' is converted to a URL at load time.
+
+# use dc:description for 'description', see:
+# http://dublincore.org/documents/2012/06/14/dcmi-terms/?v=terms#terms-description
+
+
+## Cluster-specific properties
+
+:containsSystemDeployment a owl:ObjectProperty ;
+ rdfs:domain :Cluster ;
+ rdfs:range :SystemDeployment ;
+ owl:minCardinality 1 .
+
+
+## SystemDeployment-specific properties
+
+:deploysSystem a owl:ObjectProperty , owl:FunctionalProperty ;
+ rdfs:domain :SystemDeployment ;
+ rdfs:range :System .
+
+:hasLabel a owl:DatatypeProperty , owl:FunctionalProperty ;
+ rdfs:domain :SystemDeployment ;
+ rdfs:range xsd:string .
+
+:hasType a owl:DatatypeProperty , owl:FunctionalProperty ;
+ rdfs:domain :SystemDeployment ;
+ rdfs:range xsd:string ;
+ rdfs:comment "The .write extension used to perform the deployment." .
+
+:hasLocation a owl:DatatypeProperty , owl:FunctionalProperty ;
+ rdfs:domain :SystemDeployment ;
+ rdfs:range xsd:string ;
+ rdfs:comment "Deployment location. This is passed to the selected .write extension" .
+
+# FIXME: this is actually a key-value mapping, how do you do that in RDF properly?
+:hasConfigurationSetting a owl:DatatypeProperty ;
+ rdfs:domain :SystemDeployment ;
+ rdfs:range xsd:string ;
+ rdfs:comment "Arbitrary key=value pair that is set in the environment of the .configure and .write extensions during deployment." .
+
+
+## System-specific properties
+
+:containsStratumArtifact a owl:ObjectProperty ;
+ rdfs:domain :System ;
+ rdfs:range :StratumArtifact ;
+ owl:minCardinality 1 .
+
+# A build tool will only understand a certain set of architectures, but I think
+# that should not be part of the data model.
+:hasArchitecture a owl:DatatypeProperty, owl:FunctionalProperty ;
+ rdfs:domain :System ;
+ rdfs:range xsd:string .
+
+:hasConfigurationExtension a owl:DatatypeProperty ;
+ rdfs:domain :System ;
+ rdfs:range xsd:string ;
+ rdfs:comment "A .configure extension to be run when with system is deployed." .
+
+
+## Stratum-specific properties
+
+:produces a owl:ObjectProperty , rdf:Seq ;
+ rdfs:domain :Stratum ;
+ rdfs:range :StratumArtifact ;
+ rdfs:comment "Describes how this artifact is split once all chunks are built." .
+
+:hasStratumBuildDependency a owl:ObjectProperty ;
+ rdfs:domain :Stratum ;
+ rdfs:range :Stratum .
+
+:containsChunkReference a owl:ObjectProperty ;
+ rdfs:domain :Stratum ;
+ rdfs:range :Chunk ;
+ owl:minCardinality 1 .
+
+
+## ChunkReference-specific properties
+
+:refersToChunk a owl:ObjectProperty , owl:FunctionalProperty ;
+ rdfs:domain :ChunkReference ;
+ rdfs:range :Chunk .
+
+:repo a owl:DatatypeProperty , owl:FunctionalProperty ;
+ rdfs:domain :ChunkReference ;
+ rdfs:range xsd:string ;
+ rdfs:comment "Git repo that this chunk's build instructions should be run in. Can be a keyed URL according to the repo-alias mapping, which isn't currently defined in this data model." .
+
+:ref a owl:DatatypeProperty , owl:FunctionalProperty ;
+ rdfs:domain :ChunkReference ;
+ rdfs:range xsd:string ;
+ rdfs:comment "Ref of the Git repo that should be checked out before building. Usually a SHA1." .
+
+:unpetrifyRef a owl:DatatypeProperty , owl:FunctionalProperty ;
+ rdfs:domain :ChunkReference ;
+ rdfs:range xsd:string ;
+ rdfs:comment "Name of the ref that should be checked out (useful when 'ref' is a SHA1 to keep track of the actual branch/tag name)." .
+
+:hasChunkBuildDependency a owl:ObjectProperty ;
+ rdfs:domain :ChunkReference ;
+ rdfs:range :Chunk .
+
+:prefix a owl:DatatypeProperty , owl:FunctionalProperty ;
+ rdfs:domain :ChunkReference ;
+ rdfs:range xsd:string ;
+ rdfs:comment "Value of the PREFIX environment variable in the build environment (defaults to /usr)" .
+
+# FIXME: it's possible to specify in OWL that 'bootstrap' and 'normal' are the
+# only valid values.
+:buildMode a owl:DatatypeProperty , owl:FunctionalProperty ;
+ rdfs:domain :ChunkReference ;
+ rdfs:range xsd:string .
+
+
+## Chunk-specific properties
+
+# build-system isn't included here, as it overlaps with the *-commands
+# fields in an unfortunate way.
+
+# Note that representing lists of things in RDF is a bit of a pain.
+# http://smiy.sourceforge.net/olo/spec/orderedlistontology.html might
+# be worth investigating.
+
+:produces a owl:ObjectProperty , rdf:Seq ;
+ rdfs:domain :Chunk ;
+ rdfs:range :ChunkArtifact ;
+ rdfs:comment "Describes how this artifact is split once built." .
+
+:preConfigureCommands a owl:DatatypeProperty , rdf:Seq ;
+ rdfs:domain :Chunk ;
+ rdfs:range xsd:string .
+
+:configureCommands a owl:DatatypeProperty , rdf:Seq ;
+ rdfs:domain :Chunk ;
+ rdfs:range xsd:string .
+
+:postConfigureCommands a owl:DatatypeProperty , rdf:Seq ;
+ rdfs:domain :Chunk ;
+ rdfs:range xsd:string .
+
+:preBuildCommands a owl:DatatypeProperty , rdf:Seq ;
+ rdfs:domain :Chunk ;
+ rdfs:range xsd:string .
+
+:buildCommands a owl:DatatypeProperty , rdf:Seq ;
+ rdfs:domain :Chunk ;
+ rdfs:range xsd:string .
+
+:postBuildCommands a owl:DatatypeProperty , rdf:Seq ;
+ rdfs:domain :Chunk ;
+ rdfs:range xsd:string .
+
+:preInstallCommands a owl:DatatypeProperty , rdf:Seq ;
+ rdfs:domain :Chunk ;
+ rdfs:range xsd:string .
+
+:installCommands a owl:DatatypeProperty , rdf:Seq ;
+ rdfs:domain :Chunk ;
+ rdfs:range xsd:string .
+
+:postInstallCommands a owl:DatatypeProperty , rdf:Seq ;
+ rdfs:domain :Chunk ;
+ rdfs:range xsd:string .
+
+
+# Artifact properties
+
+:includes a owl:DatatypeProperty, rdf:Seq ;
+ rdfs:domain :Artifact ;
+ rdfs:range xsd:string ;
+ rdfs:comment "A regular expression pattern. The results of a build are matched against this pattern and any that match will be included in that artifact." .