@prefix :      <https://w3id.org/sulo/sulo.ttl#> .
@prefix cc:    <http://creativecommons.org/ns#> .
@prefix schema: <https://schema.org/> .
@prefix mod:   <https://w3id.org/mod#> .
@prefix pav:   <http://purl.org/pav/> .
@prefix owl:   <http://www.w3.org/2002/07/owl#> .
@prefix xsd:   <http://www.w3.org/2001/XMLSchema#> .
@prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .
@prefix sulo:  <https://w3id.org/sulo/> .
@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix xml:   <http://www.w3.org/XML/1998/namespace> .
@prefix omv:   <http://omv.ontoware.org/2005/05/ontology#> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix dcat:  <http://www.w3.org/ns/dcat#> .
@prefix vann:  <http://purl.org/vocab/vann/> .
@prefix foaf:  <http://xmlns.com/foaf/0.1/> .
@prefix dc:    <http://purl.org/dc/elements/1.1/> .

sulo:isReferredIn  a   owl:ObjectProperty ;
        rdfs:comment   "is referred in is relation between an object that is the subject of an information object."@en ;
        rdfs:domain    owl:Thing ;
        rdfs:label     "is referred in"@en ;
        rdfs:range     sulo:InformationObject ;
        owl:inverseOf  sulo:refersTo .

sulo:sulo.ttl  a                       owl:Ontology ;
        rdfs:comment                   "The Simplified Upper Level Ontology (SULO) is ontology with a minimal set of classes and relations to guide the development of a personal health knowledge graph."@en ;
        rdfs:label                     "Simplified Upper Level Ontology"@en ;
        dc:creator                     <https://orcid.org/0000-0003-4727-9435> ;
        dcterms:alternative            "SULO"@en ;
        dcterms:created                "2024-11-11" ;
        dcterms:language               <http://lexvo.org/id/iso639-1/en> ;
        dcterms:license                <https://creativecommons.org/publicdomain/zero/1.0> ;
        dcterms:modified               "2025-07-08" ;
        dcterms:title                  "Simplified Upper Level Ontology"@en ;
        pav:authoredBy                 <https://orcid.org/0000-0003-4727-9435> ;
        vann:preferredNamespacePrefix  "sulo" ;
        vann:preferredNamespaceUri     sulo: ;
        owl:versionIRI                 sulo:sulo-0.2.0.ttl ;
        owl:versionInfo                "0.2.0" ;
        dcat:accessURL                 sulo:sulo.ttl ;
        foaf:homepage                  <https://github.com/AIDAVA-DEV/sulo> ;
        schema:funding                 "This work is partially supported by the AIDAVA project (GA 101057062), as part of the European Union's Horizon Europe research and innovation programme."@en ;
        mod:definitionProperty         rdfs:comment ;
        mod:hasRepresentationLanguage  omv:OWL ;
        mod:hasSyntax                  <http://www.w3.org/ns/formats/Turtle> ;
        mod:prefLabelProperty          rdfs:label .

dcterms:alternative  a  owl:AnnotationProperty .

sulo:hasMember  a      owl:ObjectProperty ;
        rdfs:comment   "has item is a relation between a collection and an item contained therein."@en ;
        rdfs:domain    sulo:Set ;
        rdfs:label     "has item"@en ;
        rdfs:range     owl:Thing ;
        owl:inverseOf  sulo:isItemIn .

sulo:isPrecededBy  a   owl:ObjectProperty ;
        rdfs:comment   "A relation in which one process occurs after to another process."@en ;
        rdfs:domain    sulo:Process ;
        rdfs:label     "is preceded by"@en ;
        rdfs:range     sulo:Process ;
        owl:inverseOf  sulo:precedes .

dcterms:license  a  owl:AnnotationProperty .

sulo:hasFeature  a     owl:ObjectProperty ;
        rdfs:comment   "has feature is a relation between a thing and an internal, contextual, or externally attributed characteristic."@en ;
        rdfs:domain    [ a            owl:Class ;
                         owl:unionOf  ( sulo:Object sulo:Process )
                       ] ;
        rdfs:label     "has feature"@en ;
        rdfs:range     sulo:Feature ;
        owl:inverseOf  sulo:isFeatureOf .

sulo:Quantity  a         owl:Class ;
        rdfs:comment     "A quantity is an informational object that contains the magnitude (and unit) of an attribute."@en ;
        rdfs:label       "quantity"@en ;
        rdfs:subClassOf  sulo:InformationObject ;
        rdfs:subClassOf  [ a                   owl:Restriction ;
                           owl:onProperty      sulo:hasPart ;
                           owl:someValuesFrom  sulo:Unit
                         ] .

mod:hasSyntax  a  owl:AnnotationProperty .

sulo:isTimeOf  a      owl:ObjectProperty ;
        rdfs:comment  "a relation between a time and an object that occurs within it."@en ;
        rdfs:domain   sulo:Time ;
        rdfs:label    "is time of" ;
        rdfs:range    owl:Thing .

vann:preferredNamespaceUri
        a       owl:AnnotationProperty .

mod:definitionProperty
        a       owl:AnnotationProperty .

sulo:Role  a             owl:Class ;
        rdfs:comment     "A role is a feature that describes a context-dependent behaviour."@en ;
        rdfs:label       "role"@en ;
        rdfs:subClassOf  sulo:Feature ;
        <http://www.w3.org/2004/02/skos/core#example>
                "a teacher, a student, a catalyst, a substrate, a product, a patient"@en .

sulo:Process  a          owl:Class ;
        rdfs:comment     "a process is a entity that unfolds in time, has temporal parts, and has objects that participate in the process."@en ;
        rdfs:label       "process"@en ;
        rdfs:subClassOf  [ a                  owl:Restriction ;
                           owl:allValuesFrom  sulo:Process ;
                           owl:onProperty     sulo:hasPart
                         ] ;
        <http://www.w3.org/2004/02/skos/core#example>
                "the process of diagnosing a problem condition, the process of walking down the street, the process of teaching a class"@en .

sulo:isItemIn  a            owl:ObjectProperty ;
        rdfs:comment        "has item is a relation between an item and the collection in which it contained."@en ;
        rdfs:domain         owl:Thing ;
        rdfs:label          "is item in"@en ;
        rdfs:range          sulo:Set ;
        rdfs:subPropertyOf  owl:topObjectProperty .

sulo:isFeatureOf  a   owl:ObjectProperty ;
        rdfs:comment  "is feature of is a relation between an internal, contextual, or externally attributed characteristic and some Thing."@en ;
        rdfs:domain   sulo:Feature ;
        rdfs:label    "is feature of"@en ;
        rdfs:range    [ a            owl:Class ;
                        owl:unionOf  ( sulo:Object sulo:Process )
                      ] .

mod:hasRepresentationLanguage
        a       owl:AnnotationProperty .

foaf:homepage  a  owl:AnnotationProperty .

dcterms:created  a  owl:AnnotationProperty .

sulo:precedes  a      owl:ObjectProperty ;
        rdfs:comment  "A relation in which one process occurs prior to another process."@en ;
        rdfs:domain   sulo:Process ;
        rdfs:label    "precedes" ;
        rdfs:range    sulo:Process .

dcterms:title  a  owl:AnnotationProperty .

[ a            owl:AllDisjointClasses ;
  owl:members  ( sulo:Capability sulo:InformationObject sulo:Quality sulo:Role )
] .

sulo:hasParticipant  a          owl:ObjectProperty ;
        rdfs:comment            "has participant is a relation that describes the participation of a (non-process) thing in a process."@en ;
        rdfs:domain             sulo:Process ;
        rdfs:label              "has participant"@en ;
        rdfs:range              sulo:Object ;
        owl:inverseOf           sulo:isParticipantIn ;
        owl:propertyChainAxiom  ( sulo:hasParticipant [ owl:inverseOf
                          sulo:hasFeature ] ) .

sulo:isDirectPartOf  a      owl:ObjectProperty ;
        rdfs:comment        "is direct part is a non-transitive parthood relation that can be used to specify cardinality constraints between a part and its whole."@en ;
        rdfs:label          "is direct part of"@en ;
        rdfs:subPropertyOf  sulo:isPartOf .

sulo:EndTime  a          owl:Class ;
        rdfs:comment     "an end time is a time instant at the end of a process/time interval."@en ;
        rdfs:label       "end time"@en ;
        rdfs:subClassOf  sulo:TimeInstant .

sulo:isLocatedIn  a          owl:TransitiveProperty , owl:ObjectProperty ;
        rdfs:comment         "A is located in B iff the spatialtemporal region occupied by B is the spatialtemporal region occupied by A."@en ;
        rdfs:label           "is located in"@en ;
        rdfs:subPropertyOf   owl:topObjectProperty ;
        dcterms:alternative  "has location"@en ;
        owl:inverseOf        sulo:isLocationOf .

sulo:Quality  a          owl:Class ;
        rdfs:comment     "the color of an apple, the smoothness of skin, the brightness of a star, the speed of an event"@en , "A quality is a feature that is intrinsically associated with its bearer (or its parts)."@en ;
        rdfs:label       "quality"@en ;
        rdfs:subClassOf  sulo:Feature .

schema:funding  a  owl:AnnotationProperty .

sulo:Feature  a              owl:Class ;
        rdfs:comment         "A feature is any characteristic that stems from the intrisinc structure and/or context"@en ;
        rdfs:label           "feature"@en ;
        rdfs:subClassOf      sulo:Object ;
        rdfs:subClassOf      [ a                  owl:Restriction ;
                               owl:allValuesFrom  sulo:Feature ;
                               owl:onProperty     sulo:hasPart
                             ] ;
        rdfs:subClassOf      [ a                   owl:Restriction ;
                               owl:onProperty      sulo:isFeatureOf ;
                               owl:someValuesFrom  [ a            owl:Class ;
                                                     owl:unionOf  ( sulo:Object sulo:Process )
                                                   ]
                             ] ;
        owl:disjointUnionOf  ( sulo:Capability sulo:InformationObject sulo:Quality sulo:Role ) ;
        owl:disjointWith     sulo:SpatialObject ;
        <http://www.w3.org/2004/02/skos/core#example>
                "the capability to fly, a collection of cards, a measured height of 170cm."@en .

sulo:hasDirectPart  a       owl:ObjectProperty ;
        rdfs:comment        "has direct part is a non-transitive parthood relation that can be used to specify cardinality constraints between a whole and its parts."@en ;
        rdfs:label          "has direct part" ;
        rdfs:subPropertyOf  sulo:hasPart ;
        owl:inverseOf       sulo:isDirectPartOf .

pav:authoredBy  a  owl:AnnotationProperty .

sulo:SpatialObject  a    owl:Class ;
        rdfs:comment     "A spatial object is an object that occupies space"@en ;
        rdfs:label       "spatial object"@en ;
        rdfs:subClassOf  sulo:Object ;
        rdfs:subClassOf  [ a                  owl:Restriction ;
                           owl:allValuesFrom  sulo:SpatialObject ;
                           owl:onProperty     sulo:hasPart
                         ] ;
        <http://www.w3.org/2004/02/skos/core#example>
                "a mountain, a planet, a photon, the lining of the stomach, the cavity of the stomach, the space between mars and earth"@en .

sulo:Duration  a         owl:Class ;
        rdfs:comment     "Duration is a temporal quantity that represents the extent or (non-negative) amount of time that elapses between two temporal points, typically the start and end of a time interval."@en ;
        rdfs:label       "duration"@en ;
        rdfs:subClassOf  sulo:Time ;
        rdfs:subClassOf  [ a                   owl:Restriction ;
                           owl:onProperty      sulo:hasValue ;
                           owl:someValuesFrom  [ a                     rdfs:Datatype ;
                                                 owl:onDatatype        xsd:float ;
                                                 owl:withRestrictions  ( [ xsd:minInclusive
                                                                   "0.0"^^xsd:float ] )
                                               ]
                         ] .

sulo:InformationObject
        a                owl:Class ;
        rdfs:comment     "an information object is a feature that represents, is about, or encodes some information."@en ;
        rdfs:label       "information object"@en ;
        rdfs:subClassOf  sulo:Feature ;
        rdfs:subClassOf  [ a                  owl:Restriction ;
                           owl:allValuesFrom  rdfs:Literal ;
                           owl:onProperty     sulo:hasValue
                         ] ;
        rdfs:subClassOf  [ a                  owl:Restriction ;
                           owl:allValuesFrom  sulo:InformationObject ;
                           owl:onProperty     sulo:hasPart
                         ] .

sulo:atTime  a               owl:ObjectProperty ;
        rdfs:comment         "a relation between any thing and the time in which it occurs at."@en ;
        rdfs:domain          owl:Thing ;
        rdfs:label           "at time"@en ;
        rdfs:range           sulo:Time ;
        dcterms:alternative  "existsAt"@en ;
        owl:inverseOf        sulo:isTimeOf .

sulo:isParticipantIn  a  owl:ObjectProperty ;
        rdfs:comment  "is participant in is a relation to relate an object and the process in which it participates."@en ;
        rdfs:domain   sulo:Object ;
        rdfs:label    "is participant in"@en ;
        rdfs:range    sulo:Process .

xsd:date  a     rdfs:Datatype .

sulo:isLocationOf  a  owl:TransitiveProperty , owl:ObjectProperty ;
        rdfs:comment  "A is location of B iff the spatialtemporal region occupied by A is the spatialtemporal region occupied by B."@en ;
        rdfs:label    "is location of"@en .

sulo:Capability  a       owl:Class ;
        rdfs:comment     "A capability is a feature that describes what an entity is able to do, under some set of circumstances."@en ;
        rdfs:label       "capability" ;
        rdfs:subClassOf  sulo:Feature ;
        <http://www.w3.org/2004/02/skos/core#example>
                "the capability to fly, the capabilty to reduce the activation energy of a chemical reaction, the capability to reason"@en .

sulo:StartTime  a        owl:Class ;
        rdfs:comment     "a start time is a time instant at the beginning of a process/time interval."@en ;
        rdfs:label       "start time"@en ;
        rdfs:subClassOf  sulo:TimeInstant .

sulo:Unit  a             owl:Class ;
        rdfs:comment     "a unit is a standardized quantity that is used as a reference for a particular quantity."@en ;
        rdfs:label       "unit" ;
        rdfs:subClassOf  sulo:Quantity .

sulo:hasValue  a      owl:FunctionalProperty , owl:DatatypeProperty ;
        rdfs:comment  "has value is the (only) data type attribute to store the values of information objects."@en ;
        rdfs:domain   sulo:InformationObject ;
        rdfs:label    "has value"@en .

dcat:accessURL  a  owl:AnnotationProperty .

<http://www.w3.org/2004/02/skos/core#example>
        a       owl:AnnotationProperty .

sulo:TimeInterval  a     owl:Class ;
        rdfs:comment     "A time interval is a quantity for a continuous and bounded extent of time, characterized by a start time and an end time."@en ;
        rdfs:label       "time interval" ;
        rdfs:subClassOf  sulo:Time ;
        rdfs:subClassOf  [ a                  owl:Restriction ;
                           owl:allValuesFrom  xsd:float ;
                           owl:onProperty     sulo:hasValue
                         ] ;
        rdfs:subClassOf  [ a                   owl:Restriction ;
                           owl:onProperty      sulo:hasPart ;
                           owl:someValuesFrom  sulo:Unit
                         ] ;
        rdfs:subClassOf  [ a                   owl:Restriction ;
                           owl:onProperty      sulo:hasPart ;
                           owl:someValuesFrom  sulo:Duration
                         ] ;
        rdfs:subClassOf  [ a                   owl:Restriction ;
                           owl:onProperty      sulo:hasDirectPart ;
                           owl:someValuesFrom  sulo:StartTime
                         ] ;
        rdfs:subClassOf  [ a                   owl:Restriction ;
                           owl:onProperty      sulo:hasDirectPart ;
                           owl:someValuesFrom  sulo:EndTime
                         ] .

sulo:Time  a                 owl:Class ;
        rdfs:comment         "time is a quantity pertaining to the duration of some interval of time or a particular instant of time (against some frame of reference)."@en ;
        rdfs:label           "time"@en ;
        rdfs:subClassOf      sulo:Quantity ;
        owl:disjointUnionOf  ( sulo:Duration sulo:TimeInstant sulo:TimeInterval ) .

dcterms:modified  a  owl:AnnotationProperty .

sulo:refersTo  a      owl:ObjectProperty ;
        rdfs:comment  "refers to is a binary relation between an information object and any other object that it mentions, describes, represents, encodes, or otherwise provides information about."@en ;
        rdfs:domain   sulo:InformationObject ;
        rdfs:label    "refers to"@en ;
        rdfs:range    owl:Thing .

vann:preferredNamespacePrefix
        a       owl:AnnotationProperty .

sulo:hasPart  a             owl:ReflexiveProperty , owl:TransitiveProperty , owl:ObjectProperty ;
        rdfs:comment        "has part is a transitive, reflexive and antisymmetric relation between a whole and itself or a whole and its part." ;
        rdfs:label          "has part"@en ;
        rdfs:subPropertyOf  sulo:isLocationOf ;
        owl:inverseOf       sulo:isPartOf .

sulo:TimeInstant  a      owl:Class ;
        rdfs:comment     "time instant is a quantity of time a particular moment in time."@en ;
        rdfs:label       "time instant"@en ;
        rdfs:subClassOf  sulo:Time ;
        rdfs:subClassOf  [ a                  owl:Restriction ;
                           owl:allValuesFrom  [ a            rdfs:Datatype ;
                                                owl:unionOf  ( xsd:date xsd:dateTime xsd:dateTimeStamp )
                                              ] ;
                           owl:onProperty     sulo:hasValue
                         ] .

dcterms:language  a  owl:AnnotationProperty .

sulo:isPartOf  a            owl:ReflexiveProperty , owl:TransitiveProperty , owl:ObjectProperty ;
        rdfs:comment        "is part of is a transitive, reflexive and antisymmetric relation between a part and itself or a part and a whole."@en ;
        rdfs:label          "is part of"@en ;
        rdfs:subPropertyOf  sulo:isLocatedIn .

sulo:Set  a              owl:Class ;
        rdfs:comment     "A set is an information object for which there may be zero or more items."@en ;
        rdfs:label       "set"@en ;
        rdfs:subClassOf  sulo:InformationObject ;
        rdfs:subClassOf  [ a                  owl:Restriction ;
                           owl:allValuesFrom  owl:Thing ;
                           owl:onProperty     sulo:hasMember
                         ] ;
        <http://www.w3.org/2004/02/skos/core#example>
                "a stamp collection, a murder of crows, the arm of a clinical trial"@en .

mod:prefLabelProperty
        a       owl:AnnotationProperty .

sulo:Object  a            owl:Class ;
        rdfs:comment      "An object is an entity that maintains its identity through time, and does not have processes as its parts." ;
        rdfs:label        "object"@en ;
        rdfs:subClassOf   [ a                  owl:Restriction ;
                            owl:allValuesFrom  sulo:Object ;
                            owl:onProperty     sulo:hasPart
                          ] ;
        rdfs:subClassOf   [ a                 owl:Class ;
                            owl:complementOf  [ a                   owl:Restriction ;
                                                owl:onProperty      sulo:hasPart ;
                                                owl:someValuesFrom  sulo:Process
                                              ]
                          ] ;
        owl:disjointWith  sulo:Process ;
        <http://www.w3.org/2004/02/skos/core#example>
                "a heart, the function to pump blood, the role of a doctor"@en .
