@prefix : <http://w3id.org/CEON/demo/construction/> .
@prefix actorODP: <http://w3id.org/CEON/ontology/actorODP/> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix material: <http://w3id.org/CEON/ontology/material/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix product: <http://w3id.org/CEON/ontology/product/> .
@prefix quantity: <http://w3id.org/CEON/ontology/quantity#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix vann: <http://purl.org/vocab/vann/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

dcterms:issued a owl:AnnotationProperty .

dcterms:publisher a owl:AnnotationProperty .

: a owl:Ontology ;
    dcterms:contributor "Eva Blomqvist",
        "Huanyu Li",
        "Mikael Lindecrantz" ;
    dcterms:created "2023-09-14"^^xsd:date ;
    dcterms:creator "Robin Keskisärkkä" ;
    dcterms:description "The Product module of CEON (Circular Economy Ontology Network)." ;
    dcterms:issued "2025-06-30"^^xsd:date ;
    dcterms:license "https://creativecommons.org/licenses/by/4.0/" ;
    dcterms:publisher "Onto-DESIDE" ;
    dcterms:title "Circular Economy Ontology Network (CEON) - Construction Module" ;
    vann:preferredNamespacePrefix "ceon-demo-construction" ;
    vann:preferredNamespaceUri "http://w3id.org/CEON/demo/construction/" ;
    rdfs:seeAlso <https://github.com/LiUSemWeb/CEON> ;
    owl:imports <http://w3id.org/CEON/ontology/actor/0.4/>,
        <http://w3id.org/CEON/ontology/datasheet/0.3/>,
        <http://w3id.org/CEON/ontology/material/0.4/>,
        <http://w3id.org/CEON/ontology/product/0.5/>,
        <http://w3id.org/CEON/ontology/quantity/0.2/>,
        <http://w3id.org/CEON/ontology/qudt/0.1/> ;
    owl:priorVersion 0.1 ;
    owl:versionIRI <http://w3id.org/CEON/demo/construction/0.2/> ;
    owl:versionInfo 0.2 .

:F30 a :FireResistanceRating,
        owl:NamedIndividual ;
    rdfs:label "F30" ;
    rdfs:comment "F30 represents a fire resitance duration of 30 min." .

:F60 a :FireResistanceRating,
        owl:NamedIndividual ;
    rdfs:comment "F60",
        "F60 represents a fire resitance duration of 60 min." .

:FireResistanceRelation a owl:Class ;
    rdfs:subClassOf actorODP:ResourceParticipation .

:FloorTile a owl:Class ;
    rdfs:label "Floor tile" ;
    rdfs:comment "A floor tile is a type of product that used to cover a floor." ;
    rdfs:subClassOf product:Product .

:FloorTileConditionRelation a owl:Class ;
    rdfs:subClassOf actorODP:ResourceParticipation .

:GalvanizedSteelMaterial a owl:Class ;
    rdfs:subClassOf material:Material .

:associatedProcessForLCA a owl:ObjectProperty ;
    rdfs:label "associated process for LCA" ;
    rdfs:comment "A process associated with LCA assessment." .

:bad_condition a :FloorTileCondition,
        owl:NamedIndividual ;
    rdfs:label "bad condition" .

:constructionYear a owl:DatatypeProperty ;
    rdfs:label "construction year" ;
    rdfs:comment "the year a certain object was constructed" ;
    rdfs:range xsd:gYear ;
    rdfs:subPropertyOf owl:topDataProperty .

:defineResourceCondition a owl:ObjectProperty ;
    rdfs:label "define resource condition" ;
    rdfs:comment "The resource condition is defined by an actor." ;
    rdfs:domain actorODP:Actor ;
    rdfs:range :Condition .

:defineResourceQuality a owl:ObjectProperty ;
    rdfs:label "define resource quality" ;
    rdfs:comment "The resource qualitity is defined by an actor." ;
    rdfs:domain actorODP:Actor ;
    rdfs:range :ProductQuality .

:good_condition a :FloorTileCondition,
        owl:NamedIndividual ;
    rdfs:label "good condition" .

:hasAccessories a owl:DatatypeProperty ;
    rdfs:label "has accessories" ;
    rdfs:comment "hasAccessories is used to provide a text representation of the accessories related to a product or product object." ;
    rdfs:domain [ a owl:Class ;
            owl:unionOf ( product:Item product:Product ) ] ;
    rdfs:range xsd:string .

:hasCondition a owl:ObjectProperty ;
    rdfs:label "has condition" ;
    rdfs:comment "hasCondition is used to describe the condiction of a specific product object." ;
    rdfs:domain [ a owl:Class ;
            owl:unionOf ( product:Item product:Product ) ] ;
    rdfs:range :Condition ;
    rdfs:subPropertyOf owl:topObjectProperty .

:hasContaminant a owl:ObjectProperty ;
    rdfs:label "has contaminant" ;
    rdfs:comment "hasContaminant is used to express the presence of contaminants in a product or product object." ;
    rdfs:domain product:Product ;
    rdfs:range :Contaminant .

:hasDimensionalDeviation a owl:ObjectProperty ;
    rdfs:label "has dimensional deviation" ;
    rdfs:comment "hasDimensionalDeviation is used to describe the dimensional deviation class of a product." ;
    rdfs:domain product:Product ;
    rdfs:range :DimensionalDeviation ;
    rdfs:subPropertyOf owl:topObjectProperty .

:hasDismantlingInstruction a owl:DatatypeProperty ;
    rdfs:label "has dismantling instructions" ;
    rdfs:comment "link to dismantling instructions" ;
    rdfs:range xsd:anyURI ;
    rdfs:subPropertyOf owl:topDataProperty .

:hasDismantlingMethod a owl:DatatypeProperty ;
    rdfs:label "has dismantling method" ;
    rdfs:comment "hasDismantlingMethod is used to represent a textual description of the dismantling method for a product or product object." ;
    rdfs:domain [ a owl:Class ;
            owl:unionOf ( product:Item product:Product ) ] ;
    rdfs:range xsd:string ;
    rdfs:subPropertyOf owl:topDataProperty .

:hasDistanceToRecyclingPlant a owl:ObjectProperty ;
    rdfs:subPropertyOf <http://qudt.org/schema/qudt/quantityValue> .

:hasFireResistanceRating a owl:ObjectProperty ;
    rdfs:label "has frire resistance rating" ;
    rdfs:comment "hasFireResistanceRating is used to represent the fire resistance rating of a product or product object." ;
    rdfs:domain [ a owl:Class ;
            owl:unionOf ( product:Item product:Product ) ] ;
    rdfs:range :FireResistanceRating ;
    rdfs:subPropertyOf owl:topObjectProperty .

:hasHeight a owl:ObjectProperty ;
    rdfs:label "has height" ;
    rdfs:comment "hasHeight is used to describe the height of a product or product object." ;
    rdfs:subPropertyOf :hasDimension .

:hasInstallationDate a owl:DatatypeProperty ;
    rdfs:label "has installation date" ;
    rdfs:comment "hasInstallationDate is used to represent the installation date of a specific product object." ;
    rdfs:domain product:Item ;
    rdfs:range xsd:date ;
    rdfs:subPropertyOf owl:topDataProperty .

:hasMarketValueForNewProduct a owl:ObjectProperty ;
    rdfs:label "has market value for new product" ;
    rdfs:comment "hasMarketValueForNewProduct is used to describe the market value of a new product." ;
    rdfs:domain product:Product ;
    rdfs:subPropertyOf quantity:hasMarketValue .

:hasMarketValueForReusedProduct a owl:ObjectProperty ;
    rdfs:label "has market value for reused product" ;
    rdfs:comment "hasMarketValueForReusedProduct is used to describe the market value of a used product." ;
    rdfs:domain product:Product ;
    rdfs:subPropertyOf quantity:hasMarketValue .

:hasPackagingRecommendationsAfterDismantling a owl:DatatypeProperty ;
    rdfs:label "has packaging recommendations after dismantling" ;
    rdfs:comment "hasPackagingRecommendationsAfterDismantling is used to represent a textual description of the packaging recommendations after a product or product object has been dismantled." ;
    rdfs:domain [ a owl:Class ;
            owl:unionOf ( product:Item product:Product ) ] ;
    rdfs:range xsd:string ;
    rdfs:subPropertyOf owl:topDataProperty .

:hasProductDescription a owl:DatatypeProperty ;
    rdfs:comment "has product description",
        "hasProductDescription is used to represent a textual description of a product or product object." ;
    rdfs:domain [ a owl:Class ;
            owl:unionOf ( product:Item product:Product ) ] ;
    rdfs:range xsd:string ;
    rdfs:subPropertyOf owl:topDataProperty .

:hasProductID a owl:DatatypeProperty ;
    rdfs:comment "has product ID",
        "hasProductID is used to represent the product ID of a product or product object." ;
    rdfs:domain [ a owl:Class ;
            owl:unionOf ( product:Item product:Product ) ] ;
    rdfs:range xsd:int ;
    rdfs:subPropertyOf owl:topDataProperty .

:hasProductQuality a owl:ObjectProperty ;
    rdfs:label "has product quality" ;
    rdfs:comment "hasProductQuality is used to represent the quality of a product or product object." ;
    rdfs:domain [ a owl:Class ;
            owl:unionOf ( product:Item product:Product ) ] ;
    rdfs:range :ProductQuality ;
    rdfs:subPropertyOf owl:topObjectProperty .

:hasProductionDate a owl:DatatypeProperty ;
    rdfs:label "has production date" ;
    rdfs:comment "hasProductionDate is used to represent the production date of a specific product object." ;
    rdfs:domain product:Item ;
    rdfs:range xsd:date ;
    rdfs:subPropertyOf owl:topDataProperty .

:hasProductionSite a owl:DatatypeProperty ;
    rdfs:label "has production site" ;
    rdfs:comment "hasProductionSite is used to represent the site at which a given product or product object has been produced as a string. (This property could potentially be represented as an object property. The site could then potentially be treated as a location.)" ;
    rdfs:domain [ a owl:Class ;
            owl:unionOf ( product:Item product:Product ) ] ;
    rdfs:range xsd:string ;
    rdfs:subPropertyOf owl:topDataProperty .

:hasRecyclingPotential a owl:ObjectProperty ;
    rdfs:label "has recycling potential" ;
    rdfs:comment "hasRecyclingPotential describes the amount of the product or product object that can potenitally be recycled." ;
    rdfs:domain [ a owl:Class ;
            owl:unionOf ( product:Item product:Product ) ] ;
    rdfs:subPropertyOf <http://qudt.org/schema/qudt/quantityValue> .

:hasRecyclingSeparability a owl:ObjectProperty ;
    rdfs:comment "has recycling separability",
        "hasRecyclingSeparability is used to describe the amount of the product or product object that can be separated for recycling." ;
    rdfs:domain [ a owl:Class ;
            owl:unionOf ( product:Item product:Product ) ] ;
    rdfs:subPropertyOf <http://qudt.org/schema/qudt/quantityValue> .

:hasRefurbishmentMethod a owl:DatatypeProperty ;
    rdfs:label "has refurbishment method" ;
    rdfs:comment "hasRefurbishmentMethod is used to provide a textual description of the refurbishment process for a product or product object." ;
    rdfs:domain [ a owl:Class ;
            owl:unionOf ( product:Item product:Product ) ] ;
    rdfs:range xsd:string ;
    rdfs:subPropertyOf owl:topDataProperty .

:hasResistanceToEarth a owl:ObjectProperty ;
    rdfs:label "has resistance to earth" ;
    rdfs:comment "hasResistanceToEarth describes the resistance to earth of a product." ;
    rdfs:domain product:Product ;
    rdfs:subPropertyOf <http://qudt.org/schema/qudt/quantityValue> .

:hasReuseDeconstructability a owl:ObjectProperty ;
    rdfs:label "has reuse deconstructability" ;
    rdfs:comment "hasReuseDeconstructability is used to describe the amount of the product hat can be deconstructed for reuse." ;
    rdfs:domain product:Product ;
    rdfs:subPropertyOf <http://qudt.org/schema/qudt/quantityValue> .

:hasSystemWeight a owl:ObjectProperty ;
    rdfs:label "has system weight" ;
    rdfs:comment "hasSystemWeight is used to express the system weight of a product or product object." ;
    rdfs:domain [ a owl:Class ;
            owl:unionOf ( product:Item product:Product ) ] ;
    rdfs:subPropertyOf <http://qudt.org/schema/qudt/quantityValue> .

:hasTakeBackProgramFromOriginalManufacturer a owl:DatatypeProperty ;
    rdfs:label "has takeback program from original manufacturer" ;
    rdfs:comment "hasTakeBackProgramFromOriginalManufacturer is used to express whether the original manufacturer of a product has a take back program it (true/false)." ;
    rdfs:domain product:Product ;
    rdfs:range xsd:boolean ;
    rdfs:subPropertyOf owl:topDataProperty .

:hasTakeBackProgramOtherManufacturer a owl:DatatypeProperty ;
    rdfs:label "has takeback program from other manufacturer" ;
    rdfs:comment "hasTakeBackProgramFromOtherManufacturer is used to express whether another manufacturer has a take back program (true/false) for a product." ;
    rdfs:domain product:Product ;
    rdfs:range xsd:boolean ;
    rdfs:subPropertyOf owl:topDataProperty .

:hasTechnicalRequirementsForTakeBackForRecycling a owl:DatatypeProperty ;
    rdfs:label "has technical requirements for take back and recycling" ;
    rdfs:comment "hasTechnicalRequirmentsForTakeBackForRecycling is used to represent a textual description of the technical requirements of a product or product object for take back and recycling." ;
    rdfs:domain [ a owl:Class ;
            owl:unionOf ( product:Item product:Product ) ] ;
    rdfs:range xsd:string ;
    rdfs:subPropertyOf owl:topDataProperty .

:hasTechnicalRequirementsForTakeBackForReuse a owl:DatatypeProperty ;
    rdfs:label "has technical requirements for take back and reuse" ;
    rdfs:comment "hasTechnicalRequirmentsForTakeBackForReuse is used to represent a textual description of the technical requirements of a product or product object for take back and reuse." ;
    rdfs:domain [ a owl:Class ;
            owl:unionOf ( product:Item product:Product ) ] ;
    rdfs:range xsd:string ;
    rdfs:subPropertyOf owl:topDataProperty .

:hasThickness a owl:ObjectProperty ;
    rdfs:label "has thickness" ;
    rdfs:comment "hasThickness is used to describe the thickness of a product or product object." ;
    rdfs:subPropertyOf :hasDimension .

:hasUseSpanRemaining a owl:ObjectProperty ;
    rdfs:label "has use span remaining" ;
    rdfs:comment "hasUseSpanRemaining describes the remaining use span of a product or prodcut object." ;
    rdfs:subPropertyOf :hasUseSpan .

:hasUseSpanTotal a owl:ObjectProperty ;
    rdfs:label "has use span total" ;
    rdfs:comment "hasUseSpanTotal describes the total use span of a product or prodcut object." ;
    rdfs:subPropertyOf :hasUseSpan .

:hasWidth a owl:ObjectProperty ;
    rdfs:label "has width" ;
    rdfs:comment "hasHeight is used to describe the height of a product or product object." ;
    rdfs:subPropertyOf :hasDimension .

:installationLocation a owl:ObjectProperty ;
    rdfs:label "installation location" ;
    rdfs:comment "The location of where this product is installed." ;
    rdfs:subPropertyOf owl:topObjectProperty .

:isContaminated a owl:DatatypeProperty ;
    rdfs:label "is contaminated" ;
    rdfs:comment "isContaminated is used to express whether a specific product object contains any contaminants (true/false)." ;
    rdfs:domain [ a owl:Class ;
            owl:unionOf ( product:Item product:Product ) ] ;
    rdfs:range xsd:boolean ;
    rdfs:subPropertyOf owl:topDataProperty .

:medium_condition a :FloorTileCondition,
        owl:NamedIndividual ;
    rdfs:label "medium condition" .

:policyOnTreatment a owl:ObjectProperty ;
    rdfs:label "policy on treatment" ;
    rdfs:comment "policyOnTreatment describes the policy for treatment of used product." ;
    rdfs:domain product:Product ;
    rdfs:range :PolicyOnTreatment ;
    rdfs:subPropertyOf owl:topObjectProperty .

:product_quality_high a :ProductQuality,
        owl:NamedIndividual ;
    rdfs:label "Product quality high" .

:product_quality_low a :ProductQuality,
        owl:NamedIndividual ;
    rdfs:label "Product quality low" .

:product_quality_medium a :ProductQuality,
        owl:NamedIndividual ;
    rdfs:label "Product quality medium" .

:refurbish a :PolicyOnTreatment,
        :TreatmentPolicy,
        owl:NamedIndividual ;
    rdfs:label "refurbish" .

:reprocess a :PolicyOnTreatment,
        :TreatmentPolicy,
        owl:NamedIndividual ;
    rdfs:label "reprocess" .

:reuse a :PolicyOnTreatment,
        :TreatmentPolicy,
        owl:NamedIndividual ;
    rdfs:label "reuse" .

:Contaminant a owl:Class ;
    rdfs:label "Contaminant" ;
    rdfs:comment "A contaminant is any physical thing that is regarded as a contaminant when present in a product or product object." .

:DimensionalDeviation a owl:Class ;
    rdfs:label "Dimensional Deviation" ;
    rdfs:comment "The dimensional deviation information of an object." .

:hasUseSpan a owl:ObjectProperty ;
    rdfs:label "has use span" ;
    rdfs:comment "hasUseSpan describes the use span of a product or prodcut object." ;
    rdfs:domain [ a owl:Class ;
            owl:unionOf ( product:Item product:Product ) ] ;
    rdfs:subPropertyOf <http://qudt.org/schema/qudt/quantityValue> .

quantity:hasMarketValue a owl:ObjectProperty .

:Condition a owl:Class ;
    rdfs:label "Condition" ;
    rdfs:comment "Condition is used to describe the condition of a specific product object." .

:FireResistanceRating a owl:Class ;
    rdfs:label "Fire Resistance Rating" ;
    rdfs:comment "Fire resistance rating is expressed as 'F' followed by the minimum number of minutes in which the functionality of the product or product object can withstand fire. For example, F30 would therefore be a fire resistance duration of 30 min." .

:FloorTileCondition a owl:Class ;
    rdfs:label "Floor Tile Condition" ;
    rdfs:comment "Floor Tile Condition is used to describe the condition of a floor tile (good, medium, bad)." ;
    rdfs:subClassOf :Condition .

:TreatmentPolicy a owl:Class ;
    rdfs:label "Treatment Policy" ;
    rdfs:comment "TreatmentPolicy is used to describe the policy for treatment for a given product or product object." .

:hasDimension a owl:ObjectProperty ;
    rdfs:label "has dimension" ;
    rdfs:comment "hasDimension is used to describe a dimension of a product or product object." ;
    rdfs:domain [ a owl:Class ;
            owl:unionOf ( product:Item product:Product ) ] ;
    rdfs:subPropertyOf <http://qudt.org/schema/qudt/quantityValue> .

:PolicyOnTreatment a owl:Class ;
    rdfs:label "Policy On Treatment" ;
    rdfs:comment "PolicyOnTreatment represents the the policy for treatment (reuse, refurbish or reprocessing)" .

:ProductQuality a owl:Class ;
    rdfs:label "Product Quality" ;
    rdfs:comment "ProductQuality represents the quality of a product or product object." .

