@prefix hcm: . @prefix rdf: . @prefix rdfs: . @prefix owl: . @prefix xsd: . # Core classes hcm:System a owl:Class ; rdfs:label "System" ; rdfs:comment "A home-cage monitoring system comprising an enclosure, hardware, software, and I/O." . hcm:Animal a owl:Class ; rdfs:label "Animal" ; rdfs:comment "An experimental animal housed in an enclosure." . hcm:Enclosure a owl:Class ; rdfs:subClassOf hcm:PhysicalSpace ; rdfs:label "Enclosure" ; rdfs:comment "A physical enclosure where animals live and behaviors are displayed." . hcm:PhysicalSpace a owl:Class ; rdfs:label "Physical Space" ; rdfs:comment "A physical spatial region or container relevant to HCM." . hcm:BehaviorAndPhysiology a owl:Class ; rdfs:label "Behavior and Physiology" ; rdfs:comment "Observed behavioral/physiological process displayed by an animal." . hcm:CircadianRhythm a owl:Class ; rdfs:label "Circadian Rhythm" ; rdfs:comment "A circadian rhythm associated with a behavior/physiology process." . hcm:Sensor a owl:Class ; rdfs:label "Sensor" ; rdfs:comment "A device that captures signals related to behavior/physiology." . hcm:Actuator a owl:Class ; rdfs:label "Actuator" ; rdfs:comment "A device that elicits or perturbs behavior/physiology." . hcm:Hardware a owl:Class ; rdfs:label "Hardware" ; rdfs:comment "Physical computing hardware component(s) of a system." . hcm:Software a owl:Class ; rdfs:label "Software" ; rdfs:comment "Software component(s) of a system." . hcm:Supplier a owl:Class ; rdfs:label "Supplier" ; rdfs:comment "Commercial supplier or laboratory providing the system." . hcm:NeedsSequence a owl:Class ; rdfs:label "Needs Sequence" ; rdfs:comment "Provisioning covering food, water, social contacts, safety, enrichment." . hcm:TimeInterval a owl:Class ; rdfs:label "Time Interval" ; rdfs:comment "An observation time window for behavior capture (≥ 24h recommended)." . hcm:LimitedInteractionWithHumans a owl:Class ; rdfs:label "Limited Interaction With Humans" ; rdfs:comment "A condition indicating minimal human interference during observation." . hcm:Dimensions a owl:Class ; rdfs:label "Dimensions" ; rdfs:comment "Geometric dimensions (width, length, height) of a physical space." . hcm:CollectionOfSensors a owl:Class ; rdfs:label "Collection Of Sensors" ; rdfs:comment "A collection or set of sensors." . hcm:CollectionOfActuators a owl:Class ; rdfs:label "Collection Of Actuators" ; rdfs:comment "A collection or set of actuators." . # Disjointness axioms (safe) hcm:Sensor owl:disjointWith hcm:Actuator , hcm:Animal . hcm:Hardware owl:disjointWith hcm:Software . # Object properties hcm:hasEnclosure a owl:ObjectProperty ; rdfs:domain hcm:System ; rdfs:range hcm:Enclosure ; rdfs:label "has enclosure" ; rdfs:comment "Links a System to its Enclosure." . hcm:hasHardware a owl:ObjectProperty ; rdfs:domain hcm:System ; rdfs:range hcm:Hardware ; rdfs:label "has hardware" ; rdfs:comment "Links a System to its Hardware component." . hcm:hasSoftware a owl:ObjectProperty ; rdfs:domain hcm:System ; rdfs:range hcm:Software ; rdfs:label "has software" ; rdfs:comment "Links a System to its Software component." . hcm:producedBy a owl:ObjectProperty ; rdfs:domain hcm:System ; rdfs:range hcm:Supplier ; rdfs:label "produced by" ; rdfs:comment "The supplier/lab that produced the System." . hcm:collectsInfoOn a owl:ObjectProperty ; rdfs:domain hcm:System ; rdfs:range hcm:Animal ; rdfs:label "collects info on" ; rdfs:comment "The animal(s) for which the System collects information." . hcm:livesIn a owl:ObjectProperty ; rdfs:domain hcm:Animal ; rdfs:range hcm:Enclosure ; rdfs:label "lives in" ; rdfs:comment "Animal lives in (is housed in) an Enclosure." . hcm:requiresToThrive a owl:ObjectProperty ; rdfs:domain hcm:Animal ; rdfs:range hcm:NeedsSequence ; rdfs:label "requires to thrive" ; rdfs:comment "Needs provisioning required by an Animal." . hcm:provides a owl:ObjectProperty ; rdfs:domain hcm:Enclosure ; rdfs:range hcm:NeedsSequence ; rdfs:label "provides" ; rdfs:comment "Needs provisioning provided by an Enclosure." . hcm:displays a owl:ObjectProperty ; rdfs:domain hcm:Animal ; rdfs:range hcm:BehaviorAndPhysiology ; rdfs:label "displays" ; rdfs:comment "An Animal displays a behavior/physiological process." . hcm:isDisplayedInside a owl:ObjectProperty ; rdfs:domain hcm:BehaviorAndPhysiology ; rdfs:range hcm:Enclosure ; rdfs:label "is displayed inside" ; rdfs:comment "Behavior/physiology occurs inside an Enclosure." . hcm:hasCircadianRhythm a owl:ObjectProperty ; rdfs:domain hcm:BehaviorAndPhysiology ; rdfs:range hcm:CircadianRhythm ; rdfs:label "has circadian rhythm" ; rdfs:comment "Associates a behavior/physiology with a circadian rhythm." . hcm:extendsEnoughToCapture a owl:ObjectProperty ; rdfs:domain hcm:BehaviorAndPhysiology ; rdfs:range hcm:TimeInterval ; rdfs:label "extends enough to capture" ; rdfs:comment "Time interval that sufficiently captures the behavior/physiology." . hcm:hasProperty a owl:ObjectProperty ; rdfs:domain hcm:TimeInterval ; rdfs:range hcm:LimitedInteractionWithHumans ; rdfs:label "has property" ; rdfs:comment "Property/condition applying to the TimeInterval (e.g., limited human interaction)." . hcm:captures a owl:ObjectProperty ; rdfs:domain hcm:Sensor ; rdfs:range hcm:BehaviorAndPhysiology ; rdfs:label "captures" ; rdfs:comment "Sensor captures signals of a behavior/physiology." . hcm:elicits a owl:ObjectProperty ; rdfs:domain hcm:Actuator ; rdfs:range hcm:BehaviorAndPhysiology ; rdfs:label "elicits" ; rdfs:comment "Actuator elicits or perturbs a behavior/physiology." . hcm:hasSensor a owl:ObjectProperty ; rdfs:domain hcm:System ; rdfs:range hcm:Sensor ; rdfs:label "has sensor" ; rdfs:comment "Associates a System with a Sensor." . hcm:hasActuator a owl:ObjectProperty ; rdfs:domain hcm:System ; rdfs:range hcm:Actuator ; rdfs:label "has actuator" ; rdfs:comment "Associates a System with an Actuator." . hcm:communicatesWith a owl:ObjectProperty ; rdfs:domain hcm:Hardware ; rdfs:range hcm:Software ; rdfs:label "communicates with" ; rdfs:comment "Hardware communicates with software component(s)." . hcm:hasDimensions a owl:ObjectProperty ; rdfs:domain hcm:PhysicalSpace ; rdfs:range hcm:Dimensions ; rdfs:label "has dimensions" ; rdfs:comment "Links a PhysicalSpace to its Dimensions record." . # Datatype properties hcm:width a owl:DatatypeProperty ; rdfs:domain hcm:Dimensions ; rdfs:range xsd:decimal ; rdfs:label "width" ; rdfs:comment "Width magnitude for Dimensions (units specified in unit)." . hcm:length a owl:DatatypeProperty ; rdfs:domain hcm:Dimensions ; rdfs:range xsd:decimal ; rdfs:label "length" ; rdfs:comment "Length magnitude for Dimensions (units specified in unit)." . hcm:height a owl:DatatypeProperty ; rdfs:domain hcm:Dimensions ; rdfs:range xsd:decimal ; rdfs:label "height" ; rdfs:comment "Height magnitude for Dimensions (units specified in unit)." . hcm:unit a owl:DatatypeProperty ; rdfs:domain hcm:Dimensions ; rdfs:range xsd:string ; rdfs:label "unit" ; rdfs:comment "Unit label for dimensions (e.g., 'cm')." . hcm:durationHours a owl:DatatypeProperty ; rdfs:domain hcm:TimeInterval ; rdfs:range xsd:decimal ; rdfs:label "duration (hours)" ; rdfs:comment "Duration of the time interval in hours (≥ 24 recommended)." . hcm:isExtendable a owl:DatatypeProperty ; rdfs:domain hcm:TimeInterval ; rdfs:range xsd:boolean ; rdfs:label "is extendable" ; rdfs:comment "Whether the time interval is extendable." . # Optional boolean decomposition of needs hcm:hasFood a owl:DatatypeProperty ; rdfs:domain hcm:NeedsSequence ; rdfs:range xsd:boolean ; rdfs:label "has food" . hcm:hasWater a owl:DatatypeProperty ; rdfs:domain hcm:NeedsSequence ; rdfs:range xsd:boolean ; rdfs:label "has water" . hcm:hasSocialContacts a owl:DatatypeProperty ; rdfs:domain hcm:NeedsSequence ; rdfs:range xsd:boolean ; rdfs:label "has social contacts" . hcm:hasSafetyFromThreat a owl:DatatypeProperty ; rdfs:domain hcm:NeedsSequence ; rdfs:range xsd:boolean ; rdfs:label "has safety from threat" . hcm:hasEnvironmentalEnrichment a owl:DatatypeProperty ; rdfs:domain hcm:NeedsSequence ; rdfs:range xsd:boolean ; rdfs:label "has environmental enrichment" . # Structural restrictions (illustrative) hcm:System rdfs:subClassOf [ a owl:Restriction ; owl:onProperty hcm:hasEnclosure ; owl:qualifiedCardinality "1"^^xsd:nonNegativeInteger ; owl:onClass hcm:Enclosure ] , [ a owl:Restriction ; owl:onProperty hcm:hasSensor ; owl:minQualifiedCardinality "1"^^xsd:nonNegativeInteger ; owl:onClass hcm:Sensor ] .