From a61c944c2fa02cba487cf48cb6f637adcd00e273 Mon Sep 17 00:00:00 2001 From: Sam Thursfield Date: Thu, 2 Jul 2015 13:05:35 +0100 Subject: schema: Rename, and update comments Change-Id: I54f98863d731325eb02407fddae163a3abae43b4 --- schema/baserock-example.schema | 264 ++++++++++++++++++++++++++++++++++++++ schema/baserock-owl-schema.turtle | 260 ------------------------------------- schema/surf-test.py | 2 +- 3 files changed, 265 insertions(+), 261 deletions(-) create mode 100644 schema/baserock-example.schema delete mode 100644 schema/baserock-owl-schema.turtle 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 : . +@prefix owl: . +@prefix rdfs: . +@prefix rdf: . +@prefix xsd: . +@prefix dc: . + +: 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." . diff --git a/schema/baserock-owl-schema.turtle b/schema/baserock-owl-schema.turtle deleted file mode 100644 index f4dadb61..00000000 --- a/schema/baserock-owl-schema.turtle +++ /dev/null @@ -1,260 +0,0 @@ -# Baserock Definitions schema, version -1 - -# 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. - - -# 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-owl-schema.turtle -# -# Visualise it in a rubbish way: -# rapper -i turtle -o dot baserock-owl-schema.turtle | 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. - - -# Metadata - -@prefix : . -@prefix owl: . -@prefix rdfs: . -@prefix rdf: . -@prefix xsd: . -@prefix dc: . - -: 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." . diff --git a/schema/surf-test.py b/schema/surf-test.py index a17ca82d..23bf8168 100644 --- a/schema/surf-test.py +++ b/schema/surf-test.py @@ -45,7 +45,7 @@ session = surf.Session(store) parse.load_all_morphologies(session, store) schema = rdflib.Graph() -schema.parse("baserock-owl-schema.turtle", format="turtle") +schema.parse("baserock-example.schema", format="turtle") # Only works for 'memory' database, but I don't really care any more. all_data = store.reader.graph -- cgit v1.2.1