diff options
Diffstat (limited to 'schema/baserock-example.schema')
-rw-r--r-- | schema/baserock-example.schema | 264 |
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." . |