# 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 . :Cluster a owl:Class ; rdfs:subClassOf :Morphology . :System a owl:Class ; rdfs:subClassOf :Morphology . :Stratum a owl:Class ; rdfs:subClassOf :Morphology . :Chunk a owl:Class ; rdfs:subClassOf :morphology . # Container contents :SystemDeployment a owl:Class . :ChunkReference a owl:Class . # Products (for artifact split rules). :Artifact a owl:Class . :StratumArtifact a owl:Class ; rdfs:subClassOf :Artifact . :ChunkArtifact a owl:Class ; rdfs:subClassOf :Artifact . ## Shared properties :hasName a owl:DatatypeProperty , owl:FunctionalProperty ; rdfs:domain :Morphology ; rdfs:range xsd:string . # 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 . :hasLocation a owl:DatatypeProperty , owl:FunctionalProperty ; rdfs:domain :SystemDeployment ; rdfs:range xsd:string . # FIXME: this is actually a key-value mapping, how do you do that? :hasConfigurationSetting a owl:DatatypeProperty ; rdfs:domain :SystemDeployment ; rdfs:range xsd:string . ## System-specific properties :containsStratumArtifact a owl:ObjectProperty ; rdfs:domain :System ; rdfs:range :StratumArtifact ; owl:minCardinality 1 . :hasArchitecture a owl:DatatypeProperty, owl:FunctionalProperty ; rdfs:domain :System ; rdfs:range xsd:string . :hasConfigurationExtension a owl:DatatypeProperty ; rdfs:domain :System ; rdfs:range xsd:string . ## Stratum-specific properties :produces a owl:ObjectProperty , rdf:Seq ; rdfs:domain :Stratum ; rdfs:range :StratumArtifact . :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 . :ref a owl:DatatypeProperty , owl:FunctionalProperty ; rdfs:domain :ChunkReference ; rdfs:range xsd:string . :unpetrifyRef a owl:DatatypeProperty , owl:FunctionalProperty ; rdfs:domain :ChunkReference ; rdfs:range xsd:string . :hasChunkBuildDependency a owl:ObjectProperty ; rdfs:domain :ChunkReference ; rdfs:range :Chunk . :prefix a owl:DatatypeProperty , owl:FunctionalProperty ; rdfs:domain :ChunkReference ; rdfs:range xsd:string . # FIXME: actually only 'bootstrap' and 'normal' are 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 . :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 .