PREFIX cube: <http://purl.org/linked-data/cube#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>

cube:MeasureProperty a rdfs:Class ;
  rdfs:label "Measure property"@en ;
  rdfs:comment "The class of components which represent the measured value of the phenomenon being observed"@en ;
  rdfs:subClassOf cube:ComponentProperty .

cube:concept a rdf:Property ;
  rdfs:label "concept"@en ;
  rdfs:comment "gives the concept which is being measured or indicated by a ComponentProperty"@en ;
  rdfs:domain cube:ComponentProperty ;
  rdfs:range <http://www.w3.org/2004/02/skos/core#Concept> .

cube:HierarchicalCodeList a rdfs:Class ;
  rdfs:label "Hierarchical Code List"@en ;
  rdfs:comment "Represents a generalized hierarchy of concepts which can be used for coding. The hierarchy is defined by one or more roots together with a property which relates concepts in the hierarchy to thier child concept .  The same concepts may be members of multiple hierarchies provided that different qb:parentChildProperty values are used for each hierarchy."@en .

cube:parentChildProperty a rdf:Property ;
  rdfs:label "parent-child property"@en ;
  rdfs:comment "Specifies a property which relates a parent concept in the hierarchy to a child concept."@en ;
  rdfs:domain cube:HierarchicalCodeList ;
  rdfs:range rdf:Property .

cube:hierarchyRoot a rdf:Property ;
  rdfs:comment "Specifies a root of the hierarchy. A hierarchy may have multiple roots but must have at least one."@en ;
  rdfs:domain cube:HierarchicalCodeList ;
  rdfs:range <https://w3id.org/linkml/Any> .

cube:Attachable a rdfs:Class ;
  rdfs:label "Attachable (abstract)"@en ;
  rdfs:comment "Abstract superclass for everything that can have attributes and dimensions"@en .

cube:DataSet a rdfs:Class ;
  rdfs:label "Data set"@en ;
  rdfs:comment "Represents a collection of observations, possibly organized into various slices, conforming to some common dimensional structure."@en ;
  rdfs:subClassOf cube:Attachable .

cube:structure a rdf:Property ;
  rdfs:label "structure"@en ;
  rdfs:comment "indicates the structure to which this data set conforms"@en ;
  rdfs:domain cube:DataSet ;
  rdfs:range cube:DataStructureDefinition .

cube:slice a rdf:Property ;
  rdfs:label "slice"@en ;
  rdfs:comment "Indicates a subset of a DataSet defined by fixing a subset of the dimensional values"@en ;
  rdfs:domain cube:DataSet ;
  rdfs:range cube:Slice ;
  rdfs:subPropertyOf cube:observationGroup .

cube:Observation a rdfs:Class ;
  rdfs:label "Observation"@en ;
  rdfs:comment "A single observation in the cube, may have one or more associated measured values"@en ;
  rdfs:subClassOf cube:Attachable .

cube:dataSet a rdf:Property ;
  rdfs:label "data set"@en ;
  rdfs:comment "indicates the data set of which this observation is a part"@en ;
  rdfs:domain cube:Observation ;
  rdfs:range cube:DataSet .

cube:ComponentSet a rdfs:Class ;
  rdfs:label "Component set"@en ;
  rdfs:comment "Abstract class of things which reference one or more ComponentProperties"@en .

cube:componentProperty a rdf:Property ;
  rdfs:label "component"@en ;
  rdfs:comment "indicates a ComponentProperty (i.e. attribute/dimension) expected on a DataSet, or a dimension fixed in a SliceKey"@en ;
  rdfs:domain cube:ComponentSet ;
  rdfs:range cube:ComponentProperty .

cube:ComponentProperty a rdfs:Class ;
  rdfs:label "Component property (abstract)"@en ;
  rdfs:comment "Abstract super-property of all properties representing dimensions, attributes or measures"@en ;
  rdfs:subClassOf rdf:Property .

<http://purl.org/NET/scovo#Item> a rdfs:Class .

cube:CodedProperty a rdfs:Class ;
  rdfs:label "Coded property"@en ;
  rdfs:comment "Superclass of all coded ComponentProperties"@en ;
  rdfs:subClassOf cube:ComponentProperty .

cube:codeList a rdf:Property ;
  rdfs:label "code list"@en ;
  rdfs:comment "gives the code list associated with a CodedProperty"@en ;
  rdfs:domain cube:CodedProperty ;
  rdfs:range xsd:string .

<http://www.w3.org/2004/02/skos/core#ConceptScheme> a rdfs:Class .

cube:ObservationGroup a rdfs:Class ;
  rdfs:label "Observation Group"@en ;
  rdfs:comment "A, possibly arbitrary, group of observations."@en .

cube:observation a rdf:Property ;
  rdfs:label "observation"@en ;
  rdfs:comment "indicates a observation contained within this slice of the data set"@en ;
  rdfs:domain cube:ObservationGroup ;
  rdfs:range cube:Observation .

cube:ComponentSpecification a rdfs:Class ;
  rdfs:label "Component specification"@en ;
  rdfs:comment "Used to define properties of a component (attribute, dimension etc) which are specific to its usage in a DSD."@en ;
  rdfs:subClassOf cube:ComponentSet .

cube:componentAttachment a rdf:Property ;
  rdfs:label "component attachment"@en ;
  rdfs:comment "Indicates the level at which the component property should be attached, this might an qb:DataSet, qb:Slice or qb:Observation, or a qb:MeasureProperty."@en ;
  rdfs:domain cube:ComponentSpecification ;
  rdfs:range rdfs:Class .

cube:componentRequired a rdf:Property ;
  rdfs:label "component required"@en ;
  rdfs:comment """Indicates whether a component property is required (true) or optional (false) in the context of a DSD. Only applicable
    to components correspond to an attribute. Defaults to false (optional)."""@en ;
  rdfs:domain cube:ComponentSpecification ;
  rdfs:range xsd:boolean .

cube:order a rdf:Property ;
  rdfs:label "order"@en ;
  rdfs:comment "indicates a priority order for the components of sets with this structure, used to guide presentations - lower order numbers come before higher numbers, un-numbered components come last"@en ;
  rdfs:domain cube:ComponentSpecification ;
  rdfs:range xsd:int .

cube:SliceKey a rdfs:Class ;
  rdfs:label "Slice key"@en ;
  rdfs:comment "Denotes a subset of the component properties of a DataSet which are fixed in the corresponding slices"@en ;
  rdfs:subClassOf cube:ComponentSet .

<http://www.w3.org/2004/02/skos/core#Collection> a rdfs:Class .

<http://purl.org/NET/scovo#Dataset> a rdfs:Class .

rdfs:Class a rdfs:Class .

<http://www.w3.org/2004/02/skos/core#Concept> a rdfs:Class .

cube:Slice a rdfs:Class ;
  rdfs:label "Slice"@en ;
  rdfs:comment "Denotes a subset of a DataSet defined by fixing a subset of the dimensional values, component properties on the Slice"@en ;
  rdfs:subClassOf cube:Attachable , cube:ObservationGroup .

cube:sliceStructure a rdf:Property ;
  rdfs:label "slice structure"@en ;
  rdfs:comment "indicates the sub-key corresponding to this slice"@en ;
  rdfs:domain cube:Slice ;
  rdfs:range cube:SliceKey .

<https://w3id.org/linkml/Any> a rdfs:Class ;
  rdfs:comment "An unconstrained type or object"@en .

cube:DataStructureDefinition a rdfs:Class ;
  rdfs:label "Data structure definition"@en ;
  rdfs:comment "Defines the structure of a DataSet or slice"@en ;
  rdfs:subClassOf cube:ComponentSet .

cube:sliceKey a rdf:Property ;
  rdfs:label "slice key"@en ;
  rdfs:comment "indicates a slice key which is used for slices in this dataset"@en ;
  rdfs:domain cube:DataStructureDefinition ;
  rdfs:range cube:SliceKey .

cube:component a rdf:Property ;
  rdfs:label "component specification"@en ;
  rdfs:comment "indicates a component specification which is included in the structure of the dataset"@en ;
  rdfs:domain cube:DataStructureDefinition ;
  rdfs:range cube:ComponentSpecification .

rdf:Property a rdfs:Class .

cube:AttributeProperty a rdfs:Class ;
  rdfs:label "Attribute property"@en ;
  rdfs:comment "The class of components which represent attributes of observations in the cube, e.g. unit of measurement"@en ;
  rdfs:subClassOf cube:ComponentProperty .

cube:attribute a rdf:Property ;
  rdfs:label "attribute"@en ;
  rdfs:comment "An alternative to qb:componentProperty which makes explicit that the component is a attribute"@en ;
  rdfs:range cube:AttributeProperty ;
  rdfs:subPropertyOf cube:componentProperty .

cube:dimension a rdf:Property ;
  rdfs:label "dimension"@en ;
  rdfs:comment "An alternative to qb:componentProperty which makes explicit that the component is a dimension"@en ;
  rdfs:range cube:DimensionProperty ;
  rdfs:subPropertyOf cube:componentProperty .

cube:measure a rdf:Property ;
  rdfs:label "measure"@en ;
  rdfs:comment "An alternative to qb:componentProperty which makes explicit that the component is a measure"@en ;
  rdfs:range cube:MeasureProperty ;
  rdfs:subPropertyOf cube:componentProperty .

cube:measureDimension a rdf:Property ;
  rdfs:label "measure dimension"@en ;
  rdfs:comment "An alternative to qb:componentProperty which makes explicit that the component is a measure dimension"@en ;
  rdfs:range cube:DimensionProperty ;
  rdfs:subPropertyOf cube:componentProperty .

cube:measureType a rdf:Property ;
  rdfs:label "measure type"@en ;
  rdfs:comment "Generic measure dimension, the value of this dimension indicates which measure (from the set of measures in the DSD) is being given by the obsValue (or other primary measure)"@en ;
  rdfs:range cube:MeasureProperty .

cube:observationGroup a rdf:Property ;
  rdfs:label "observation group"@en ;
  rdfs:comment "Indicates a group of observations. The domain of this property is left open so that a group may be attached to different resources and need not be restricted to a single DataSet"@en ;
  rdfs:range cube:ObservationGroup .

cube:DimensionProperty a rdfs:Class ;
  rdfs:label "Dimension property"@en ;
  rdfs:comment "The class of components which represent the dimensions of the cube"@en ;
  rdfs:subClassOf cube:CodedProperty , cube:ComponentProperty .

cube:measureType a cube:DimensionProperty ;
  rdfs:label "measure type"@en ;
  rdfs:comment "Generic measure dimension, the value of this dimension indicates which measure (from the set of measures in the DSD) is being given by the obsValue (or other primary measure)"@en .
