@prefix :      <http://w3id.org/ioc#> .
@prefix owl:   <http://www.w3.org/2002/07/owl#> .
@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix xml:   <http://www.w3.org/XML/1998/namespace> .
@prefix xsd:   <http://www.w3.org/2001/XMLSchema#> .
@prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .

:hasOutputElement  a        owl:AsymmetricProperty , owl:ObjectProperty ;
        rdfs:comment        "Version of an element that the process has transformed" ;
        rdfs:domain         :Process ;
        rdfs:isDefinedBy    : ;
        rdfs:label          "hasOutputElement" ;
        rdfs:range          :ProcessDataState ;
        rdfs:subPropertyOf  :hasProcessDataState .

:ProcessData  a           owl:Class ;
        rdfs:isDefinedBy  : ;
        rdfs:label        <http://w3id.org/ProcessData> .

:isFinished  a            owl:FunctionalProperty , owl:DatatypeProperty ;
        rdfs:comment      "A boolean that describes if the process was finished." ;
        rdfs:domain       :Status ;
        rdfs:isDefinedBy  : ;
        rdfs:label        "isFinished" ;
        rdfs:range        xsd:boolean .

<https://w3id.org/cto#Task>
        a                 owl:Class ;
        rdfs:comment      "A generic class for defining (planned or executed) construction tasks according to the CTO ontology (see https://mathib.github.io/cto-ontology/)" ;
        rdfs:isDefinedBy  <https://w3id.org/cto#> ;
        rdfs:label        <http://w3id.org/Task> ;
        rdfs:subClassOf   :Process .

xsd:dateTime  a  rdfs:Datatype .

[ a            owl:AllDisjointClasses ;
  owl:members  ( :AuxiliaryElement :RawMaterial <https://w3id.org/bot#Element> )
] .

:Information  a          owl:Class ;
        rdfs:comment     "Structured Process Data. This class is meant to be a loose connection to other files and information containers." ;
        rdfs:comment     : ;
        rdfs:label       "Information" ;
        rdfs:subClassOf  :ProcessData .

:Actor  a                 owl:Class ;
        rdfs:comment      "A responsible person or organization. can be assigned to a process" ;
        rdfs:isDefinedBy  : ;
        rdfs:label        "Actor" ;
        rdfs:subClassOf   :ProcessData .

:hasProcessDataState  a   owl:AsymmetricProperty , owl:ObjectProperty ;
        rdfs:comment      "Generalized property to connect a process to a dynamic, version of its process data." ;
        rdfs:domain       :Process ;
        rdfs:isDefinedBy  : ;
        rdfs:label        "hasProcessDataState" ;
        rdfs:range        :ProcessDataState .

:hasSuccessor  a          owl:TransitiveProperty , owl:AsymmetricProperty , owl:ObjectProperty ;
        rdfs:comment      "Logical Successor of a process. The process must be  finished for the sucessor to be ready." ;
        rdfs:domain       :Process ;
        rdfs:isDefinedBy  : ;
        rdfs:label        "hasSuccessor" ;
        rdfs:range        :Process .

:hasLocationValue  a        owl:ObjectProperty ;
        rdfs:comment        "object property to link a specific version of a location  to one or more location instances" ;
        rdfs:domain         :ProcessDataState ;
        rdfs:isDefinedBy    : ;
        rdfs:label          "hasLocationValue" ;
        rdfs:range          :Location ;
        rdfs:subPropertyOf  :hasValue .

:hasResourceValue  a        owl:ObjectProperty ;
        rdfs:comment        "Object property to link a  version of a resource, which is defined as pysical or tangible item, material, equipment or asset that is necessary for the successful execution of a construction process, to instanciated class" ;
        rdfs:domain         :ProcessDataState ;
        rdfs:isDefinedBy    : ;
        rdfs:label          "hasResourceValue" ;
        rdfs:range          :Resource ;
        rdfs:subPropertyOf  :hasValue .

:hasActor  a                owl:AsymmetricProperty , owl:ObjectProperty ;
        rdfs:comment        "A responsible person or organization can be assigned to a process with the object property \"hasActor\" " ;
        rdfs:domain         :Process ;
        rdfs:isDefinedBy    : ;
        rdfs:label          "hasActor" ;
        rdfs:range          :ProcessDataState ;
        rdfs:subPropertyOf  :hasProcessDataState .

:hasInitialSpaceValue
        a                   owl:FunctionalProperty , owl:ObjectProperty ;
        rdfs:comment        "object property to link a specific version of an inistial space to the class describing its exact value" ;
        rdfs:domain         :ProcessDataState ;
        rdfs:isDefinedBy    : ;
        rdfs:label          "hasInitialSpaceValue" ;
        rdfs:range          :Space ;
        rdfs:subPropertyOf  :hasValue .

:isvalid  a               owl:FunctionalProperty , owl:DatatypeProperty ;
        rdfs:comment      "A boolean that describes if a ProcessDataState os considered valid trhough extra validation. WIP" ;
        rdfs:domain       :ProcessDataState ;
        rdfs:isDefinedBy  : ;
        rdfs:label        "isvalid" ;
        rdfs:range        xsd:boolean .

[ a            owl:AllDisjointProperties ;
  owl:members  ( :hasActor :hasCapabilityRequirement :hasInitialSpace :hasInputElement :hasInputInformation :hasMethod :hasOutputElement :hasOutputInformation :hasResource :hasSchedule :hasStatus :hasTargetSpace )
] .

:RawMaterial  a           owl:Class ;
        rdfs:comment      "A basic, unprocessed material that is used to produce goods" ;
        rdfs:isDefinedBy  "http://w3id.org/ioc#" ;
        rdfs:label        "RawMaterial" ;
        rdfs:subClassOf   :Element .

:isReady  a               owl:FunctionalProperty , owl:DatatypeProperty ;
        rdfs:comment      "A boolean that describes if the process is ready to start." ;
        rdfs:domain       :Status ;
        rdfs:isDefinedBy  : ;
        rdfs:label        "isReady" ;
        rdfs:range        xsd:boolean .

<https://standards.buildingsmart.org/IFC/DEV/IFC4/ADD2_TC1/OWL#IfcSpace>
        a                 owl:Class ;
        rdfs:comment      "A space represents an area or volume bounded actually or theoretically. Spaces are areas or volumes that provide for certain functions within a building" ;
        rdfs:isDefinedBy  <https://standards.buildingsmart.org/IFC/DEV/IFC4/ADD2_TC1/OWL#> ;
        rdfs:label        "IfcSpace" ;
        rdfs:subClassOf   :Space .

:isCancelled  a           owl:FunctionalProperty , owl:DatatypeProperty ;
        rdfs:comment      "A boolean that describes if the process was canceled." ;
        rdfs:domain       :Status ;
        rdfs:isDefinedBy  : ;
        rdfs:label        "isCancelled" ;
        rdfs:range        xsd:boolean .

:hasInputInformationValue
        a                   owl:ObjectProperty ;
        rdfs:comment        "object property to link a specific version of an piece of input information to one or more pieces of information" ;
        rdfs:domain         :ProcessDataState ;
        rdfs:isDefinedBy    : ;
        rdfs:label          "hasInputInformationValue" ;
        rdfs:range          :Information ;
        rdfs:subPropertyOf  :hasValue .

:hasTargetSpaceValue  a     owl:FunctionalProperty , owl:ObjectProperty ;
        rdfs:comment        "Property to add a isingle instance to a version of an output space, thus defining the transformed location or space of the process" ;
        rdfs:domain         :ProcessDataState ;
        rdfs:isDefinedBy    : ;
        rdfs:label          "hasTargetSpaceValue" ;
        rdfs:range          :Space ;
        rdfs:subPropertyOf  :hasValue .

:isContainedInValue  a      owl:ObjectProperty ;
        rdfs:comment        "Object Property to describe the containment of Locations, Resources or Elements in Spatial Zones from version to instance" ;
        rdfs:domain         :ProcessDataState ;
        rdfs:isDefinedBy    : ;
        rdfs:label          "isContainedInValue" ;
        rdfs:range          [ a            owl:Class ;
                              owl:unionOf  ( <https://standards.buildingsmart.org/IFC/DEV/IFC4/ADD2_TC1/OWL#IfcSpace> <https://w3id.org/bot#Zone> )
                            ] ;
        rdfs:subPropertyOf  :hasValue .

:hasInputElement  a         owl:AsymmetricProperty , owl:ObjectProperty ;
        rdfs:comment        "Version of an element that the process transforms" ;
        rdfs:domain         :Process ;
        rdfs:isDefinedBy    : ;
        rdfs:label          "hasInputElement" ;
        rdfs:range          :ProcessDataState ;
        rdfs:subPropertyOf  :hasProcessDataState .

<http://purl.org/vocab/vann/preferredNamespacePrefix>
        a       owl:AnnotationProperty .

:hasLocation  a           owl:AsymmetricProperty , owl:FunctionalProperty , owl:ObjectProperty ;
        rdfs:comment      "Property to connect a element, resource or spatial zone." ;
        rdfs:domain       [ a            owl:Class ;
                            owl:unionOf  ( :Element :Resource <https://standards.buildingsmart.org/IFC/DEV/IFC4/ADD2_TC1/OWL#IfcSpace> <https://w3id.org/bot#Zone> )
                          ] ;
        rdfs:isDefinedBy  : ;
        rdfs:label        "hasLocation" ;
        rdfs:range        :ProcessDataState .

<http://schema.org/rangeIncludes>
        a       owl:AnnotationProperty .

<http://www.w3.org/2006/vcard/ns#organization-name>
        a       owl:AnnotationProperty .

:ProcessDataState  a      owl:Class ;
        rdfs:comment      "Intermediate Node which helps to add metadata to the object property connecting the Process to its sepcific ProcessData" ;
        rdfs:isDefinedBy  : ;
        rdfs:label        "ProcessDataState" ;
        rdfs:subClassOf   [ a                            owl:Restriction ;
                            owl:maxQualifiedCardinality  "1"^^xsd:nonNegativeInteger ;
                            owl:onClass                  :Space ;
                            owl:onProperty               :hasTargetSpaceValue
                          ] ;
        rdfs:subClassOf   [ a                            owl:Restriction ;
                            owl:maxQualifiedCardinality  "1"^^xsd:nonNegativeInteger ;
                            owl:onClass                  :Status ;
                            owl:onProperty               :hasStatusValue
                          ] ;
        rdfs:subClassOf   [ a                            owl:Restriction ;
                            owl:maxQualifiedCardinality  "1"^^xsd:nonNegativeInteger ;
                            owl:onClass                  :Schedule ;
                            owl:onProperty               :hasScheduleValue
                          ] ;
        rdfs:subClassOf   [ a                            owl:Restriction ;
                            owl:maxQualifiedCardinality  "1"^^xsd:nonNegativeInteger ;
                            owl:onClass                  :Location ;
                            owl:onProperty               :hasLocationValue
                          ] ;
        rdfs:subClassOf   [ a                            owl:Restriction ;
                            owl:maxQualifiedCardinality  "1"^^xsd:nonNegativeInteger ;
                            owl:onClass                  :Space ;
                            owl:onProperty               :hasInitialSpaceValue
                          ] .

[ a            owl:AllDisjointProperties ;
  owl:members  ( :hasActorValue :hasCapabilityRequirementValue :hasCapabilityValue :hasElementValue :hasInitialSpaceValue :hasInputElementValue :hasInputInformationValue :hasLocationValue :hasMethodValue :hasOutputElementValue :hasOutputInformationValue :hasResourceValue :hasScheduleValue :hasStatusValue :hasTargetSpaceValue :isContainedInValue )
] .

:isPaused  a              owl:FunctionalProperty , owl:DatatypeProperty ;
        rdfs:comment      "A boolean that describes if the process is canceled." ;
        rdfs:domain       :Status ;
        rdfs:isDefinedBy  : ;
        rdfs:label        "isPaused" ;
        rdfs:range        xsd:boolean .

:hasResource  a             owl:AsymmetricProperty , owl:ObjectProperty ;
        rdfs:comment        "Object property to link a resource, which is defined as pysical or tangible item, material, equipment or asset that is necessary for the successful execution of a construction process." ;
        rdfs:domain         :Process ;
        rdfs:isDefinedBy    : ;
        rdfs:label          "hasResource" ;
        rdfs:range          :ProcessDataState ;
        rdfs:subPropertyOf  :hasProcessDataState .

<http://purl.org/vocab/vann/preferredNamespaceUri>
        a       owl:AnnotationProperty .

:Resource  a              owl:Class ;
        rdfs:comment      "refers to any physical or tangible item, material, equipment or asset that is necessary for the successful execution of a construction process." ;
        rdfs:isDefinedBy  : ;
        rdfs:label        "Resource" ;
        rdfs:subClassOf   :ProcessData .

:hasTargetSpace  a          owl:AsymmetricProperty , owl:ObjectProperty ;
        rdfs:comment        "Property to add a version of an output space, thus defining the transformed location or space of the process" ;
        rdfs:domain         :Process ;
        rdfs:isDefinedBy    : ;
        rdfs:label          "hasTargetSpace" ;
        rdfs:range          :ProcessDataState ;
        rdfs:subPropertyOf  :hasProcessDataState .

<http://www.w3.org/2006/vcard/ns#hasURL>
        a       owl:AnnotationProperty .

:hasParent  a             owl:TransitiveProperty , owl:AsymmetricProperty , owl:FunctionalProperty , owl:ObjectProperty ;
        rdfs:comment      "Parent of a Process. A Process can at most have one parent." ;
        rdfs:domain       :Process ;
        rdfs:isDefinedBy  : ;
        rdfs:label        "hasParent" ;
        rdfs:range        :Process .

<http://www.w3.org/2006/vcard/ns#family-name>
        a       owl:AnnotationProperty .

<http://www.w3.org/ns/prov#startedAtTime>
        a                 owl:FunctionalProperty , owl:DatatypeProperty ;
        rdfs:comment      "Start is when an activity is deemed to have been started by an entity, known as trigger. The activity did not exist before its start. Any usage, generation, or invalidation involving an activity follows the activity's start. A start may refer to a trigger entity that set off the activity, or to an activity, known as starter, that generated the trigger." ;
        rdfs:domain       :Schedule ;
        rdfs:isDefinedBy  <http://www.w3.org/ns/prov#> ;
        rdfs:label        "startedAtTime" ;
        rdfs:range        xsd:dateTime .

:hasDuration  a           owl:FunctionalProperty , owl:DatatypeProperty ;
        rdfs:comment      "Duration of a Process Schedule" ;
        rdfs:domain       :Schedule ;
        rdfs:isDefinedBy  : ;
        rdfs:label        <http://w3id.org/hasDuration> ;
        rdfs:range        rdfs:Literal .

:hasInputInformation  a     owl:AsymmetricProperty , owl:ObjectProperty ;
        rdfs:comment        "Property for connecting a version of a piece of information or a infromation container to a process" ;
        rdfs:domain         :Process ;
        rdfs:isDefinedBy    : ;
        rdfs:label          "hasInputInformation" ;
        rdfs:range          :ProcessDataState ;
        rdfs:subPropertyOf  :hasProcessDataState .

:hasElement  a            owl:AsymmetricProperty , owl:ObjectProperty ;
        rdfs:comment      "Points to a version of an element grouping" ;
        rdfs:domain       :Element ;
        rdfs:isDefinedBy  : ;
        rdfs:label        "hasElement" ;
        rdfs:range        :ProcessDataState .

:hasStatusValue  a          owl:FunctionalProperty , owl:ObjectProperty ;
        rdfs:comment        "Object property to connect a version of a condition or state of the process to a single, instanciated status. It is descirbed with a combination of bools." ;
        rdfs:domain         :ProcessDataState ;
        rdfs:isDefinedBy    : ;
        rdfs:label          "hasStatusValue" ;
        rdfs:range          :Status ;
        rdfs:subPropertyOf  :hasValue .

:hasInitialSpace  a         owl:AsymmetricProperty , owl:ObjectProperty ;
        rdfs:comment        "Property to add a version of a initial space, which defines the input of a location or space which the process requires" ;
        rdfs:domain         :Process ;
        rdfs:isDefinedBy    : ;
        rdfs:label          "hasInitialSpace" ;
        rdfs:range          :ProcessDataState ;
        rdfs:subPropertyOf  :hasProcessDataState .

:generatedByActor  a      owl:InverseFunctionalProperty , owl:ObjectProperty ;
        rdfs:comment      "The ioc:Actor that generated the information branch" ;
        rdfs:domain       :ProcessDataState ;
        rdfs:isDefinedBy  : ;
        rdfs:label        "generatedByActor" ;
        rdfs:range        :Actor .

<http://w3id.org/ioc>
        a                owl:Ontology ;
        rdfs:comment     "The Internet of Construction Ontology (IoC) is a top-level ontology for describing processes and process-data in the domain of construction. It is a ongoing work as part of the research project “Internet of Construction” that is funded by the Federal Ministry of Education and Research of Germany within the indirective on a joint funding initiative in the field of innovation for production, services and labor of tomorrow (funding number: 02P17D081)."@en ;
        <http://purl.org/dc/terms/creator>
                "Wildemann,P., Leonhard Weiss GmbH & Co. KG"@en , "Kirner, L., Individualized Production RWTH Aachen"@en , "Oraskari, J., Individualized Production RWTH Aachen" ;
        <http://purl.org/dc/terms/description>
                "The Internet of Construction Ontology (IoC) construction process ontology is intended to represent a comprehensive solution of how processes in the construction industry can be modelled. Due to the iterative nature of creating an ontology, the construction process ontology presented here can at best be considered a working state at the time of publication. Our approach emphasizes the simplest and most comprehensive mapping possible, which is only extended based on insights from practical use when otherwise compelling limitations in usability and applicability arise. Thus, the extension and refinement of the developed construction process ontology strongly depends on the integration of further areas of the construction value chain and the connection of further domain ontologies."@en ;
        <http://purl.org/dc/terms/issued>
                "2024-01-26"@en ;
        <http://purl.org/dc/terms/title>
                "IOC: Internet of Construction Ontology"@en ;
        <http://purl.org/vocab/vann/preferredNamespacePrefix>
                "ioc" ;
        <http://purl.org/vocab/vann/preferredNamespaceUri>
                "http://w3id.org/ioc#" ;
        owl:versionInfo  "0.5.1" .

<https://w3id.org/bot#Element>
        a                 owl:Class ;
        rdfs:comment      "Element - Constituent of a construction entity with a characteristic technical function, form or position [[ISO-12006], 3.4.7]." ;
        rdfs:isDefinedBy  <http://w3id.org/https.//w3id.org/bot#> ;
        rdfs:label        "Element" ;
        rdfs:subClassOf   :Element .

:Status  a                owl:Class ;
        rdfs:comment      "Status refers to the current conditionor state of the process. It is descirbed with a combination of bools." ;
        rdfs:isDefinedBy  : ;
        rdfs:label        "Status" ;
        rdfs:subClassOf   :ProcessData .

:hasScheduleValue  a        owl:FunctionalProperty , owl:ObjectProperty ;
        rdfs:comment        "Object property to connect a version of a detailed and organized plan that outlines the sequence and timing of tasks, activities, and events required to complete a specific proces to a instanciated Schedule" ;
        rdfs:domain         :ProcessDataState ;
        rdfs:isDefinedBy    : ;
        rdfs:label          "hasScheduleValue" ;
        rdfs:range          :Schedule ;
        rdfs:subPropertyOf  :hasValue .

:hasStatus  a               owl:AsymmetricProperty , owl:ObjectProperty ;
        rdfs:comment        "Object property to connect a version of a condition or state of the process. It is descirbed with a combination of bools." ;
        rdfs:domain         :Process ;
        rdfs:isDefinedBy    : ;
        rdfs:label          "hasStatus" ;
        rdfs:range          :ProcessDataState ;
        rdfs:subPropertyOf  :hasProcessDataState .

<https://w3id.org/cto#TaskMethod>
        a                 owl:Class ;
        rdfs:comment      "CTO task method that is used in (L2) and (L3)" ;
        rdfs:isDefinedBy  <http://w3id.org/cto#> ;
        rdfs:label        "TaskMethod" ;
        rdfs:subClassOf   :Method .

<http://purl.org/dc/terms/title>
        a       owl:AnnotationProperty .

<https://w3id.org/bot#Zone>
        a                 owl:Class ;
        rdfs:comment      "A part of the physical world or a virtual world that is inherently both located in this world and has a 3D spatial extent." ;
        rdfs:isDefinedBy  <http://w3id.org/bot#> ;
        rdfs:label        "Zone" ;
        rdfs:subClassOf   :Space .

:hasInternalProcessMark
        a                 owl:FunctionalProperty , owl:DatatypeProperty ;
        rdfs:comment      "A optional, internal process mark that can be used to add custom functionality to the process model" ;
        rdfs:domain       :Process ;
        rdfs:isDefinedBy  : ;
        rdfs:label        "hasInternalProcessMark" ;
        rdfs:range        xsd:string .

<http://www.w3.org/ns/prov#endedAtTime>
        a                 owl:FunctionalProperty , owl:DatatypeProperty ;
        rdfs:comment      "End is when an activity is deemed to have been ended by an entity, known as trigger. The activity no longer exists after its end. Any usage, generation, or invalidation involving an activity precedes the activity's end. An end may refer to a trigger entity that terminated the activity, or to an activity, known as ender that generated the trigger." ;
        rdfs:domain       :Schedule ;
        rdfs:isDefinedBy  <http://www.w3.org/ns/prov#> ;
        rdfs:label        "endedAtTime" ;
        rdfs:range        xsd:dateTime .

[ a            owl:AllDisjointClasses ;
  owl:members  ( :Location <https://standards.buildingsmart.org/IFC/DEV/IFC4/ADD2_TC1/OWL#IfcSpace> <https://w3id.org/bot#Zone> )
] .

<http://www.w3.org/2006/vcard/ns#hasOrganizationName>
        a       owl:AnnotationProperty .

:hasCapability  a         owl:AsymmetricProperty , owl:ObjectProperty ;
        rdfs:comment      "The version of a capability a resource inherits" ;
        rdfs:domain       :Resource ;
        rdfs:isDefinedBy  : ;
        rdfs:label        "hasCapability" ;
        rdfs:range        :ProcessDataState .

:Process  a               owl:Class ;
        rdfs:comment      "The generic class process serves as the central element of the construction process ontology. It can represent a classical process or a subfield common in some definitions such as an activity or a task. Due to the problem of the subjectivity of classifications of the term, no further distinction will be made here." ;
        rdfs:isDefinedBy  : ;
        rdfs:label        "Process" .

:hasCapabilityValue  a      owl:ObjectProperty ;
        rdfs:comment        "object property to link a specific version of an capability of a resource  to one or more capabilities" ;
        rdfs:domain         :ProcessDataState ;
        rdfs:isDefinedBy    : ;
        rdfs:label          "hasCapabilityValue" ;
        rdfs:range          :Capability ;
        rdfs:subPropertyOf  :hasValue .

:hasPredecessor  a        owl:TransitiveProperty , owl:AsymmetricProperty , owl:ObjectProperty ;
        rdfs:comment      "Logical Predecessor of a process. Must be finished for the process to be ready." ;
        rdfs:domain       :Process ;
        rdfs:isDefinedBy  : ;
        rdfs:label        "hasPredecessor" ;
        rdfs:range        :Process ;
        owl:inverseOf     :hasSuccessor .

<http://www.w3.org/2006/vcard/ns#given-name>
        a       owl:AnnotationProperty .

:Method  a                owl:Class ;
        rdfs:comment      "The Method that is used to perform the process described. Used as Interface to mor specific domain ontologies." ;
        rdfs:isDefinedBy  <http://w3id.org/ioc> ;
        rdfs:label        "Method" ;
        rdfs:subClassOf   :ProcessData .

:hasMethod  a               owl:AsymmetricProperty , owl:ObjectProperty ;
        rdfs:comment        "Property for connecting a version of a Method. Method can describe an uninstanciated process in general, like \"milling\" or \"fixing\"" ;
        rdfs:domain         :Process ;
        rdfs:isDefinedBy    : ;
        rdfs:label          "hasMethod" ;
        rdfs:range          :ProcessDataState ;
        rdfs:subPropertyOf  :hasProcessDataState .

:isContainedIn  a         owl:AsymmetricProperty , owl:InverseFunctionalProperty , owl:ObjectProperty ;
        rdfs:comment      "Object Property to describe the containment of Locations, Resources or Elements in Spatial Zones" ;
        rdfs:domain       [ a            owl:Class ;
                            owl:unionOf  ( :Location :Resource <https://w3id.org/bot#Element> )
                          ] ;
        rdfs:isDefinedBy  : ;
        rdfs:label        "isContainedIn" ;
        rdfs:range        :ProcessDataState .

<http://purl.org/dc/terms/creator>
        a       owl:AnnotationProperty .

<http://www.w3.org/2006/vcard/ns#fn>
        a       owl:AnnotationProperty .

:Element  a               owl:Class ;
        rdfs:comment      "A element or a group of elements." ;
        rdfs:isDefinedBy  : ;
        rdfs:label        "Element" ;
        rdfs:subClassOf   :ProcessData .

<https://w3id.org/omg#Geometry>
        a                 owl:Class ;
        rdfs:comment      "Geometry of an element.Use https://w3id.org/fog# for Geometry Formats." ;
        rdfs:isDefinedBy  : ;
        rdfs:label        "Geometry" .

:hasOutputInformationValue
        a                   owl:ObjectProperty ;
        rdfs:comment        "object property to link a specific version of an piece of output information to one or more pieces of information" ;
        rdfs:domain         :ProcessDataState ;
        rdfs:isDefinedBy    : ;
        rdfs:label          "hasOutputInformationValue" ;
        rdfs:range          :Information ;
        rdfs:subPropertyOf  :hasValue .

:hasCapabilityRequirement
        a                   owl:AsymmetricProperty , owl:ObjectProperty ;
        rdfs:comment        "Property for adding a version of a capability requirement to a process" ;
        rdfs:domain         :Process ;
        rdfs:isDefinedBy    : ;
        rdfs:label          "hasCapabilityRequirement" ;
        rdfs:range          :ProcessDataState ;
        rdfs:subPropertyOf  :hasProcessDataState .

:hasMethodValue  a          owl:ObjectProperty ;
        rdfs:comment        "object property to link a specific version of a method  to one or more instanciated Methods" ;
        rdfs:domain         :ProcessDataState ;
        rdfs:isDefinedBy    : ;
        rdfs:label          "hasMethodValue" ;
        rdfs:range          :Method ;
        rdfs:subPropertyOf  :hasValue .

:hasChild  a              owl:TransitiveProperty , owl:ObjectProperty , owl:AsymmetricProperty , owl:InverseFunctionalProperty ;
        rdfs:comment      "Child process of a process. A process can have a undeifned number of children" ;
        rdfs:domain       :Process ;
        rdfs:isDefinedBy  : ;
        rdfs:label        "hasChild" ;
        rdfs:range        :Process ;
        owl:inverseOf     :hasParent .

<http://purl.org/dc/terms/description>
        a       owl:AnnotationProperty .

[ a            owl:AllDisjointClasses ;
  owl:members  ( :Actor :Capability :Element :Information :Method :Resource :Schedule :Space :Status )
] .

<http://schema.org/domainIncludes>
        a       owl:AnnotationProperty .

:hasSchedule  a             owl:AsymmetricProperty , owl:ObjectProperty ;
        rdfs:comment        "Object property to connect  a detailed and organized plan that outlines the sequence and timing of tasks, activities, and events required to complete a specific process." ;
        rdfs:domain         :Process ;
        rdfs:isDefinedBy    : ;
        rdfs:label          "hasSchedule" ;
        rdfs:range          :ProcessDataState ;
        rdfs:subPropertyOf  :hasProcessDataState .

:Schedule  a              owl:Class ;
        rdfs:comment      "A process schedule is a detailed and organized plan that outlines the sequence and timing of tasks, activities, and events required to complete a specific process." ;
        rdfs:isDefinedBy  : ;
        rdfs:label        "Schedule" ;
        rdfs:subClassOf   :ProcessData .

:CurrentProcessDataState
        a                 owl:Class ;
        rdfs:comment      "The current Intermediate Node which helps to add metadata to the object property connecting the Process to its sepcific ProcessData. Functionality adapted form opm ontology." ;
        rdfs:isDefinedBy  : ;
        rdfs:label        "CurrentProcessDataState" ;
        rdfs:subClassOf   :ProcessDataState .

:hasInputElementValue
        a                   owl:ObjectProperty ;
        rdfs:comment        "Property for linking a version of an element that the process transforms to the speciffic element classes." ;
        rdfs:domain         :ProcessDataState ;
        rdfs:isDefinedBy    : ;
        rdfs:label          "hasInputElementValue" ;
        rdfs:range          :Element ;
        rdfs:subPropertyOf  :hasValue .

:hasCapabilityRequirementValue
        a                   owl:ObjectProperty ;
        rdfs:comment        "object property to link a specific version of an capability requirement  to one or more capabilities describring a process requirement" ;
        rdfs:domain         :ProcessDataState ;
        rdfs:isDefinedBy    : ;
        rdfs:label          "hasCapabilityRequirementValue" ;
        rdfs:range          :Capability ;
        rdfs:subPropertyOf  :hasValue .

:AuxiliaryElement  a      owl:Class ;
        rdfs:comment      "A secondary element that is not part of the realized building afterwards." ;
        rdfs:isDefinedBy  <http://w3id.org/ioc> ;
        rdfs:label        "AuxiliaryElement" ;
        rdfs:subClassOf   :Element .

:hasElementValue  a         owl:ObjectProperty ;
        rdfs:comment        "object property to link a specific version of an Element  to one or more elements" ;
        rdfs:domain         :ProcessDataState ;
        rdfs:isDefinedBy    : ;
        rdfs:label          "hasElementValue" ;
        rdfs:range          :Element ;
        rdfs:subPropertyOf  :hasValue .

:Location  a              owl:Class ;
        rdfs:comment      "A location in the sense of a describable,precise point in space" ;
        rdfs:isDefinedBy  : ;
        rdfs:label        "Location" ;
        rdfs:subClassOf   :Space .

:hasActorValue  a           owl:FunctionalProperty , owl:ObjectProperty ;
        rdfs:comment        "object property to link a specific version of an actor links to the process actor." ;
        rdfs:domain         :ProcessDataState ;
        rdfs:isDefinedBy    : ;
        rdfs:label          "hasActorValue" ;
        rdfs:range          :Actor ;
        rdfs:subPropertyOf  :hasValue .

<https://w3id.org/omg#hasGeometry>
        a                 owl:InverseFunctionalProperty , owl:ObjectProperty ;
        rdfs:comment      "Property for connecting geometries to elements, resources or spatial zones" ;
        rdfs:domain       [ a            owl:Class ;
                            owl:unionOf  ( :Element :Resource <https://standards.buildingsmart.org/IFC/DEV/IFC4/ADD2_TC1/OWL#IfcSpace> <https://w3id.org/bot#Zone> )
                          ] ;
        rdfs:isDefinedBy  : ;
        rdfs:label        "hasGeometry" ;
        rdfs:range        <https://w3id.org/omg#Geometry> .

:Capability  a            owl:Class ;
        rdfs:comment      "Refers to the ability or capacity of an individual, organization, system, or entity to perform a specific action, task, or function effectively." ;
        rdfs:isDefinedBy  : ;
        rdfs:label        "Capability" ;
        rdfs:subClassOf   :ProcessData .

:hasOutputElementValue
        a                   owl:ObjectProperty ;
        rdfs:comment        "Property for linking a version of an element that the process has transformed to the speciffic element classes." ;
        rdfs:domain         :ProcessDataState ;
        rdfs:isDefinedBy    : ;
        rdfs:label          "hasOutputElementValue" ;
        rdfs:range          :Element ;
        rdfs:subPropertyOf  :hasValue .

<https://schema.org/name>
        a       owl:AnnotationProperty .

:Space  a                 owl:Class ;
        rdfs:comment      "Generic Superclass for Spatial Information" ;
        rdfs:isDefinedBy  : ;
        rdfs:label        "Space" ;
        rdfs:subClassOf   :ProcessData .

<http://purl.org/dc/terms/issued>
        a       owl:AnnotationProperty .

:isStarted  a             owl:FunctionalProperty , owl:DatatypeProperty ;
        rdfs:comment      "A boolean that describes if the process was started." ;
        rdfs:domain       :Status ;
        rdfs:isDefinedBy  : ;
        rdfs:label        "isStarted" ;
        rdfs:range        xsd:boolean .

xsd:duration  a  rdfs:Datatype .

:hasValue  a              owl:FunctionalProperty , owl:ObjectProperty ;
        rdfs:comment      "Generic Property to connect ProcessDataStates, which can be versioned, to the actual classes that describe ProcessData." ;
        rdfs:domain       :ProcessDataState ;
        rdfs:isDefinedBy  : ;
        rdfs:label        "hasValue" ;
        rdfs:range        :ProcessData .

<http://www.w3.org/ns/prov#generatedAtTime>
        a                 owl:FunctionalProperty , owl:DatatypeProperty ;
        rdfs:comment      "Generation is the completion of production of a new entity by an activity. This entity did not exist before generation and becomes available for usage after this generation." ;
        rdfs:domain       :ProcessDataState ;
        rdfs:isDefinedBy  <http://www.w3.org/ns/prov#> ;
        rdfs:label        "generatedAtTime" ;
        rdfs:range        xsd:dateTime .

<http://www.w3.org/2006/vcard/ns#Vcard>
        a                 owl:Class ;
        rdfs:comment      "parent for the four explicit types of vCards (Individual, Organization, Location, Group)" ;
        rdfs:isDefinedBy  <http://www.w3.org/2006/vcard/ns#> ;
        rdfs:label        "vCard" ;
        rdfs:subClassOf   :Actor .

:hasOutputInformation
        a                   owl:AsymmetricProperty , owl:ObjectProperty ;
        rdfs:comment        "Property for connecting a version of a piece of information or a infromation container to a process which was transformed by the process" ;
        rdfs:domain         :Process ;
        rdfs:isDefinedBy    : ;
        rdfs:label          "hasOutputInformation" ;
        rdfs:range          :ProcessDataState ;
        rdfs:subPropertyOf  :hasProcessDataState .
