@prefix h: . @prefix owl: . @prefix rdf: . @prefix rdfs: . @prefix sh: . @prefix xsd: . @prefix dct: . @prefix foaf: . ################################################################# # Ontology Header ################################################################# a owl:Ontology ; rdfs:label "RDF-H - A Holonic Modeling Pattern Vocabulary"@en ; rdfs:comment "This vocabulary defines the core classes, properties, and SHACL constraint components for representing and validating holarchic structures in RDF."@en ; owl:versionIRI ; dct:creator [ a foaf:Person ; foaf:name "Stephane Fellah" ; foaf:workplaceHomepage ] . ################################################################# # Core Classes ################################################################# h:Holon a rdfs:Class ; rdfs:subClassOf rdfs:Resource ; rdfs:label "Holon"@en ; rdfs:comment "A resource that acts as a context for other relationships, representing a 'whole' composed of 'parts'."@en . ################################################################# # Core Holon Property ################################################################# h:inHolon a owl:ObjectProperty ; rdfs:label "in holon"@en ; rdfs:comment "An object property that links a reified triple (a relationship) to the holon it is a constituent part of."@en ; rdfs:domain rdf:Statement ; rdfs:range h:Holon . ################################################################# # Part-Of Hierarchy ################################################################# # Top-Level Part-Of Properties h:partOf a owl:ObjectProperty, owl:TransitiveProperty ; rdfs:label "part of"@en ; rdfs:comment "The top-level, transitive super-property for all part-whole relations."@en . h:hasPart a owl:ObjectProperty, owl:TransitiveProperty ; rdfs:label "has part"@en ; rdfs:comment "The top-level, transitive super-property for all whole-part relations."@en ; owl:inverseOf h:partOf . # Sub-Property: Component h:componentOf a owl:ObjectProperty ; rdfs:label "component of"@en ; rdfs:comment "A non-transitive sub-property of h:partOf for functional or structural parts."@en ; rdfs:subPropertyOf h:partOf . h:hasComponent a owl:ObjectProperty ; rdfs:label "has component"@en ; rdfs:comment "The inverse of h:componentOf."@en ; rdfs:subPropertyOf h:hasPart ; owl:inverseOf h:componentOf . # Sub-Property: Member h:memberOf a owl:ObjectProperty ; rdfs:label "member of"@en ; rdfs:comment "A non-transitive sub-property of h:partOf for elements in a collection or group."@en ; rdfs:subPropertyOf h:partOf . h:hasMember a owl:ObjectProperty ; rdfs:label "has member"@en ; rdfs:comment "The inverse of h:memberOf."@en ; rdfs:subPropertyOf h:hasPart ; owl:inverseOf h:memberOf . # Sub-Property: Substance h:substanceOf a owl:ObjectProperty, owl:TransitiveProperty ; rdfs:label "substance of"@en ; rdfs:comment "A transitive sub-property of h:partOf for material composition."@en ; rdfs:subPropertyOf h:partOf . h:hasSubstance a owl:ObjectProperty, owl:TransitiveProperty ; rdfs:label "has substance"@en ; rdfs:comment "The inverse of h:substanceOf."@en ; rdfs:subPropertyOf h:hasPart ; owl:inverseOf h:substanceOf . # Sub-Property: Portion h:portionOf a owl:ObjectProperty, owl:TransitiveProperty ; rdfs:label "portion of"@en ; rdfs:comment "A transitive sub-property of h:partOf for segments of a continuous whole."@en ; rdfs:subPropertyOf h:partOf . h:hasPortion a owl:ObjectProperty, owl:TransitiveProperty ; rdfs:label "has portion"@en ; rdfs:comment "The inverse of h:portionOf."@en ; rdfs:subPropertyOf h:hasPart ; owl:inverseOf h:portionOf . ################################################################# # SHACL Constraint Components ################################################################# h:AcyclicPartConstraintComponent a sh:ConstraintComponent ; rdfs:label "Acyclic Part Constraint Component"@en ; rdfs:comment "Validates that a holon is not part of a cycle in the part-of hierarchy."@en ; sh:validator h:AcyclicPartValidator . h:AcyclicPartValidator a sh:SPARQLValidator ; sh:message "The focus node participates in a part-of cycle."@en ; sh:select """ PREFIX h: SELECT $this WHERE { $this h:partOf+ $this . } """ . h:HolonIntegrityConstraintComponent a sh:ConstraintComponent ; rdfs:label "Holon Integrity Constraint Component"@en ; rdfs:comment "Validates that a resource used as a holon is explicitly typed as h:Holon."@en ; sh:validator h:HolonIntegrityValidator . h:HolonIntegrityValidator a sh:SPARQLValidator ; sh:message "The focus node is used as a holon (object of h:inHolon) but is not typed as h:Holon."@en ; sh:select """ PREFIX h: SELECT $this WHERE { ?s h:inHolon $this . FILTER NOT EXISTS { $this a h:Holon . } } """ .